我正在做我的一个 cors 请求
客户:http://mypcname.companyname
到服务栈
服务器:http://mypcname.companyname:83/customersInformation
这就是使用 javascript superagent 库的请求:
superagent.get(requestUrl)
.set('Authorization', "basictoken " + getToken())
.set('Accept', 'application/json')
.end(function (response) {
});
此获取请求与Web API完全兼容!所以在我看来问题不可能是客户端。
这就是我的服务堆栈设置:
Plugins.Add(new CorsFeature(allowedOrigins: Settings.Default.SmartAllowedCorsOrigin, allowCredentials: true, allowedHeaders: "Content-Type, Authorization"));
RequestFilters.Add((httpReq, httpRes, requestDto) =>
{
if (httpReq.HttpMethod == "OPTIONS")
{
httpRes.End();
}
});
这就是我使用 customersInformation 数据设置课程的方式:
[Route(RouteTemplate,"GET, OPTIONS",...)]
由于我使用上面的选项请求过滤器,选项 404 错误消失了,但现在我遇到了更糟糕的情况......:
OPTIONS http://mypcname.companyname:83/customersInformation Origin http://mypcname.companyname is not allowed by Access-Control-Allow-Origin.
我必须在服务器端做什么才能使 cors 最终正常工作?
更新
作为获得响应头数据的神话问题的答案:
这是我使用 cors 插件上的默认值从服务器获得的原始数据:(提琴手原始选项卡)
HTTP/1.1 200 OK
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 29 Oct 2013 10:04:48 GMT
Content-Length: 0
谷歌浏览器中的错误:
OPTIONS http://mypcname.companyname:83/customersInformation Origin http://mypcname.companyname is not allowed by Access-Control-Allow-Origin.
应该在选项之后调用的 Get 方法(至少这是我的期望)可能由于 cors origion 错误而永远不会被命中,因为甚至之前发生的 OPTIONS 都不允许。
更新 2
对服务器的请求:
OPTIONS http://mypcname.companyname:83/customersInformation HTTP/1.1
Host: mypcname.companyname:83
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: GET
Origin: http://mypcname.companyname
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Access-Control-Request-Headers: accept, authorization, x-requested-with
Accept: */*
Referer: http://mypcname.companyname/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4