我在 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/