3

我正在做我的一个 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
4

0 回答 0