Access-Control-Allow-Headers 不允许 Ajax 请求 header 字段 Key

标签 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.

请求头:
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

通常,此错误是由于“Access-Control-All-Headers”中没有适当的 header 引起的。但是,我正在发送正确的响应以允许 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); }
});

可能很明显,但这仅发生在跨域请求中,并且仅当我包含自定义 header 时(因此处理 ajax 来执行 OPTIONS)。

最佳答案

您的服务器使用以下自定义 header 响应预检请求:

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

现在客户端客户端可以继续使用 Key自定义标题。

话虽如此,Bearer非常特定于 OAuth 2,它在整个 Authorization 中发送标题。使用 Key似乎是对 RFC 和其他东西的严重违反,并且有点像轮子改造。

关于Access-Control-Allow-Headers 不允许 Ajax 请求 header 字段 Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26243364/

相关文章:

c# - ASP.NET c# 中的 AJAX 错误

javascript:取消各种请求

javascript - 如何从跨域 Ajax 请求访问 Content-Length header ?

ajax - 对 OPTIONS 的 POST 更改 + 对预检请求的响应未通过访问控制检查 : No 'Access-Control-Allow-Origin' header

javascript - 在 JavaScript 中捕获 Access-Control-Allow-Origin 错误

visual-studio-2013 - visual studio 2013 中的 Dotnetnuke 8 模块开发错误

javascript - 异步编程的新手。如何让不同对象按正确顺序发生事情?

javascript - 将 (AJAX) 数据发布到另一个页面

c# - 使用自定义注册表单时 DNN 损坏的用户名

asp.net - 垃圾邮件用户请求配置文件页面创建填充事件日志的错误