发出 HTTP 请求的访问控制标头问题

access-control-header issues making an http request

本文关键字:问题 访问控制 HTTP 请求 发出      更新时间:2023-09-26

我在 Win 2008 R2 Ent 服务器上的 IIS 中安装了一个 asp.net mvc5(带有 Angular)网站,在服务器本身上运行站点时一切运行良好。

一旦我们从服务器外部访问该站点,我就会收到与 CORS 相关的错误:

     Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost/api/init?space=razor_RAGE&environment=razor_RAGE&clariteConfig=E:'razor_RAGE'master'bin'clarite_config.xml. This can be fixed by moving the resource to the same domain or enabling CORS.

我认为解决方案是在http请求中添加正确的标头:

    'Access-Control-Allow-Origin': 'true'

但是它似乎并没有解决CORS问题。

这是我从 JavaScript 发出的请求的示例(在服务器上都很好,但在服务器之外不起作用):

     this.getRazorInitParams = function () {
        var deferred = $q.defer();
        deferred.notify("Getting init parameters...");
        var razorEnvParams = [];
        $http({
            method: 'GET',
            encoding: 'JSON',
            headers: {
                'Access-Control-Allow-Origin': 'true'
            },
            url: 'breeze/Rage/GetRazorEnv'
        }).success(function (data, status, headers, config) {
            razorEnvParams = data;
            deferred.resolve(razorEnvParams);  
        }).error(function (data, status, headers, config) {
            console.log("Error in userContext.js, getRazorInitParams " + status);
        });
        return deferred.promise;
    }

这是来自 c# api 层的狙击:

public class initController : ApiController
{        
    public HttpResponseMessage Get()
    {
        // space, env, dom, cConf vars all defined here..
        string resp = DynAggrClientAPI.initApp( space, env, dom, cConf );
        var response = Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(resp, Encoding.UTF8, "application/json");
        return response;
    }
}

我正在寻找正确的解决方案。我在这里缺少什么吗?

提前感谢,

鲍勃

标头

的值应为特定域或星号,以指示 CORS 请求可以来自任何域。

Access-Control-Allow-Origin: 'http://example.org'

Access-Control-Allow-Origin: '*'

另请注意,您不能将多个域"列入白名单"。要么是一个,要么全部。

如果你打算使用所谓的"复杂"请求(即简单的GET或POST请求以外的其他请求),你还需要设置Access-Control-Allow-Methods字段,如果你想检索特定的标头,Access-Control-Allow-Headers也是如此(尽管在这种情况下,它们不是必需的)。