問題:每次發(fā)起請求啤咽,同一條url有兩條請求
第一條請求Method是OPTIONS請求臣缀,
第二條請求Method才是實際發(fā)出的POST或GET請求
是由Web服務(wù)器處理跨域訪問引起的拧晕,是一種“預(yù)檢請求”
1.Chrome瀏覽器 ,勾選Disable cache選項就不能緩存,不勾選
2.后臺服務(wù)器設(shè)置ctx.set({"Access-Control-Max-Age": "100"});
第一個OPTIONS的請求是由Web服務(wù)器處理跨域訪問引發(fā)的匈棘,OPTIONS是一種“預(yù)檢請求”。
瀏覽器在處理跨域訪問的請求時如果判斷請求為復(fù)雜請求析命,則會先向服務(wù)器發(fā)送一條預(yù)檢請求主卫,根據(jù)服務(wù)器返回的內(nèi)容瀏覽器判斷服務(wù)器是否允許該請求訪問。
如果web服務(wù)器采用cors的方式支持跨域訪問碳却,在處理復(fù)雜請求時這個預(yù)檢請求是不可避免的队秩。
查詢代碼發(fā)現(xiàn),我們的web服務(wù)器確實采用的是cors來解決跨域訪問的問題昼浦,并且我們在header中添加了自定義參數(shù)馍资,導(dǎo)致我們的每次請求都為復(fù)雜請求,從而產(chǎn)生了每次請求都會發(fā)送兩條請求的現(xiàn)象。
既然瀏覽器在處理復(fù)雜請求時鸟蟹,不可避免的要發(fā)送預(yù)檢請求乌妙,那么能否減少預(yù)檢請求的次數(shù)呢?
比如建钥,預(yù)檢一次設(shè)置一個有效期藤韵,在有效期內(nèi)不再重復(fù)預(yù)檢。設(shè)置Access-Control-Max-Age這個參數(shù)即可達到預(yù)期目標熊经。該參數(shù)用來指定本次預(yù)檢請求的有效期泽艘,單位為秒。在服務(wù)器上設(shè)置該參數(shù)之后镐依,問題解決了匹涮。