AJAX 跨域請求解

admin發表於2019-02-24

AJAX非同步請求受到同源策略的約束,當前有三種方式可以解決此問題。

一.JSONP:

關於JSONP的詳細介紹參閱JSONP用法詳解一章節。

二.CORS:

CORS是W3C標準,是跨源AJAX請求的最佳解決方案。

JSONP只能發GET請求,CORS允許任何型別的請求,具體參閱CORS詳解一章節。

上面介紹的是普通意義上的AJAX請求(XMLHttpRequest)的解決方案。

下面所介紹的WebSocket可以完成非同步請求,是一種新的通訊協議,它不受同源策略的約束。

三.WebSocket:

WebSocket是符合標準的通訊協議,它不受同源策略的約束,只要伺服器支援,就可以通過它進行跨源通訊。

程式碼片段如下:

[HTML] 純文字檢視 複製程式碼
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

Origin欄位表示該請求的請求源(origin),伺服器可以根據這個欄位,判斷是否許可本次通訊。

如果該域名在白名單內,伺服器就會做出如下回應:

[HTML] 純文字檢視 複製程式碼
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

關於WebSocket更多內容參閱WebSocket 用法詳解一章節。

相關文章