我正在努力实现 CORS,以便我的 Ember 应用程序可以与另一台服务器上的 API 通信。我需要发送两个请求:通过 POST 的身份验证请求,然后向 API 端点之一发送 GET 请求。
这两个请求都启动了预检请求。身份验证预检请求运行良好。然后,当我向 API 运行请求时,预检请求会挂起。Chrome 将状态和类型显示为“待处理”,并且请求永远不会完成。
这是验证码。我在这里使用 jQuery 1.10.2。
$.ajax({
type: 'POST',
url: 'https://blahblahblah.edu/AstraDev/Logon.ashx',
data: "{username: '', password: ''}",
contentType: 'text/json',
xhrFields: {
withCredentials: false
},
headers: {
},
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
API GET 请求的代码非常相似
$.ajax({
type: 'GET',
url: 'https://blahblahblah.edu/AstraDev/~api/query/room',
data: {fields: "Id"},
contentType: 'application/json; charset=utf-8',
xhrFields: {
withCredentials: true
},
headers: {
},
success: function(response) {
console.log(response)
},
error: function(response) {
console.log(response)
}
});
如果我将 GET 的内容类型更改为不预检的内容(如“text/plain”),请求将失败。但是,如果我做任何预检,预检就会挂起。
这是相关的服务器配置。我正在使用 IIS 7.5。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:8888" />
<add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
CORS对我来说很新。所以也许我错过了一些明显的东西。有任何想法吗?谢谢。