Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问控制允许标头不允许使用Ajax请求标头字段键_Ajax_Cors_Dotnetnuke - Fatal编程技术网

访问控制允许标头不允许使用Ajax请求标头字段键

访问控制允许标头不允许使用Ajax请求标头字段键,ajax,cors,dotnetnuke,Ajax,Cors,Dotnetnuke,试图构建DNN服务框架WebAPI,但我在使用CORS时遇到了问题。我有所有合适的标题(我想),但它似乎仍然不起作用 错误: XMLHttpRequest cannot load http://www.dnndev.me/mysite/builder/API/echo?message=Hello+World&_=1412707749275. Request header field Key is not allowed by Access-Control-Allow-Headers.

试图构建DNN服务框架WebAPI,但我在使用CORS时遇到了问题。我有所有合适的标题(我想),但它似乎仍然不起作用

错误:

XMLHttpRequest cannot load http://www.dnndev.me/mysite/builder/API/echo?message=Hello+World&_=1412707749275. Request header field Key is not allowed by Access-Control-Allow-Headers.
请求标头:

Remote Address: 127.0.0.1:80
URL: http://www.dnndev.me/mysite/builder/API/echo?message=Hello
Request Method: OPTIONS
Status Code: 200 OK
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Access-Control-Request-Headers: accept, key
Access-Control-Request-Method: GET
Connection: keep-alive
Host: www.dnndev.me
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
响应标题:

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Cache-Control: no-cache
Content-Length: 13
Content-Type: application/json; charset=utf-8
Date: Tue, 07 Oct 2014 18:49:10 GMT
Expires: -1
Pragma: no-cache
Server: Microsoft-IIS/7.5
通常,此错误是由于“访问控制所有标头”中没有相应的标头而导致的。但是,我正在发送正确的响应,以允许ajax继续其请求。它只是拒绝

下面是我对该方法的ajax调用:

$.ajax({
    type: 'GET',
    url: 'http://www.dnndev.me/mysite/builder/API/echo',
    dataType: 'json',
    data: { message: 'Hello' },
    crossDomain: true,
    headers: { 'Key': 'Bearer 7680ff6e-1362-4236-a9cd-c6bc8b6f13ea' },
    success: function (result) { console.log(result); }
});

可能很明显,但这只发生在跨域请求上,并且仅当我包含自定义标头(因此处理ajax以执行选项)时才会发生。

您的服务器使用以下自定义标头响应飞行前请求:

Access-Control-All-Headers: Origin, X-Requested-With, Content-Type, Accept, Key
然而,如果您(或编写此服务器的人员)仔细阅读了CORS,他应该回答:

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key
现在,客户端可以继续使用
自定义头


这就是说,
承载
非常特定于整个
授权
头部发送的OAuth 2。使用
似乎是对RFC和其他东西的严重违反,是一种车轮改造。

请注意Nyx的问题和Darin的答案中的打字错误(“ow”缺失)。所以是

Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key

如果作为对浏览器选项请求的答复发送,它将解决错误消息“请求标头字段某些标头字段在飞行前模式下不被Access Control Allow Headers所允许”。

将此消息添加到服务器响应标头:


标题('Access-Control-Allow-Headers:Origin,Content-Type,X-Auth-Token,Authorization')

在我使用OAuth2的地方,使用Bearer是一个古老的想法。我只是还没有改变标题。