[CORS] POST 方法 Postman 可以過,但是 Axios 無法
問題說明
POST 方法在瀏覽器中會觸發預檢請求(preflight),瀏覽器實際上會送出兩個請求,第一個是 OPTIONS、第二個是 POST,當後端伺服器對 preflight 的回應沒有設置好時就會觸發瀏覽器的 cors 阻擋。
Postman 發送 POST 請求時不會有 preflight,要檢測 preflight 可以另外發送 OPTIONS 請求。
可能原因
後端沒有設置 cors header
1
'Access-Control-Allow-Origin': '*',
後端沒有設置 OPTIONS methods 或 response
1
2
3'Access-Control-Allow-Methods': '...(其他方法).., OPTIONS',
// 除 header 之外還要設置 OPTIONS 的回傳內容,不然可能被 40x 錯誤捕捉到。
檢查測試
確認瀏覽器錯誤訊息是否包含 preflight 的字眼。
Access ..... has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
使用 Postman 發出 OPTIONS 請求,查看回應資訊。
解決方式
- 正解:請後端加上 cors headers 或是確認 OPTIONS 的設置。
- 暫時解:使用 CorsAnywhere、關閉瀏覽器 cors…等。
參考文章