當前位置:成語大全網 - 書法字典 - 為什麽js調用跨域get請求而webApi有更多選項request?

為什麽js調用跨域get請求而webApi有更多選項request?

讓我試著用我的話來描述它:

先說跨域請求的原理。瀏覽器的安全機制不允許跨域請求,否則會出現嚴重的安全問題。有幾種不同的方法來解決跨域問題。您在主題中提到的方法是將其添加到響應標頭中。Access-Control-Allow-Origin讓瀏覽器知道服務器所在的域,並授權用於訪問的域。

但是,由於此標頭需要由服務器提供,因此無論如何,都必須首先發送請求,以指導是否允許跨域請求。因此,當報告跨域錯誤時,雖然報告了錯誤,但實際上是向服務器發送了請求,但瀏覽器看了壹眼服務器的返回,然後發現它並不好。此請求返回的標頭沒有授權,因此瀏覽器無法使用。

這就帶來了壹個問題,請求會影響服務器。想象壹下,如果您想使用XHR跨域提交表單,無論是否在返回頭中添加了跨域頭,都會向服務器提交請求,並且服務器會執行相應的操作。這種情況在特定條件下實際上是可以接受的,但如果存在更大的安全風險,則不可能實現,因此需要OPTIONS請求。

OPTIONS請求是指在滿足特定條件的跨域請求發送之前,瀏覽器會發送壹個OPTIONS請求,並詢問服務器是否可以跨域。如果可以,它將發送壹個真正的請求。如果它不能,它將不會被發送。這個的功能很容易理解。

如上所述,並非所有跨域請求都需要首先發送OPTIONS請求。規範中規定,在以下情況下不需要首先發送選項請求:

請求類型必須是GET、HEAD和POST之壹。

請求的標頭只能包含壹些規範標頭和規範值,包括:接受、接受語言、內容語言、內容類型、DPR、下行鏈路、保存、數據、視口寬度和寬度。

內容類型的類型必須如下:應用程序/x-www-表單-URL編碼、多部分/表單-數據、文本/純文本。

因此,如果您不希望瀏覽器發出額外的選項請求,只需遵循此規範即可。

但有時出於需求原因,難免會定制壹些標題。例如,許多JS的AJAX庫會定制壹個標頭,以便服務器可以識別這是否是壹個異步請求,因此必須首先發送OPTIONS請求。

對了,服務端也要判斷OPTIONS類型請求並進行壹系列操作,以免讓OPTIONS請求影響數據。

有關更多信息,請參考相關材料和文件:

https://developer . Mozilla . org/en-US/docs/Web/HTTP/Access _ control _ CORS

https://developer . Mozilla . org/en-US/docs/Web/HTTP/Server-Side _ Access _ Control

https://www . w3 . org/Protocols/RFC 2616/RFC 2616-sec 9 . html