鍍金池/ 問答/Python  HTML/ ie8不支持https協(xié)議的api接口么

ie8不支持https協(xié)議的api接口么

用jquery的 jsonp 請求來獲取接口數(shù)據(jù),在ie9+和其他瀏覽器都正常,但是在ie8的時候報錯。后來經(jīng)過demo測試發(fā)現(xiàn)是http協(xié)議的接口正常,https協(xié)議的就不行

測試代碼如下

$.ajax({
    // url: 'https://randomuser.me/api/?results=5', // ie8失敗
    // url: 'http://suggestion.baidu.com/su?wd=11&p=3&t=1526957301796', // ie8成功
    // url: 'https://api.ipify.org/?format=jsonp', // ie8失敗
    // url: 'http://api.ipify.org/?format=jsonp', // ie8成功(與上一個一樣的接口,只是協(xié)議不同)
    dataType: 'jsonp',
    type: 'get',
    // jsonp: "cb", // 這個是第2個url的接口要求
    success: function(res){
        console.log(res)
    },
    error: function(err){
        console.log('錯誤', err)
    }
})

除此之外還發(fā)現(xiàn),只要引入的是https的jquery cdn地址如
<script src="https://cdn.bootcss.com/jquery/1.2.3/jquery.js"></script>
就會報clipboard.png

這是ie8不支持https的引用么,因為一直找不到官方的說法,一直無法明確這個答案,希望能有明確的說法

回答
編輯回答
風(fēng)清揚

clipboard.png

如圖 ie8 并沒有你這個問題

clipboard.png

---------補充,別說ie8了,ie5我都跑通了---------

clipboard.png

前端代碼如下

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="https://cdn.bootcss.com/jquery/1.2.3/jquery.js"></script>
    </head>
    <body class="bg1">
        <div id="root"></div>
        <script>
        var $dom = $("#root");
        
        $.ajax({
            url: 'https://localhost:3000/demo/api/sayHi',
            dataType:"json",
            data:{name:"jack"},
            type: 'post',
            success: function(res){
                $dom.text(res.data);
            },
            error: function(err){
                $dom.text('錯誤'+err.toString());
            }
        })
        </script>
    </body>
</html>

后端代碼如下,用nodejs實現(xiàn)的,其他語言也行,反正接口能返回東西就行

const express = require("express");
const app = express();

const fs = require("fs");
//讀取ssl的key
const privateKey = fs.readFileSync('./private.pem', 'utf8');
//讀取ssl的證書
const certificate = fs.readFileSync('./file.crt', 'utf8');
//裝箱
const credentials = { key: privateKey, cert: certificate };
//https的server
const SSLServer = require("https").createServer(credentials, app);

const router = express.Router();
const bodyParser = require("body-parser");

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }));
// parse application/json
app.use(bodyParser.json());

//子路由
app.use("/demo", router);



/************常規(guī)接口開始*************/
//sayHi
router.post("/api/sayHi", (req, res) => {
    const { name } = req.body;
    res.json({code:0,message:"success",data:"hi,"+name})
});

/************常規(guī)接口結(jié)束*************/

//托管靜態(tài)資源
app.use("/demo", express.static('static'));
//404處理
app.use(function (req, res, next) {
    res.setHeader("Content-Type", "text/html;charset=utf-8");
    res.status(404).sendFile(__dirname + "/static/404.html");
});
//其它錯誤處理如500
app.use(function (err, req, res, next) {
    if (err) {
        console.log(err.stack.toString());
        res.setHeader("Content-Type", "text/plain;charset=utf-8");
        res.status(500).send('服務(wù)器大姨媽了!<br>servers is broken');
    }
});

SSLServer.listen("3000", function () {
    console.log("https服務(wù)器已啟動");
});

以下截圖為我上面貼的代碼以表證據(jù)

clipboard.png

clipboard.png

-----------結(jié)論/推理------------
你上面所說的同一個接口 一個http成功一個https不成功
那要取決于你訪問的這種網(wǎng)頁是什么協(xié)議 如果你網(wǎng)頁訪問的地址是http的 你去訪問一個https的 多半瀏覽器會阻止的

這句話可能比較拗口,見諒,我文字表述能力不強。。你自己意會一下吧

2018年5月5日 02:39
編輯回答
裸橙

樓上大佬已經(jīng)解釋的很清楚了。。https在請求的時候會進(jìn)行三次握手,這和瀏覽器本身并沒有關(guān)系,建議去了解一下http和https之間的不同,在https項目中調(diào)用http接口,以及是否$符被占用方向研究一下

2017年12月21日 08:24