【问题标题】:GET and POST appear to be allowed regardless specification in the builder's WithMethods(..)无论构建器的 WithMethods(..) 中的规范如何,似乎都允许 GET 和 POST
【发布时间】:2020-04-13 18:30:50
【问题描述】:

在我的 StartUp.cs 中,我有以下 CORS 设置。

services.AddCors(_ => _.AddPolicy("LocalDev", __ => __
  .AllowAnyOrigin()
  .AllowAnyHeader()
  .WithMethods("GET", "POST", "PUT", "DELETE")
));

它按预期工作。但是,我注意到删除 GETPOST 似乎不会影响功能。但是,删除 PUTDELETE 会产生效果。我对此感到困惑。

是不是获取方式和发布方式具有特殊地位,而其他方式需要明确提供?我在MSDN for the method 中没有找到任何相关参考。

【问题讨论】:

    标签: c# .net-core cors asp.net-core-3.0 .net-core-3.0


    【解决方案1】:

    .WithMethods 仅在 GET/POST 请求触发 CORS 预检 OPTIONS 请求时才影响它们 - 基本上,任何包含自定义请求标头的 GETPOST。如果 GETPOST 包含任何自定义请求标头,则它不会触发 CORS 预检 OPTIONS 请求,因此无论 @ 是什么都将被允许987654331@设置是。

    在 CORS 协议术语中,.WithMethods 设置 Access-Control-Request-Headers 标头值,浏览器仅在响应 CORS 预检 OPTIONS 请求时参考该值。

    对于触发 CORS 预检的请求,需要条件的交集;即,请求必须具有正确的来源和正确的方法。但是对于触发 CORS 预检 OPTIONS 请求的请求,根据定义,没有“正确”的方法——因为在这种情况下,任何 Access-Control-Allow-Method 标头都是不相关的并被忽略。或者更确切地说,从概念上讲,更清楚地说,有一个“正确”方法的硬编码列表:CORS-safelisted methodsGETHEADPOST 的集合 — 在 Fetch 规范中定义.

    【讨论】:

      【解决方案2】:

      我会测试几个对 API 的请求并检查 Access-Control-Allow-Methods 标头。这是允许/限制任何 HTTP 方法访问您的 API 的实际逻辑。

      如果标头确实包含 GET,即使您没有在允许的 HTTP 动词列表中指定它,我们正在查看 .NET Core 错误,我认为您应该将其记录在https://github.com/dotnet/core/issues

      【讨论】:

      • 考虑到 GETPOST 方法的基础性,我非常怀疑我发现了一个错误,呵呵。您能否在系统上重现该行为?
      • 详细说明我的发现。当我执行 DELETE 时,我会在网络选项卡中看到预检的 OPTIONS 和三个 allow 标头,其中一个用于方法状态的标头 PUTDELETE 应该是(没有 GET)。但是当我运行 GET 请求时,我仍然可以获取数据,但响应标头中没有关于允许的方法的任何内容。这让我很困惑......
      • 这看起来很奇怪.. 您发送 GET 请求的方式是否与发送 PUTDELETE 的方式相同i> 一个?
      • 同样的方式——来自 Swagger。当然,它们之所以不同,是因为方法不同。但除此之外,没有。我从同一个位置等执行它们。
      【解决方案3】:

      .WithMethods 仅在触发 CORS 预检 OPTIONS 请求时影响 GET/POST 请求——基本上,任何包含自定义请求标头的 GET 或 POST。

      • 这是不正确的,即使使用自定义标头,POST+Preflight 请求也可以使用 .WithMethods("GET")

      【讨论】:

        猜你喜欢
        • 2020-09-20
        • 2015-01-17
        • 2015-10-30
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多