在我的 Web 服务器上的 .htaccess 文件中,我设置了以下 CORS 标头:
Header set Access-Control-Allow-Origin "example.com"
在我的一个 PHP 脚本中(我在本地主机工作时经常调用该脚本),我设置了以下标头:
header("Access-Control-Allow-Origin: *");
直到昨天我为 PHP 打开 FPM 时,这个方法一直有效。现在我收到以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.example.com/script.php. (Reason: CORS header 'Access-Control-Allow-Origin' does not match '*, example.com').
.htaccess
我只在从本地主机调用时才会收到该错误,从网站调用时不会。我想知道现在启用了 FPM 后是否有办法通过 PHP 覆盖CORS 标头。
答案1
原因:CORS 标头“Access-Control-Allow-Origin”与“*,example.com”不匹配
好奇,这就像Header merge
被调用一样,而不是Header set
?像这样的“合并”值不受Allow-Control-Allow-Origin
标题的官方支持,因此浏览器支持可能会有所不同,并将解释为什么它不适合您。
.htaccess
既然 FPM 已启用,那么是否有办法通过 PHP 覆盖CORS 标头。
我认为您需要尝试让 Apache 不覆盖 PHP 设置的标头(该标头已在之前设置),而不是让 PHP 覆盖 Apache。尝试以下操作setifempty
:
Header setifempty Access-Control-Allow-Origin "example.com"
您还可以尝试以下always
条件,即Header always set ....
- 这是与默认 onsuccess
并且应该意味着标题实际上被设置了两次。
不过,我也不认为多个Access-Control-Allow-Origin
标题严格来说是标准的一部分,所以浏览器的行为可能会有所不同。
另请参阅 StackOverflow 上的以下相关问题: