6

也许我完全遗漏了一些东西,但是我有一个在本地运行的服务器,并且没有配置 Angular 以使用 CORS 来处理 $http 请求。当我向 localhost: 发出 HTTP 请求时<port>,我看到 Chrome 首先创建了一个 OPTIONS 请求。

因为我需要支持 IE 8 - AngularJS 肯定不能与 CORS 一起工作 - 我需要删除 CORS。

我尝试过直接设置POST方法而不使用$http.post包装器,但无济于事。也许这与https://github.com/angular/angular.js/issues/1585有关

我还尝试过直接从控制器调用 jQuery ajax 帖子——即使 CORS 选项为 false(因为它似乎默认为 true)。它仍然会创建一个 CORS 请求。

这是什么配置?

4

1 回答 1

21

CORS 是您的请求 url 的结果,而不是您可以设置的任何配置的结果。如果您的来源与请求 url 协议/域/端口不匹配,您将收到一个 CORS 请求——没有例外。

例如,来源为http://www.example.com:8080

这是一个 CORS 请求:http ://example.com:8080/path.json (不同的子域)

这是一个 CORS 请求:http ://www.example.com/path.json (不同的端口)

这是一个 CORS 请求:https ://www.example.com:8080/path.json (不同的协议)

不是CORS 请求:http ://www.example.com:8080/path.json (协议、域和端口都与源匹配)

话虽如此,正在发生 OPTIONS 请求是因为您有一个标准标头之外的标头(很可能,您的请求具有 X-Requested-With 标头)。在 Angular.js 中,您可以使用以下命令删除它:

angular.module('yourModuleHere')
    .config(function ($httpProvider) {
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    });

请注意,对于 Angular.js 1.2 及更高版本,X-Requested-With 不在默认的公共标头列表中。您无需将其从列表中删除。

于 2013-10-24T00:28:15.687 回答