我有一个简单的PHP脚本,我正在尝试跨域CORS请求:
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
...
然而,我仍然得到了错误:
Access-Control-Allow-Headers不允许请求报头字段X-Requested-With
我还缺什么吗?
我有一个简单的PHP脚本,我正在尝试跨域CORS请求:
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: *");
...
然而,我仍然得到了错误:
Access-Control-Allow-Headers不允许请求报头字段X-Requested-With
我还缺什么吗?
当前回答
许多互联网范围内的描述没有提到指定Access-Control-Allow-Origin是不够的。下面是一个适合我的完整例子:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, DELETE, PUT, PATCH, OPTIONS');
header('Access-Control-Allow-Headers: token, Content-Type');
header('Access-Control-Max-Age: 1728000');
header('Content-Length: 0');
header('Content-Type: text/plain');
die();
}
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
$ret = [
'result' => 'OK',
];
print json_encode($ret);
其他回答
我只是设法让dropzone和其他插件与此修复工作(angularjs + php后端)
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token , Authorization');
将此添加到您的upload.php或发送请求的地方(例如,如果您有upload.html,您需要将文件附加到upload.php,然后复制并粘贴这4行)。 此外,如果你在chrome/mozilla中使用CORS插件/插件,请确保切换它们不止一次,以便启用CORS
我得到了同样的错误,并在我的后端脚本用下面的PHP修复了它:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Access-Control-Allow-Headers: X-Requested-With");
如果我们不能正确理解CORS的功能,它会成为一个令人头痛的问题。我在PHP中使用它们,它们工作起来没有问题。参考这里
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Max-Age: 1000");
header("Access-Control-Allow-Headers: X-Requested-With, Content-Type, Origin, Cache-Control, Pragma, Authorization, Accept, Accept-Encoding");
header("Access-Control-Allow-Methods: PUT, POST, GET, OPTIONS, DELETE");
当我使用angular 4作为客户端,使用PHP作为服务器端时,这些代码就可以完成了。
header("Access-Control-Allow-Origin: *");
Access-Control-Allow-Headers不允许*作为可接受的值,请参阅Mozilla文档。
您应该发送已接受的报头,而不是星号(如错误所示,第一个X-Requested-With)。
更新:
*现在接受的是Access-Control-Allow-Headers。
根据MDN Web Docs 2021:
值*仅作为没有凭据的请求(没有HTTP cookie或HTTP身份验证信息的请求)的特殊通配符值。在带有凭据的请求中,它被视为没有特殊语义的字面头名称*。注意,Authorization标头不能是通配符,总是需要显式地列出。