kong - cors插件 問題排查與解決
最近遇到一個問題淑仆,使用kong網關時太闺,當我們在路由route上配置了插件跨域cors和認證key-auth插件之后糯景,通過ajax模擬跨域方式請求時省骂,需要在header中攜帶 apikey : 123456 時蟀淮,一直無法訪問成功钞澳,仍舊顯示跨域的錯誤信息怠惶!
問題排查
1轧粟、首先認為是cors插件在接收時優(yōu)先級高于key-auth插件策治,故而設置headers和exposed_headers的值,如下圖:
然而經過測試通惫,仍舊無效!
2履腋、經過不斷的嘗試,起初遵湖,我只使用了google瀏覽器進行測試悔政,后來延旧,使用Safari瀏覽器進行了嘗試谋国,未進行任何設置如下:
這里迁沫,在safari瀏覽器中有個非常牛皮的設置,直接解決跨域的問題弯洗,當然旅急,這種方式不可饶嫡藐吮!在【開發(fā)】下拉項中選中【停用跨源限制】逃贝,這樣就可以解決上述的問題谣辞,當然重復一次:不可茹灏狻D啻印;ι恪躯嫉!
這時杨拐,有個奇怪的玩意露出馬腳了~ 我們在safari的控制臺下的【資源】欄發(fā)現(xiàn)了端倪祈餐!請注意看下圖:
注意看紅色框中的內容:請求方式為OPTIONS哄陶? 并且還未請求到數據:4047簟N荻帧蜒谤!原來,他在正式訪問接口之前鳍徽,進行了一次OPTIONS預檢請求(推薦閱讀:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)资锰!然而阶祭,我們的接口并沒有定義OPTIONS的請求方式啊台妆,所以訪問404了胖翰,預檢請求失敗,后續(xù)也就無法繼續(xù)請求了G欣濉!疫稿!
問題解決
那現(xiàn)在來解決這個OPTIONS請求,我們給接口添加上OPTIONS請求方式:
同時遗座,將新的設置更新至kong中!這時途蒋,我們再去調用ajax請求猛遍,結果成功:牌隆0每尽宽堆!Amazing~