javascript - 跨域json请求可以设置header吗?

标签 javascript json http-headers cross-domain oauth-2.0

我在 Internet 上做了一些研究,但我没有设法了解这个主题的全貌。谁能帮助解决这个问题,直到永远?

这是我目前发现的:

  • 可以使用jsonp 进行跨域调用。永远不允许在 jsonp 调用中更改 header
  • 如果服务器允许,可以使用json进行跨域调用。

这就是我想要做的:

$.ajax({
    type: "GET",
    crossDomain: true,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Bearer " + ($("#accesstoken").val()));
    },
    contentType: "application/json; charset=utf-8",
    url: myJSonServer + encodeURI(operation),
    dataType: 'json',
    cache: false,
    success: callback,
    error: function (jqXhr, textStatus, errorThrown) { alert(textStatus + ": " + errorThrown); }
});

这是正在发生的事情:

  • 当myJSonServer在同一个域时,完全没有问题
  • 当 myJSonServer 在另一个域上时,请求被发送,但没有 Bearer header

此 Bearer header 是 oAuth2 标准的一部分。

我知道这可能不是最好的解决方案,在浏览器中设置 accessToken。我知道我可以在这种情况下使用代理。

我很好奇是否可以或是否可以在跨域 json 请求上设置 header ?
谢谢

-- 问题已解决

我使用的是 MVC4 并在 web.config 中添加了 crossDomainScriptAccessEnabled="true"。我认为这就足够了,但是 apsillers 的回答解决了我的问题。我现在已将其添加到我的 web.config 中:

 <system.webServer>
     <httpProtocol>
         <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Authorization" />
         </customHeaders>
      </httpProtocol>
   </system.webServer>

最佳答案

使用 JSONP,无法设置自定义 header 。

对于 CORS,服务器必须发送 Access-Control-Allow-Headers header 以允许来自客户端的不常见请求 header 。来自HTML5 Rocks CORS page :

Access-Control-Allow-Headers ... - Comma-delimited list of the supported request headers.

因此,您的服务器必须发送一个 Access-Control-Allow-Headers: Authorization 来让浏览器知道可以通过请求向服务器发送 Authorization .如果没有此服务器 header ,浏览器将仅随请求发送一些常见 header ,而忽略其余部分。

关于javascript - 跨域json请求可以设置header吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14153569/

相关文章:

url - Google OAuth 2.0 redirect_uri_mismatch错误

http-headers - 如何在使用 jsonp 代理时发送 header ?

ios - 使用 HTTP header 参数发布请求

javascript - 在Javascript中从数组中删除空元素

javascript - 两个日期之间的差异,以分钟为单位,小时javascript

javascript - 类名在 IE 7、8 和 chrome 中未更改

javascript - 如果无法访问原始代码,是否有 html 或 js 代码为 GoDaddy 模板发送按钮提供视觉焦点

json - 当对象具有相同的值时,如何在我的 tableView 中显示 JSON 数据?

java - GSON解析未指定类型变量

javascript - 如何将jquery组合框设置为选中true