PHP 中启用 FPM 后发生 CORS 冲突

PHP 中启用 FPM 后发生 CORS 冲突

在我的 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 上的以下相关问题:

相关内容