我想configuration我的Apache 2.4以CORS友好的方式提供一些静态资源。 我已经有了以下设置:
Header always set Access-Control-Allow-Origin "*"
但是,对于最近的Safari来说,这似乎还不够:
[错误]无法加载资源:请求标头字段…不被
Access-Control-Allow-Headers。
以这种方式提到的字段包括Accept-Encoding和DNT ,但是我猜想在添加它们之后,我可能也会看到Cache-Control , Origin和Accept-Language ,因为这些是在发送的Access-Control-Request-Headers报头中提到的由Safari。 但是谁来告诉我Safari或其他浏览器可能会为其他头文件请求现在还是将来,对于我自己或者其他具有不同configuration的用户? 显然*不是一个有效的Access-Control-Allow-Headers头的设置,原因我不太明白。
那么,如何configuration一个服务器,只是说“在任何地方使用这个资源,我不关心他们的CORS”?
*现在是Access-Control-Allow-Headers一个有效值 ,至less对于非证书请求是有效的; 但是由于这是对规范的一个相当新的补充 ,它可能还没有到达浏览器。
我发现的一个解决scheme是,不是明确添加标题,而是将所有请求的标题回显给浏览器。 这种方法是在堆栈溢出这里build议的,但是这个post并没有提供一个静态configuration来做到这一点。
在阅读了关于Header和expression式的文档之后,我使用下面这行代码实现了这个function:
Header always set Access-Control-Allow-Headers "expr=%{req:Access-Control-Request-Headers}"
我不确定这可能会带来什么样的安全隐患,所以请照常使用,风险自负。