1. 程式人生 > 其它 >axios options請求 產生跨域問題 (check: It does not have HTTP ok status.)

axios options請求 產生跨域問題 (check: It does not have HTTP ok status.)

技術標籤:CORSnodetokennode

文章目錄

報錯

報錯

錯誤原因

看著一個 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(); });