CORS XMLHttpRequest 不允许我设置标头
Posted
技术标签:
【中文标题】CORS XMLHttpRequest 不允许我设置标头【英文标题】:CORS XMLHttpRequest doesn't allow me to set headers 【发布时间】:2015-09-01 07:00:05 【问题描述】:所以我正在做一个跨源请求(通过 AngularJS、AJAX 和 XMLHttpRequest 尝试过),它们都不允许我设置标头。我可以发送请求 POST、GET... 有和没有数据,只要我添加标题,它就可以正常工作:
xhr.setRequestHeader("user","someUser");
或 AJAX
headers: "user":"someUser"
我得到错误:
405 (Method Not Allowed)
XMLHttpRequest cannot load http://testsite.com Invalid HTTP status code 405
从事物的后端我允许所有来源:
header("Access-Control-Allow-Origin: *");
不知道问题出在哪里...
【问题讨论】:
IIS? ***.com/questions/12458444/… 响应代码 405(不允许的方法)应该意味着您正在尝试一种方法(GET、PUT、PATCH、POST、DELETE、OPTIONS、TRACE)服务器不接受。既然您说它在没有正文内容的情况下工作,在我看来,您的后端可能正在发送不正确的响应代码。无论哪种方式,通过检查 POST/etc 请求确认您通过开发工具发送格式正确的数据,然后对后端进行故障排除;查找跟踪日志(如果有)。 @mplungjan 我在 LAMP 环境中,顺便使用 Zend Framework 2 当您添加自定义标头时,它不再是简单的 CORS 请求。它首先发出一个 OPTIONS 请求。如果您的服务器上未启用该功能,则会失败。请参阅MDN HTTP access control CORS中的“预检请求” 它似乎在抱怨OPTIONS
预检,因此您需要确保它接受OPTIONS
并正确返回。 OPTIONS
请求应返回没有正文的响应,具有响应代码 204
,并至少包含 Access-Control-Allow-Methods
和 Access-Control-Allow-Origin
(和 Access-Control-Allow-Credentials
,如果适用)的标头。我建议阅读CORS on MDN 或查看html5 Rocks tutorial。
【参考方案1】:
var myApp = angular.module('myApp', [
'myAppApiService']);
myApp.config(['$httpProvider', function($httpProvider)
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
]);
尝试添加此配置....
【讨论】:
以上是关于CORS XMLHttpRequest 不允许我设置标头的主要内容,如果未能解决你的问题,请参考以下文章
“访问 XMLHttpRequest 已被 CORS 策略阻止”即使我已允许所有源/标头/方法