這兩種請求的區別主要在於是否會觸發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的方式支持跨域訪問,在處理復雜請求時這個預檢請求是不可避免的。
————————————————