CORS标头未设置

问题描述 投票:5回答:1

我正在尝试从另一个域下载静态文件。在我的.htaccess文件中,该文件位于根目录中:

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Accept, If-Modified-Since, Origin"
Header set Access-Control-Allow-Methods "GET, OPTIONS"

这是浏览器两次下载资源的请求-响应周期:

GET /file HTTP/1.1
Host: www.example.com
Accept: application/json
Origin: http://www.mydomain.com

HTTP/1.1 200 OK
Date: Sat, 07 Sep 2013 21:01:35 GMT
Server: Apache
Last-Modified: Sat, 07 Sep 2013 20:14:45 GMT
Content-Length: 2
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, If-Modified-Since, Origin
Access-Control-Allow-Methods: GET, OPTIONS
Content-Type: application/json

[]

GET /file HTTP/1.1
Host: www.example.com
Cache-Control: max-age=0
Accept: application/json
Origin: http://www.mydomain.com
If-Modified-Since: Sat, 07 Sep 2013 20:14:45 GMT

HTTP/1.1 304 Not Modified
Date: Sat, 07 Sep 2013 21:01:40 GMT
Server: Apache

第二次,您看到由于文件没有被修改,服务器以304 Not Modified响应。为什么没有为第二个响应设置CORS标头?

apache .htaccess http cors browser-cache
1个回答
2
投票

这是一个Apache错误,请参见下文

https://issues.apache.org/bugzilla/show_bug.cgi?id=51223

如果您感到勇敢,则可以使用该补丁重新编译Apache...。


0
投票

当您返回标头状态304时,apache将删除所有其他标头。

我有一个技巧来解决这个问题。1.您需要将所有标头放在304标头之前2.在发送304之前冲洗这些标头

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Accept, If-Modified-Since, Origin"
Header set Access-Control-Allow-Methods "GET, OPTIONS"
flush();
header('HTTP/1.1 304 No Modified');

Apache在找到304之前不会删除任何标头。

我们在发送304之前通过flush()强制发送其他标头。那个阿帕奇不会伤害我。

© www.soinside.com 2019 - 2024. All rights reserved.