这是我到目前为止发现的:
>可以使用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>
解决方法
使用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,让浏览器知道允许将请求发送到服务器.如果没有此服务器标头,浏览器将只发送一些带有请求的公共标头,而忽略其余标头.
原文地址:https://www.jb51.cc/js/158445.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。