如何绕过 307 重定向的 CORS 错误
How to get around CORS error on a 307 redirect
我在 .htaccess
中使用 307 重定向 mod_rewrite
规则将所有 /api/...
请求重定向到 apiHandler.php
,但我在使用 CORS 时遇到问题.
我的.htaccess
RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]
我的apiHandler.php
<?php
header("Access-Control-Allow-Origin: http://localhost:4200");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type");
header("Content-Type: application/json");
...
?>
每当我在 front-end 中发出 api 请求时,我都会收到 CORS 错误,
"...has been blocked by CORS policy: No 'Access-Control-Allow-Origin` header is present on the request resource."
但我的 apiHandler.php
中专门有那个 header,所以我不知道问题出在哪里。
经过一些研究,我听说重定向 URL 还必须包含一个 Access-Control-Allow-Origin
header,否则浏览器将在那里停止尝试 cross-domain 请求。但我已经尝试过将这些 header 添加到我的 .htaccess
中,但没有成功。
有什么想法吗?
谢谢@sideshowbarker!我的问题的解决方案是从我的 apiHandler.php
中删除 headers 并将它们添加到我的 .htaccess
.
Header always set Access-Control-Allow-Origin "http://localhost:4200"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "Content-Type"
Header always set Content-Type "application/json"
RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]
请注意使用 Header always set ...
而不是 Header set ...
。这个post解释了两者的区别
我在 .htaccess
中使用 307 重定向 mod_rewrite
规则将所有 /api/...
请求重定向到 apiHandler.php
,但我在使用 CORS 时遇到问题.
我的.htaccess
RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]
我的apiHandler.php
<?php
header("Access-Control-Allow-Origin: http://localhost:4200");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type");
header("Content-Type: application/json");
...
?>
每当我在 front-end 中发出 api 请求时,我都会收到 CORS 错误,
"...has been blocked by CORS policy: No 'Access-Control-Allow-Origin` header is present on the request resource."
但我的 apiHandler.php
中专门有那个 header,所以我不知道问题出在哪里。
经过一些研究,我听说重定向 URL 还必须包含一个 Access-Control-Allow-Origin
header,否则浏览器将在那里停止尝试 cross-domain 请求。但我已经尝试过将这些 header 添加到我的 .htaccess
中,但没有成功。
有什么想法吗?
谢谢@sideshowbarker!我的问题的解决方案是从我的 apiHandler.php
中删除 headers 并将它们添加到我的 .htaccess
.
Header always set Access-Control-Allow-Origin "http://localhost:4200"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Headers "Content-Type"
Header always set Content-Type "application/json"
RewriteEngine On
RewriteRule ^api/(.*)$ /apiHandler.php [NC,R=307]
请注意使用 Header always set ...
而不是 Header set ...
。这个post解释了两者的区别