axios options請求 產生跨域問題 (check: It does not have HTTP ok status.)
阿新 • • 發佈:2020-12-10
文章目錄
報錯
錯誤原因
看著一個 CORS
就直接以為是跨域問題,回頭一看伺服器的跨域是全部配了的呀,所以覺得問題應該不是在後端上;
然後一看前端,一個axios的試探請求,什麼資料都麼有撒,也正確的呀;
開始懷疑瀏覽器快取問題,清理瀏覽器資料(我次奧。。我收藏的小網址。。。。),然後直接開啟無痕模式(除錯前端的時候最好開啟無痕模式除錯)
然後還不行。(煩躁)
關機重啟,還是不行(鬼火搓)
然後直接百度了三個多小時,全部叫我去配置跨域。。。我tm。。。可能是我蠢,一個都沒有成功。
最後還是在思否上面偶然看見一篇小帖子,勉強解決。。。
產生的原因
:是因為在使用axios傳送請求的時候,加入了自定義請求頭(比如token),然後 axios 就會產生options試探請求。
解決辦法
直接響應OPTIONS
請求,就是伺服器接收到options請求就直接返回一個成功操作。
用 node來舉個例子
app.use(async (ctx, next) => {
ctx.set('Access-Control-Allow-Origin', '*');
ctx.set('Access-Control-Allow-Credentials', true);
ctx.set('Access-Control-Allow-Methods' , 'GET, POST, DELETE, PUT ,OPTIONS');
ctx.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, Authorization');
ctx.header("Content-Type", "application/json;charset=utf-8");
// 這裡的話相當於設定了快取的有效時間,減少options請求的次數
// 相當於傳送了一次options請求之後,300s 內不需要再發送了
ctx.set("Access-Control-Max-Age", 300);
if(ctx.request.method === 'OPTIONS'){ // 直接響應資料 (***** 這裡是最重要的if ***)
ctx.body = 200
}
await next();
});