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-MethodsAccess-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 策略阻止”即使我已允许所有源/标头/方法

尽管设置了标头,但不允许 CORS 请求

没有“访问控制允许来源”-CORS

从源访问 XMLHttpRequest 已被 CORS 策略阻止

$.support.cors 澄清?

即使服务器已实现 cors,默认情况下 Chrome 是不是也不允许使用 cors?