1、HTTP一共有八種常見請求方法
- get:參數在url上,瀏覽器長度有限制,不安全
- post:參數不可見,長度不受限制
- put:上傳最新內容到指定位置
- delete:刪除請求的url所表示的資源
- head:不返回相應主體,主要用於客戶端查看服務器性能
- options:與head相似,是客戶端用於查看服務器的性能 。JavaScript的XMLHttpRequest對象進行CORS跨域資源共享時,就是使用OPTIONS方法發送嗅探請求,以判斷是否有對指定資源的訪問權限
- connect:http1.1預留的,將鏈接方式改成管道方式,一般用於SSL加密服務器的連接與 HTTP非加密的代理服務器之間的通訊
- trace:請求服務器[回顯收到的請求信息]主要用於HTTP請求的測試或診斷
- patch:出現的較晚,用於更新局部的資源,不存在時,會建立一個新的(http1.1以後使用的較多的)
通常來講咱們只須要用到post和get,可是若是後端是ResetFul設計規範下就須要用到各類語義化的方法了nginx
2、什麼是預請求?
預請求就是複雜請求(可能對服務器數據產生反作用的HTTP請求方法,如put,delete都會對服務器數據進行更修改,因此要先詢問服務器)。
跨域請求中,瀏覽器自發的發起的預請求,瀏覽器會查詢到兩次請求,第一次的請求參數是options,以檢測試實際請求是否能夠被瀏覽器接受web
3、爲何須要?
w3c規範要求,對複雜請求,瀏覽器必須先使用options發起一個預檢請求,從而獲知服務器是否容許該跨域請求,服務器確認之後才能發起實際的HTTP請求,不然中止第二次正式請求。ajax
那爲何咱們不常見options請求呢??
由於大部分咱們使用的是get,post請求,他們屬於簡單請求,而簡單請求不會觸發options請求。
那什麼狀況下會發生options請求呢???👇spring
4、什麼狀況下發生?(如下都屬於複雜請求)
- 請求方法不是get head post
- post 的content-type不是application/x-www-form-urlencode,multipart/form-data,text/plain [也就是把content-type設置成"application/json"]
- 請求設置了自定義的header字段: 好比業務需求,傳一個字段,方面後端獲取,不須要每一個接口都傳
例如設置了post請求的content-type:application/json,就會發生預請求 json
5、爲何須要設置成contentType:"application/json"
ajax發送複雜的json數據結構, 處理方式困難, 服務器端難以解析, 因此就有了application/json這種類型(數據格式的聲明)服務端好解析而且比較統一,若是你請求中沒有設置成json格式的,有的服務端收到後也會改爲json格式的,可是如何請求中就改爲了json格式的就會發生options預請求後端
if設置了:
- 表示json格式的字符串,發送的json對象必須使用json.stringify進行序列化字符串才能匹配
- spring 須要使用@RequestBody來註解
if沒設置:
- 默認將使用contentType: "application/json」application/x-www-form-urlencoded
6、須要配置什麼?
在 CORS 中,可使用 OPTIONS 方法發起一個預檢請求,服務器基於從預檢請求得到的信息來判斷,以檢測實際請求是否能夠被服務器所接受。跨域
1.預請求的請求報文中要設置👇
- Access-Control-Request-Method首部字段: 告知服務器實際請求所使用的 HTTP 方法;
- Access-Control-Request-Headers首部字段: 告知服務器實際請求所攜帶的自定義首部字段。
2.同時服務端或者nginx 須要設置響應體👇
"Access-Control-Allow-Origin" : * 【跨域】
Access-Control-Allow-Methods:POST,GET,OPTIONS,DELEDET 【所容許的請求方法告知客戶端】
Access-Control-Allow-Headers: X-Requested-With, accept, origin, content-type【自定義的請求頭】
Access-Control-Allow-Age:3600
【一段時間內不須要再次預請求,直接用本次結果便可】
"Content-Type", "application/json;charset=utf-8"
複製代碼
7、options做用
OPTIONS請求方法的主要用途有兩個:瀏覽器
- 獲取服務器支持的HTTP請求方法;也是黑客常用的方法。
- 用來檢查服務器的性能。例如:AJAX進行跨域請求時的預檢,須要向另一個域名的資源發送一個options請求頭,用以判斷實際發送的請求是否安全。
8、跨域方法:
- JSONP跨域:動態生成script標籤,只支持get請求,可是兼容性比較好能夠支持老瀏覽器
- CORS跨源資源共享:options請求作嗅探
- webSockted:全雙工通訊
- img src :不受瀏覽器的同源限制