Angular SPA 与来自 API 网关的任何访问控制允许方法不一致
Angular SPA inconsistent with ANY access-control-allow-methods from API Gateway
我们目前正在为 API 使用无服务器部署模型,并使用 NodeJS 快速代码库。一切都很好,直到我们 运行 对由无服务器创建的 CloudFormation 堆栈设置了硬限制,其创建的资源限制为 200。
在 Serverless 团队致力于嵌套堆栈集成时尝试解决此问题是用 ANY 替换单个路由的 GET、PUT、POST、DELETE,这为我们节省了大约 75% 的 CloudFormation 资源。
API 网关似乎处理得很好,OPTIONS 路由的集成响应返回 Access-Control-Allow-Methods: 'OPTIONS,ANY'
。
使用 postman 进行测试非常有效,能够顺利使用前面提到的所有方法。
从我们的 Angular 前端执行此操作似乎不起作用。
XMLHttpRequest cannot load . Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
在 Angular 的眼中,POST、PUT、DELETE、... 不匹配 ANY,而对于邮递员来说它匹配。
任何可能发生这种情况的输入将不胜感激。
更新
POST 请求通过 Angular 应用程序工作,只是 PUT 和 DELETE 请求抛出 'not allowed by Access-Control-Allow-Methods' 错误。
The integration response for the OPTIONS route returned Access-Control-Allow-Methods: 'OPTIONS,ANY'.
如果您通过 CloudFormation 模板创建 OPTIONS 资源来启用 CORS,那么您应该将 'Access-Control-Allow-Methods' header 改为 return 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT' 而不是 'OPTIONS,ANY' . (如果您从控制台启用 CORS,这就是 API 网关控制台的工作方式)。那应该解决它。
将 Serverless
更新到高于 1.10.0
的版本修复了它。他们已修复此 issue.
中的错误
我们目前正在为 API 使用无服务器部署模型,并使用 NodeJS 快速代码库。一切都很好,直到我们 运行 对由无服务器创建的 CloudFormation 堆栈设置了硬限制,其创建的资源限制为 200。
在 Serverless 团队致力于嵌套堆栈集成时尝试解决此问题是用 ANY 替换单个路由的 GET、PUT、POST、DELETE,这为我们节省了大约 75% 的 CloudFormation 资源。
API 网关似乎处理得很好,OPTIONS 路由的集成响应返回 Access-Control-Allow-Methods: 'OPTIONS,ANY'
。
使用 postman 进行测试非常有效,能够顺利使用前面提到的所有方法。
从我们的 Angular 前端执行此操作似乎不起作用。
XMLHttpRequest cannot load . Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.
在 Angular 的眼中,POST、PUT、DELETE、... 不匹配 ANY,而对于邮递员来说它匹配。
任何可能发生这种情况的输入将不胜感激。
更新
POST 请求通过 Angular 应用程序工作,只是 PUT 和 DELETE 请求抛出 'not allowed by Access-Control-Allow-Methods' 错误。
The integration response for the OPTIONS route returned Access-Control-Allow-Methods: 'OPTIONS,ANY'.
如果您通过 CloudFormation 模板创建 OPTIONS 资源来启用 CORS,那么您应该将 'Access-Control-Allow-Methods' header 改为 return 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT' 而不是 'OPTIONS,ANY' . (如果您从控制台启用 CORS,这就是 API 网关控制台的工作方式)。那应该解决它。
将 Serverless
更新到高于 1.10.0
的版本修复了它。他们已修复此 issue.