一尘不染

我可以在跨域json请求中设置标头吗?

json

我已经在互联网上进行了一些研究,但没有设法获得有关该主题的完整图片。任何人都可以暂时解决这个问题吗?

这是我到目前为止发现的:

  • 可以使用jsonp进行跨域调用。禁止在jsonp调用中更改标头
  • 如果服务器允许,则可以使用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标头

该Bearer标头是oAuth2标准的一部分。

我知道以下事实:不是在浏览器中设置accessToken的最佳解决方案。我知道我可以针对这种情况使用代理。

我只是好奇是否有可能在跨域json请求上设置标头?
谢谢

- 问题解决了

我正在使用MVC4,并在web.config中添加了crossDomainScriptAccessEnabled =“
true”。我以为就足够了,但是用a药的答案解决了我的问题。我现在在我的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>

阅读 210

收藏
2020-07-27

共1个答案

一尘不染

使用JSONP时,无法设置自定义标头。

使用CORS,服务器必须发送Access-Control-Allow-Headers标头,以允许来自客户端的不常见请求标头。在HTML5 Rocks
CORS页面中

Access-Control-Allow-Headers …-受支持的请求标头的逗号分隔列表。

因此,您的服务器必须发送,Access-Control-Allow-Headers: Authorization以使浏览器知道允许Authorization随请求一起发送到服务器。如果没有此服务器标头,浏览器将仅随请求发送一些通用标头,而忽略其余标头。

2020-07-27