最近公司要求去掉所有請求的**,於是發現了乙個很奇妙的問題,請求乙個服務時,使用$.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請求...