javascript – 我可以在跨域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”.我认为这就足够了,但是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,无法设置自定义标头.

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

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

因此,您的服务器必须发送一个Access-Control-Allow-Headers:Authorization,让浏览器知道允许将请求发送到服务器.如果没有此服务器标头,浏览器将只发送一些带有请求的公共标头,而忽略其余标头.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...