AJAX(XMLHttpRequest)進行跨域請求方法詳解(二)

注意:以下代碼請在Firefox 3.5、Chrome 3.0、Safari 4之後的版本中進行測試。IE8的實現方法與其他瀏覽不同。

 

2,預檢請求

預檢請求首先需要向另外一個域名的資源發送一個 HTTP OPTIONS 請求頭,其目的就是爲了判斷實際發送的請求是否是安全的。下面的2種情況需要進行預檢:
a,不是上面的簡單請求,比如使用Content-Type 爲 application/xml 或 text/xml 的 POST 請求
b,在請求中設置自定義頭,比如 X-JSON、X-MENGXIANHUI 等

 

注意:在 iis 裏進行測試,必須在“應用程序擴展”裏面配置 .aspx 擴展的動作允許 OPTIONS。

下面我們舉一個預檢的請求:

上面的例子我們發送 xml 格式的數據,並且,發送一個非標準的HTTP頭 POWERED-BY-MENGXIANHUI 來說明服務器端該如何設置響應頭的。

在服務器端,PreflightedRequests.aspx 的內容如下:

點擊“開始測試”按鈕,將會執行下面的一系列請求。

 

以上的代碼反映了預檢請求的執行過程:首先發送 OPTIONS 請求頭,用來向服務器諮詢服務器的更多信息,以便爲後續的真實請求做準備。比如是否支持 POST 方法等。值得注意的是:

瀏覽器還發送 Access-Control-Request-Method: POST 和 Access-Control-Request-Headers: powered-by-mengxianhui 請求頭。

注意:以上過程是第一次請求的時候的過程,如果在 30 秒內重複點擊按鈕,你可以看不到 OPTIONS 這一過程。則執行過程是這樣的:

 

 

爲什麼會這樣?細心的童鞋可能注意到了,在服務器端有一行代碼 Response.AddHeader("Access-Control-Max-Age", "30");  它是用來設置預檢的有效時間的,單位是秒。這一點要特別注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章