推荐的 CORS 允许和公开标头

rav*_*shi 3 nginx http-headers cors

enable-cors.org nginx 配置建议使用以下值Access-Control-Allow-HeadersAccess-Control-Expose-Headers。但除了 之外,没有太多解释为什么推荐这些Custom headers and headers various browsers *should* be OK with but aren't。如果我的应用程序不需要其中一些 API 请求,我宁愿不增加每个 API 请求的有效负载。

我知道我可以删除它们并等待某些东西损坏,但我希望了解一些关于为什么/如何选择它们的背景,以便我可以就它们是否对我的应用程序是必要的做出更明智的决定。即他们是否建议支持我的应用程序不需要支持的浏览器?

访问控制允许标头DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range

访问控制公开标头DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range

对于Allow-Headers大多数人来说,我可以理解为什么客户想要发送它们。 X-CustomHeader但作为一个奇怪的人脱颖而出。另外,我在 Chrome 上测试过,即使User-Agent明确允许,chrome 仍然会发送它。这意味着添加这些选项是为了实现我的应用程序可能不需要的浏览器兼容性。

对于 来说Expose-Headers,客户端需要读取哪些标头似乎是非常特定于应用程序的。为什么客户需要阅读 User-Agent、、DNTX-Requested-With?它们包含供服务器而不是客户端使用的信息。此外,Cache-ControlContent-Range已经默认启用,因此它们在这里看起来是多余的。

rav*_*shi 5

我最终检查了每个标题并确定是否有必要。我整理了一份变更清单:

  • Allow和的变化Expose
    • 由于它们是非标准标头,因此从两者中删除
      • X-CustomHeader
    • 由于它们是非标准且半弃用的,因此已从两者中删除
  • 更改为Allow
    • 已删除,因为它们是响应特定的标头(仅用于服务器通知客户端)
      • Content-Range
    • 即使默认情况下启用它们,但仅针对某些类型的请求保留(根据 MDN):
      • Content-Type
  • 更改为Expose
    • 已删除,因为它们已默认启用(根据 MDN
      • Cache-Control
      • Content-Type
    • 已删除,因为它们是请求特定的标头(仅用于客户端通知服务器)
      • DNT
      • User-Agent
      • X-Requested-With
      • If-Modified-Since
      • Range
    • 添加是因为它们看起来很有用
      • Content-Length

这给我留下了以下内容:

访问控制允许标头DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range

访问控制公开标头Content-Length,Content-Range

任何评论或更正将不胜感激。