我想配置我的 Apache 2.4 以 CORS 友好的方式提供一些静态资源。我已经有以下设置:
Header always set Access-Control-Allow-Origin "*"
然而,对于最近的 Safari 来说,这似乎还不够:
[错误]无法加载资源:请求标头字段...不允许
Access-Control-Allow-Headers
。
以这种方式提到的字段包括Accept-Encoding
和DNT
,但我猜添加它们之后我可能还会看到Cache-Control
、Origin
和Accept-Language
,因为这些是 Safari 发送的标头中提到的Access-Control-Request-Headers
。但谁能告诉我 Safari 或其他浏览器现在或将来可能会为我自己或具有不同配置的其他用户请求哪些其他标头?显然*
不是Access-Control-Allow-Headers
标头的有效设置,原因我不太明白。
那么我该如何配置服务器来让它说“在任何地方使用这些资源,我不关心它们的 CORS”?
答案1
*
现在是有效值Access-Control-Allow-Headers
至少对于非认证请求而言;但由于这是规范中最近新增的内容,它可能尚未到达浏览器。
答案2
我发现的一个解决方案是,你可以将所有请求的标头回送给浏览器,而不是显式地添加标头。这种方法被建议在 Stack Overflow 上,但该帖子并未提供静态配置来执行此操作。
阅读文档后Header
和表达式我使用以下代码成功实现了这一点:
Header always set Access-Control-Allow-Headers "expr=%{req:Access-Control-Request-Headers}"
我不确定这是否会造成安全隐患,所以照常使用时请自行承担风险。