關於CORS預檢

2022-09-12 01:18:28 字數 864 閱讀 2595

最近公司要求去掉所有請求的**,於是發現了乙個很奇妙的問題,請求乙個服務時,使用$.get()返回的是正確的,但是使用openlayers.request.get則會返回500,

於是開啟控制台看看兩個請求之間的區別:

心思縝密的我一下子就發現了問題:openlayers.request.get發出的竟然是options請求,服務對options請求報錯,於是便產生了這個問題;

那麼,為什麼openlayers.request.get發出的是options請求呢,那就的跟蹤一下openlayers的原始碼啦,一頓視姦後,openlayers的請求實際是通過xmlhttprequest物件來實現的,傳參也是正確的,到底在哪齣問題了呢???

原來鴨,是由於openlayers在請求時預設帶了乙個請求頭:access-control-request-headers:x-requested-with,根據cors規定,這個請求不屬於簡單請求(****** request)於是便觸發了乙個"預檢"請求,要求伺服器確認可以這樣請求,這時該服務對option型別的請求報錯,就導致了本次問題的產生。

如何解決呢?

最簡單的,讓請求作為簡單請求發出,以此避免預檢,而想要成為簡單請求,就得割捨一些東西,「放下我執,方得自在」,同時滿足下面的兩個條件,才能稱之為簡單請求

(1) 請求方法是以下三種方法之一:

(2)http的頭資訊不超出以下幾種字段:

CORS預檢請求詳談CORS預檢請求詳談

最近在專案中因前後端部署不同地方,前端在請求後端api時發生了跨域請求,我們採用cors 跨域資源共享 來解決跨域請求,這需要前後端的配合來完成。在這一過程中,後端支援了cors跨域請求後,前端的請求配置可能會調起cors的preflight請求,也就是我們所說的預檢請求。對cors不太熟悉的可能會...

CORS 為什麼要區分 簡單請求 和 預檢請求 ?

cors cross origin resource sharing 跨源資源共享 一般俗稱 跨域請求 想必大家都已經有基本的了解。如果你還不了解的話,可以閱讀mdn 上的介紹 這裡就不贅述了。不過在學習cors時,有些朋友會有疑惑,為什麼cors要把請求分成兩類 簡單請求和預檢請求 preflig...

preflight request預檢請求

preflight request預檢請求,負責檢查是否允許跨域請求,但是注意並不是所有的跨域請求都會傳送preflight請求。對與那些冪等的請求,如get請求,就不會傳送preflight請求。只有那些會改變伺服器狀態的請求才可能傳送preflight請求,如果post delete和put請求...