XHR的跨域請求和JSONP詳解

2022-09-14 01:21:08 字數 1382 閱讀 1673

首先:什麼是跨域?

cross domain request:從乙個資源請求另乙個資源,二者所在的請求位址不同,網域名稱不同、埠號不同、請求協議不同。

它是由瀏覽器的同源策略造成的,是瀏覽器對j**ascript施加的安全限制。

關於同源策略 這裡推薦感興趣的可以去 阮大的部落格檢視  阮一峰的個人部落格

如何區分當前的請求是跨域請求?

在前端使用xhr物件發起請求時 瀏覽器 會將請求的傳送位址和請求位址 的 協議  網域名稱 埠號 做 字串的匹配

瀏覽器允許跨域請求的情形

img、link、script、iframe ...

瀏覽器禁止跨域請求的情形

xhr  —— 瀏覽器處於安全考慮,禁用了xhr的跨域請求(其實伺服器給出了響應訊息,但瀏覽器不讓使用)

如何解決瀏覽器的xhr跨域請求限制?

網上有關解決跨域請求的方法五花八門,這裡僅僅列出常用的兩種

1)、修改響應訊息頭部,新增access-control-allow-origin頭部     伺服器端新增響應頭部  

2)、使用jsonp

jsonp:json with padding,填充式json,與json完全兩碼事,是一種使用json資料的方式。意思是在json字串左右新增函式名: doresponse();

通常我們使用 script 標籤獲取並執行一段js** 而scrip標籤和所以擁有src屬性的元素一樣 不受瀏覽器同源策略的影響;

如果我們請求的是 doresponse(

data ) 同時本地建立了乙個 doresponse 函式 

結果 就是直接呼叫了 doresponse 函式  並在其引數組中獲得了 我們需要的資料 data

傳送jsonp請求

jquery中如何使用jsonp發起非同步請求:

(1) $.getjson()

用途1:使用xhr發起非同步請求(不能跨域)

$.getjson('x.php', doresponse)

用途2:使用jsonp發起跨域非同步請求

(2) $.ajax() 推薦

用途1:使用xhr發起非同步請求(不能跨域)

$.ajax()

用途2:使用jsonp發起跨域非同步請求

$.ajax()

jquery 中極度簡化了 script 獲取後端響應資料的過程 但原理都是一樣的;

JSONP跨域請求

看到jsonp我們會很自然的想到json,但它們卻有很大的不同,json是一種輕量級的資料交換格式,而jsonp可以說是一種非官方的資料互動協議。jsonp json with padding 利用jsonp可以從別的網域名稱下獲取資料,即跨域獲取資料。由於同源策略不允許xmlhttprequest...

JSONP跨域請求

前端常用ajax請求來實現不重新整理頁面方式向伺服器請求資料,但它受瀏覽器同源策略的影響而無法實現跨域請求。然而script標籤src屬性的引用卻是不受跨越限制的,基於此可以傳送跨域請求,服務端不再是返回json格式的資料,而是返回一段呼叫某個函式的js 在src中進行了呼叫。您所在的城市天氣情況 ...

jsonp跨域請求

ajax是不能跨域的,但是利用jsonp是可以實現跨域的,博主今天記錄一篇jsonp跨域的例項。通俗的說,就是利用的特殊性去請求伺服器,伺服器返回josnp格式資料,jsonp資料格式 function json 換句話說,就是把json資料報裝在乙個函式引數中返回,然後呼叫本地js中的functi...