簡單請求與復雜請求


這兩種請求的區別主要在於是否會觸發CORS(Cross-Origin Resource Sharing)預檢請求

簡單請求

1. 請求方法

  • GET

  • POST

  • HEAD

2. 不能自定義請求頭header, 以下頭部信息除外:

  • Accept

  • Accept-Language

  • Content-Language

  • Content-Type

3. Content-Type 的值僅限於下列三者之一:

  • text/plain

  • multipart/form-data 文件上傳時要使用的數據類型

  • application/x-www-form-urlencoded 最常見的post的數據類型,也是表單提交的數據類型,jquery的ajax默認也是這個

4. 關於XMLHttpRequestUpload:

  • 請求中的任意XMLHttpRequestUpload 對象均沒有注冊任何事件監聽器

  • XMLHttpRequestUpload 對象可以使用 XMLHttpRequest.upload 屬性訪問

5. 請求中沒有使用 ReadableStream 對象

復雜請求

  • 不符合簡單請求的就是復雜請求

相關案例

跨域ajax兩次請求 一次為option(復雜請求)

原因:

1. 跨域
2. 請求為復雜請求

解決辦法:

1. 改為簡單請求(去掉header等)
2. 服務端設置:Access-Control-Max-Age
 * 注意:2並不會完全去掉預檢查option請求,但是只會檢查一次,后續請求在到達過期時間之前均不再進行option預請求。*

擴展資料

XMLHttpRequest會遵守同源策略(same-origin policy). 也即腳本只能訪問相同協議/相同主機名/相同端口的資源, 如果要突破這個限制, 那就是所謂的跨域, 此時需要遵守CORS(Cross-Origin Resource Sharing)機制。

那么, 允許跨域, 不就是服務端設置 *Access-Control-Allow-Origin: * * 就可以了嗎? 普通的請求才是這樣子的, 除此之外, 還一種叫請求叫preflighted request。

preflighted request在發送真正的請求前, 會先發送一個方法為OPTIONS的預請求(preflight request), 用於試探服務端是否能接受真正的請求,如果options獲得的回應是拒絕性質的,比如404\403\500等http狀態,就會停止post、put等請求的發出。

第一個OPTIONS的請求是由Web服務器處理跨域訪問引發的。OPTIONS是一種“預檢請求”,瀏覽器在處理跨域訪問的請求時如果判斷請求為復雜請求,則會先向服務器發送一條預檢請求,根據服務器返回的內容瀏覽器判斷服務器是否允許該請求訪問。如果web服務器采用cors的方式支持跨域訪問,在處理復雜請求時這個預檢請求是不可避免的。

————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM