记 Accept-Language: "zh-CN" 引发的思考

先说结论:

"CORS 安全列表请求标头",不仅仅指 请求头的 key,也约束了 key 对应的值域

现象

  • 在开发过程中遇到,当 Accept-Language 被错误改成 "zh-CN" 时,会导致页面请求跨域。
    image.png
    image.png
  • 而当设置成 zh-CN(没有被双引号包裹)时,请求正常发出,没有跨域。
    image.png

疑问

  • 为什么加上双引号包裹会导致跨域?
  • 为什么跨域报的错误是 "accept-language is not allowed by Access-Control-Allow-Headers"。Accept-Language 不是内置请求头吗?非自定义请求头为什么还需要额外设置到 Access-Control-Allow-Headers?
  • 当设置成 zh-CN(没有被双引号包裹)时,Accept-Language 也不在 Access-Control-Allow-Headers 里,为什么可以运行?
    image.png

原因

所以

  • Accept-Language 确实非自定义请求头
  • Access-Control-Allow-Headers 的内容除自定义请求头外,也可能是「CORS 安全列表请求标头」中的 key(用于突破值域限制)
    image.png

momo707577045
2.4k 声望609 粉丝

[链接]