乙個Option請求引發的深度解析

2021-07-29 17:31:24 字數 1091 閱讀 8533

在當前專案中,前端通過post方式訪問後端的rest介面時,發現兩條請求記錄,一條請求的request method為options,另一條請求的reuest method為post。想要解決這個疑惑還得從以下3個概念說起。

rfc2616標準(現行的http/1.1)中如下描述:

簡而言之,options請求方法的主要用途有兩個:

1、獲取伺服器支援的http請求方法;

2、用來檢查伺服器的效能。

cors(跨域資源共享)

cors是一種網路瀏覽器的技術規範,它為web伺服器定義了一種方式,允許網頁從不同的域訪問其資源。而這種訪問是被同源策略所禁止的。cors系統定義了一種瀏覽器和伺服器互動的方式來確定是否允許跨域請求。 

使用cors的方式非常簡單,但是需要同時對前端和伺服器端做相應處理。

1、  前端

客戶端使用xmlhttprequest發起ajax請求,當前絕大部分瀏覽器已經支援cors方式,且主流瀏覽器均提供了對跨域資源共享的支援。

2、  伺服器端

如果伺服器端未做任何配置,則前端發起ajax請求後,會得到cors access deny,即跨域訪問被拒絕。

對於c#做如下配置可允許資源的跨域訪問: 

...對於nodejs做如下配置可允許資源的跨域訪問: 

access-control-allow-origin:*表示允許任何域發起請求,如果只允許特定的域訪問,則設定access-control-allow-origin:***為具體網域名稱即可。

preflighted requests(預檢請求)

preflighted requests是cors中一種透明伺服器驗證機制。預檢請求首先需要向另外乙個網域名稱的資源傳送乙個 http options 請求頭,其目的就是為了判斷實際傳送的請求是否是安全的。

下面的2種情況需要進行預檢:

2、中設定自定義頭,比如 x-json、x-mengxianhui 等。

了解完這3個概念,其實答案已經了然了。

參考:

乙個Option請求引發的深度解析

rfc2616標準 現行的http 1.1 中如下描述 簡而言之,options請求方法的主要用途有兩個 1 獲取伺服器支援的http請求方法 2 用來檢查伺服器的效能。cors 跨域資源共享 cors是一種網路瀏覽器的技術規範,它為web伺服器定義了一種方式,允許網頁從不同的域訪問其資源。而這種訪...

乙個memset引發的血案

前幾天做了一道bst題,提交了幾次都是wa,今天抽空拿了出來仔細瞧瞧總算被我發現禍頭根源.總結原因還在於自己對memset不太了解,以前用對估計也是瞎貓撞見死耗子 memset的介紹 void memset void buffer,int ch,size t count buffer 指向某段記憶體...

乙個分號引發的「血案」

再多的表情也無法詮釋我現在的心情!a b for matrices 這是很水的一道題,然而卻整整折騰了我2個多小時。從晚上6點多開始,花了沒幾分鐘就把 敲好了,可是資料一測,竟然不對,然後就開始找問題,找了很久,我竟然都還沒看出問題在哪,越找心裡越不爽,這麼做明明對的呀,一執行怎麼就錯了呢?一直到了...