Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight respon

孔德昌發表於2021-01-02

一、問題:

跨域請求中包含自定義header欄位時,瀏覽器console報錯。

Request header field xfilesize is not allowed by Access-Control-Allow-Headers

1 想要實現前後分離,首先得跨域
2 怎麼跨域,在後端中 servlet 或 filter 設定請求頭,然後就出問題了
3 has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response
已被CORS策略阻止:響應請求頭,不允許請求標頭欄位內容型別
4 問題就出在這,思考了很久,程式碼好像沒錯啊

response.setHeader("Access-Control-Allow-Origin");
response.setHeader("Access-Control-Allow-Credentials", "true");

5 百度了之後,原因:

包含自定義header欄位的跨域請求,瀏覽器會先向伺服器傳送OPTIONS請求,探測該伺服器是否允許自定義的跨域欄位。
如果允許,則繼續實際的POST/GET正常請求,否則,返回標題所示錯誤

6 說白了就是,要有自定義請求頭和響應頭完成跨域互動,瀏覽器要求的(瀏覽器版本新)

7 java 自定義請響應頭,給瀏覽器一個響應,帶這個請求頭的放行

  // /* 允許跨域的請求頭 */                                        // 這裡 指定 自己起一個   
  response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Control-Ajax-Headers");
  response.setHeader("Access-Control-Ajax-Headers", "cros");// 自定義的

8 前端請求頭,和後端對應

{'Access-Control-Ajax-Headers': 'cors'}

相關文章