【问题标题】:CORS missing 'Access-Control-Allow-Methods'CORS 缺少“访问控制允许方法”
【发布时间】:2019-12-15 00:52:46
【问题描述】:

我已配置 OpenApi 端点,但某些服务无法连接。

例如,Built.io Flows 可以读取 OpenAPI 规范 (JSON),但在我选择操作时崩溃,并且 Azure 逻辑应用告诉我在导入 OpenApi 规范时存在潜在的 CORS 问题。

其他服务也可以正常工作,例如:

他们正确地获取 OpenApi 文档 (v3.0.1) 并将其标记为有效。

为了调试问题,我暂时允许了所有方法、来源和标头。

这是飞行前请求的示例输出:

curl --request OPTIONS
  --url https://my-endpoint
  --header 'accept: application/json'
  --header 'access-control-request-headers: X-Test'
  --header 'access-control-request-method: GET'
  --header 'origin: https://flow.built.io'
  --head

然后回应:

HTTP/1.1 200 OK
Cache-Control: no-store
Server:
X-Frame-Options: DENY
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Test
Access-Control-Max-Age: 60
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYWFtXFNDSFxzdHlsZWxhYnMubVxzcmNcU3R5bGVsYWJzLk0uUG9ydGFsLldlYi5VSVx2MVxvcGVuYXBpXERlbW9Eb21haW4=?=
X-Content-Type-Options: nosniff
Date: Wed, 07 Aug 2019 11:21:01 GMT
Content-Length: 0

实际请求:

  curl --request GET 
  --url https://my-endpoint
  --header 'accept: application/json'
  --header 'origin: https://flow.built.io'
  --head

然后回应:

HTTP/1.1 200 OK
Cache-Control: no-store
Content-Length: 775
Content-Type: application/json; charset=utf-8
ETag: "Lk4Y9t0X5UEvgxtRUQ0MGoqYu4l4cN53Ji5NpB3lhzI="
Server:
X-Frame-Options: DENY
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: *
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcYWFtXFNDSFxzdHlsZWxhYnMubVxzcmNcU3R5bGVsYWJzLk0uUG9ydGFsLldlYi5VSVx2MVxvcGVuYXBpXERlbW9Eb21haW4=?=
X-Content-Type-Options: nosniff
Date: Wed, 07 Aug 2019 11:26:00 GMT

CORS 标头在我看来是正确的,但缺少“Access-Control-Allow-Methods”?这可能是问题吗?

我正在使用带有 'Microsoft.AspNet.WebApi.Cors' 5.2.7 的 ASP.NET Framework,按照此处https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api 的描述进行配置

在我的控制器上我有这个属性:

    [EnableCors(origins: "*", headers: "*", methods: "*", exposedHeaders: "*", PreflightMaxAge = 60)]

【问题讨论】:

  • 浏览器在 devtools 控制台中记录的确切错误消息是什么?响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应?是 OPTIONS 响应发生故障还是 GET 响应发生故障?
  • @sideshowbarker 在 Azure 逻辑应用中他们都是 200。对于 Built.io 我看不到这一点,因为第一次调用 flow.built.io/enterprise/v1/activities/fetchswaggerspec 然后 https://flow.built.io/enterprise/v1/activities/swagger/.../get_details?api=... 隐藏了真正的请求。两者都是 200。

标签: asp.net cors azure-logic-apps openapi built.io


【解决方案1】:

我发现了问题... Built.io 和 Azure 逻辑应用程序不支持 Swagger/OpenApi 版本 3。问题不是 CORS,尽管 Azure 逻辑应用程序是这样声明的。

【讨论】:

    猜你喜欢
    • 2016-12-10
    • 2021-05-30
    • 1970-01-01
    • 2016-03-10
    • 2022-06-25
    • 2018-07-07
    • 2020-04-24
    • 2021-10-15
    • 2021-09-07
    相关资源
    最近更新 更多