爬蟲 關於 HTTP 的 OPTIONS 請求

2021-10-07 00:25:07 字數 1330 閱讀 1002

用於獲取目的資源所支援的通訊選項。客戶端可以對特定的 url 使用 options 方法,也可以對整站(通過將 url 設定為「*」)使用該方法;

簡單來說,就是可以用 options 請求去嗅探某個請求在對應的伺服器中都支援哪種請求方法;

前端一般不會主動發起這個請求,但是通過f12 debug頁面,一般可以看到 相同的請求會有兩次,其中一次的 request method 是 options;

因為在跨域的情況下,在瀏覽器發起"複雜請求"時主動發起的。跨域共享標準規範要求,對那些可能對伺服器資料產生***的 http 請求方法(特別是 get 以外的 http 請求,或者搭配某些 mime 型別的 post 請求),瀏覽器必須首先使用 options 方法發起乙個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。伺服器確認允許之後,才發起實際的 http 請求。

某些請求不會觸發 cors 預檢請求,這樣的請求一般稱為"簡單請求",而會觸發預檢的請求則稱為"複雜請求"。

簡單請求

複雜請求

request header 的關鍵字段

response header 的關鍵字段

當我們發起跨域請求時,如果是簡單請求,那麼我們只會發出一次請求,但是如果是複雜請求則先發出 options 請求,用於確認目標資源是否支援跨域,然後瀏覽器會根據服務端響應的 header 自動處理剩餘的請求,如果響應支援跨域,則繼續發出正常請求,如果不支援,則在控制台顯示錯誤。

由此可見,當觸發預檢時,跨域請求便會傳送 2 次請求,既增加了請求數,也延遲了請求真正發起的時間,嚴重影響效能。

所以,我們可以優化 options 請求,主要有 2 種方法。

1、轉為簡單請求,如用 jsonp 做跨域請求

對 options 請求進行快取,伺服器端設定 access-control-max-age 字段,那麼當第一次請求該 url 時會發出 options 請求,瀏覽器會根據返回的 access-control-max-age 字段快取該請求的 options 預檢請求的響應結果(具體快取時間還取決於瀏覽器的支援的預設最大值,取兩者最小值,一般為 10 分鐘)。

2、在快取有效期內,該資源的請求(url 和 header 欄位都相同的情況下)不會再觸發預檢。(chrome 開啟控制台可以看到,當伺服器響應 access-control-max-age 時只有第一次請求會有預檢,後面不會了。注意要開啟快取,去掉 disable cache 勾選。)

options 請求就是預檢請求,可用於檢測伺服器允許的 http 方法。當發起跨域請求時,由於安全原因,觸發一定條件時瀏覽器會在正式請求之前自動先發起 options 請求,即 cors 預檢請求,伺服器若接受該跨域請求,瀏覽器才繼續發起正式請求。

關於select選中option時的方法

今天在給專案新增新功能的時候遇到了乙個問題,就是關於select怎麼 選中的option關聯起來 比如 其實可以直接通過 繫結change事件 通過 two val 來獲取選中 option中的value值,然後進行判斷。但是我今天遇到的問題是,option裡面的value值到時候要繫結在optio...

修改爬蟲的HTTP請求

如果遇到會對請求頭進行審查的 他的status code會為非200,這時候想要正常爬取,需要新建鍵值對kv 並在requests.get 裡面加上headers kv 下面是實際 import requests url kv try r requests.get url,headers kv r....

網路爬蟲(1) 爬蟲與HTTP

聚焦爬蟲 聚焦爬蟲是根據指定的需求抓取網路上指定的資料。例如 獲取豆瓣上電影的名稱和影評,而不是獲取整張頁面中所有的資料值。增量式爬蟲 增量式是用來檢測 資料更新的情況,且可以將 更新的資料進行爬取 後期會有章節單獨對其展開詳細的講解 即 有權規定 中哪些內容可以被爬蟲抓取,哪些內容不可以被爬蟲抓取...