【问题标题】:Why am I getting an OPTIONS request when I enabled CORS in Web API?为什么在 Web API 中启用 CORS 时收到 OPTIONS 请求?
【发布时间】:2019-07-10 06:14:49
【问题描述】:

我有一个使用 Angular Framework 和 Asp.net Core 的项目。

在我的 ConfigureServices 中,我有以下代码:

services.AddCors(options =>
            {
                options.AddPolicy(
                    "CorsPolicy",
                    builder => builder
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });

然后配置如下:

 app.UseCors("CorsPolicy");
 app.UseMvc();

然后在 BaseApiController

中添加 EnbaleCors 属性
[EnableCors("CorsPolicy")]
public class BaseApiController : Controller

在 Angular 中添加如下:

return this.http
        .post(url, body, { headers: headers, withCredentials: true })
        .map((response: Response) => {
            return response as any;
        })

当我运行应用程序时,我在网络中有 2 个请求,其中一个请求方法:OPTIONS 状态代码:204 No Content 和其他在我的请求中。

我的问题在哪里?

感谢您抽出宝贵时间分享您的想法

【问题讨论】:

    标签: angular asp.net-web-api asp.net-core cors


    【解决方案1】:

    没问题,不用担心。

    出于安全原因,浏览器会限制跨域 HTTP 请求 从脚本中启动。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着网络 使用这些 API 的应用程序只能从 加载应用程序的来源相同,除非响应来自 另一个来源包括正确的 CORS 标头。

    OPTIONS 请求只是对跨源之间安全网络调用的安全检查。因此,当您发出这样的请求时,客户端将向同一地址发送OPTIONS 请求,以确保发送原始请求是安全的(GET/POST)。

    【讨论】:

    • @arcreezy 谢谢,我可以在生产中禁用或隐藏此 OPTIONS 请求吗?
    • @SaeidMirzaei 如果客户端和服务器位于不同的域中,我认为您不能禁止客户端发送 CORS 请求。通过将您的请求的 Content-Type 更改为 application/x-www-form-urlencodedmultipart/form-datatext/plain 可能会有解决方法,但我不鼓励这样做。
    • 我没有任何不同的域,我有两个子域,例如“api.my-doamin.com”和“client.my-doamin.com”。这种情况可以吗?
    • @SaeidMirzaei 我对不同域的意思是您的客户端和服务器,而不是 URL。正如我所说,它不会引起任何问题。
    猜你喜欢
    • 2019-08-03
    • 2015-11-24
    • 2016-10-10
    • 2017-07-01
    • 2017-06-18
    相关资源
    最近更新 更多