无论构建器的 WithMethods(..) 中的规范如何,似乎都允许 GET 和 POST
GET and POST appear to be allowed regardless specification in the builder's WithMethods(..)
在我的 StartUp.cs 中,我对 CORS 进行了以下设置。
services.AddCors(_ => _.AddPolicy("LocalDev", __ => __
.AllowAnyOrigin()
.AllowAnyHeader()
.WithMethods("GET", "POST", "PUT", "DELETE")
));
它按预期工作。但是,我注意到删除 GET 和 POST 似乎不会影响功能。不过,删除 PUT 或 DELETE 是有效的。我对此感到困惑。
是不是get方法和post方法享有特殊地位,而其他方法必须明确提供?我没有在 MSDN for the method.
中找到任何相关参考
我会测试对 API 的几个请求并检查 Access-Control-Allow-Methods header。这就是 allows/restricts 任何 HTTP 方法到达您的 API 的实际逻辑。
如果 header 确实包含 GET,即使您没有在允许的 HTTP 动词列表中指定它,我们正在寻找一个 .NET Core错误,我认为你应该在 https://github.com/dotnet/core/issues
记录它
.WithMethods
仅在触发 CORS 预检 OPTIONS
请求时影响 GET
/POST
请求——基本上,任何 GET
或 POST
,其中包括自定义请求 headers。如果 GET
或 POST
不 包含任何自定义请求 header,则它不会触发 CORS 预检 OPTIONS
请求,因此无论 .WithMethods
设置是什么,它都将被允许。
在 CORS 协议术语中,.WithMethods
设置 Access-Control-Request-Headers
header 值,浏览器仅参考该值以响应 CORS 预检 OPTIONS
请求。
对于触发 CORS 预检的请求,需要条件的交集;即,请求必须具有正确的来源和正确的方法。但是对于 不 触发 CORS 预检选项请求的请求,根据定义没有“正确”的方法——因为在那种情况下,任何 Access-Control-Allow-Method
header无关紧要并被忽略。或者更确切地说,从概念上讲,更清楚的是说有 hard-coded 个“正确”方法列表:CORS-safelisted methods 的集合 — GET
、HEAD
或 POST
— 在 Fetch 规范中定义。
.WithMethods affects GET/POST requests only when they trigger a CORS preflight OPTIONS request — basically, any GET or POST that includes custom request headers.
- 这是不正确的,即使使用自定义 header,POST+Preflight 请求也可以使用 .WithMethods("GET")
在我的 StartUp.cs 中,我对 CORS 进行了以下设置。
services.AddCors(_ => _.AddPolicy("LocalDev", __ => __
.AllowAnyOrigin()
.AllowAnyHeader()
.WithMethods("GET", "POST", "PUT", "DELETE")
));
它按预期工作。但是,我注意到删除 GET 和 POST 似乎不会影响功能。不过,删除 PUT 或 DELETE 是有效的。我对此感到困惑。
是不是get方法和post方法享有特殊地位,而其他方法必须明确提供?我没有在 MSDN for the method.
中找到任何相关参考我会测试对 API 的几个请求并检查 Access-Control-Allow-Methods header。这就是 allows/restricts 任何 HTTP 方法到达您的 API 的实际逻辑。
如果 header 确实包含 GET,即使您没有在允许的 HTTP 动词列表中指定它,我们正在寻找一个 .NET Core错误,我认为你应该在 https://github.com/dotnet/core/issues
记录它.WithMethods
仅在触发 CORS 预检 OPTIONS
请求时影响 GET
/POST
请求——基本上,任何 GET
或 POST
,其中包括自定义请求 headers。如果 GET
或 POST
不 包含任何自定义请求 header,则它不会触发 CORS 预检 OPTIONS
请求,因此无论 .WithMethods
设置是什么,它都将被允许。
在 CORS 协议术语中,.WithMethods
设置 Access-Control-Request-Headers
header 值,浏览器仅参考该值以响应 CORS 预检 OPTIONS
请求。
对于触发 CORS 预检的请求,需要条件的交集;即,请求必须具有正确的来源和正确的方法。但是对于 不 触发 CORS 预检选项请求的请求,根据定义没有“正确”的方法——因为在那种情况下,任何 Access-Control-Allow-Method
header无关紧要并被忽略。或者更确切地说,从概念上讲,更清楚的是说有 hard-coded 个“正确”方法列表:CORS-safelisted methods 的集合 — GET
、HEAD
或 POST
— 在 Fetch 规范中定义。
.WithMethods affects GET/POST requests only when they trigger a CORS preflight OPTIONS request — basically, any GET or POST that includes custom request headers.
- 这是不正确的,即使使用自定义 header,POST+Preflight 请求也可以使用 .WithMethods("GET")