JSONP
-
JSON with padding 簡稱JSONP 戏售,實(shí)現(xiàn)原理
通過動(dòng)態(tài)<script>
元素,指定src屬性為一個(gè)跨域的URL扔傅。跟后端約定一個(gè)函數(shù)的調(diào)用谭期。通常回調(diào)的函數(shù)名在URL中指定褥蚯,例如:
<script src="http://freegeorp.net/json/?callback=handleResponse"></script>
- 返回的數(shù)據(jù)類似于,直接當(dāng)做是JS來執(zhí)行
handleResponse({name: 'nama', value: 'value'})
- 可以通過動(dòng)態(tài)添加script元素加載
function loadScript (url) {
var script = document.createElement('script');
script.src = url;
var head = document.getElementsByTagName('head')[0];
head.appendChild(script);
head.removeChild(script);
}
-
JSONP的一些限制
- 只可以使用GET請求
- 難以監(jiān)聽得知是否請求失敗 (script.onerror) IE9+
cors(跨資源共享)
當(dāng)瀏覽器發(fā)送一個(gè)XMLHttpRequest請求時(shí),如果發(fā)現(xiàn)該請求不符合同源策略,會(huì)給請求頭部添加一個(gè)額外的origin
,其中包含著請求頁面的源信息(協(xié)議威始、域名、端口)像街,以便服務(wù)器根據(jù)這個(gè)頭部信息決定是否給予響應(yīng)黎棠。
-
cors的一些限制
不可以使用setRequestHeader()
設(shè)置自定義頭部晋渺。
不能發(fā)送和接收cookie。
調(diào)用getA了了ResponseHeaders()方法總會(huì)放回空字符串
Origin: http://www.baidu.com
如果確定接受請求則在返回結(jié)果中加入一個(gè)響應(yīng)頭:Access-Control-Allow-Origin; 瀏覽器判斷如果有這個(gè)頭部信息并且這個(gè)頭部信息匹配源信息脓斩,瀏覽器就允許用戶獲取這個(gè)請求的數(shù)據(jù)木西。
Access-Control-Allow-Origin: http://baidu.com
或者這個(gè)是一個(gè)公共的數(shù)據(jù)
Access-Control-Allow-Origin: *