跨域

解決跨域訪問,最常用有三種辦法

  • CORS
  • jsonp
  • 代理

CORS

cross origin resource share,跨資源共享

  • 主要是站在服務端的角度,對外開放訪問權限
  • 要求,我們需要有權限去編寫(修改)服務端的代碼
  • 同時,在瀏覽器端,不用寫任何代碼

注意:

Cors插件不是真正的解決方案,只是一個臨時,在開發的時候,可以用一用而已。
項目上線的時候,不可能使用這種方案。

jsonp

json with packing,json的一個包裝,是一種協議,協議用來傳遞數據的。是途徑。好比是傳遞情報的方式。

原理:

因為script標簽 本身是可以進行跨域訪問的,我們利用這一點,創建一個方法,動態的去添加一個script標簽,并指定url,當請求成功,服務端返回一個js字符串,作為script標簽內容,可以直接被js執行

我們可以通過在瀏覽器端定義一個函數callback,傳遞給服務端,服務端可以獲取這個callback,并把要返回的數據,作為這個callback的參數,返回callback,

function addScript(url) {
    let script = docunment.creatElement('script');
    script.src = url;
    documnet.body.appendChild(script);
}
function cb(res){
    console.log(res);
}
addScript('網址?callback=cb');

注意

要實現jsonp,在服務端和瀏覽器端都需要編寫相應的代碼。
Jsopn的原理是基于script標簽,它==只能實現get跨域==,不能實現post跨域。[注意]

jsonp和json的區別,

  • Json,javascript object notation,js對象表示,是一個種格式,本質是字符串。是數據。好比是情報。
  • Jsonp,json with packing,json的一個包裝,是一種協議,協議用來傳遞數據的。是途徑。好比是傳遞情報的方式。

代理

因為cros和jsonp都是需要后端有配合代碼,所以當后端沒有配合代碼的時候,我們可以自己寫一個后端,然后替前端去請求數據

我們可以把要請求的接口作為數據發送給 作為代理的后端

$.ajax({
    url: '/daili',
    type: 'get',
    data: '接口地址',
    datatype: 'json',
    seccess: function(res){
        console.log(res);
    }
})

接著后端獲取到發送的數據

app.get('/daili', (req, res) => {
    let url = req.query.url;
    http.get(url, (response) => {
        let data = '';
        response.on('data', (chunk) => {
            data += chunk;
        });
        response.on('end', () => {
            res.json(JSON.parse(data));
        })
    })
})
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • http協議 Resource,URL,Request,Response,Headers http 請求的是資源R...
    Sharise_Mo佩珊閱讀 699評論 0 4
  • 1. 什么是同源策略 瀏覽器限制不同源的兩個網站間腳本和文本的相互訪問,只允許訪問同源下的內容。所謂同源,就是指兩...
    熊蛋子17閱讀 697評論 1 6
  • 題目1.什么是同源策略? 同源策略(Same origin Policy): 瀏覽器出于安全方面的考慮,只允許與本...
    FLYSASA閱讀 1,744評論 0 6
  • 1. 什么是跨域? 跨域一詞從字面意思看,就是跨域名嘛,但實際上跨域的范圍絕對不止那么狹隘。具體概念如下:只要協議...
    w_zhuan閱讀 527評論 0 0
  • 丁酉年,生肖兔者,沖太歲,諸事不宜。 丁酉年,雙春閏月桃花年。 在沒有進入2017年的時候,看到這樣的年歲信息,心...
    冰果真多閱讀 209評論 1 3