我创建并部署了具有以下结构的AWS API网关资源,包括自定义HTTP请求标头“X-header”
dev (stage)
/echo (resource)
POST (method)
Method Request - Headers: X-header
OPTIONS (method)
Method Request - Headers: X-header
当我从Chrome发送到端点时,我收到以下错误。
XMLHttpRequest无法加载https://fxxxx.execute-api.us-west-2.amazonaws.com/dev/echo。预检响应中的Access-Control-Allow-Headers不允许使用请求标头字段X-header。
Chrome正在对OPTIONS方法进行预检检查。我可以看到请求标题:
Access-Control-Request-Headers:accept,content-type,x-header
访问控制请求-方法:POST
但响应标题只有:
访问控制允许报头:内容类型,X-AMZ-日期,授权,X-API密钥,X-AMZ-安全令牌
访问控制允许的方法:POST,OPTIONS
访问控制允许来源:*
Chrome希望Response Access-Control-Request-Headers包含我的自定义x-header,这看似合乎逻辑。这是API Gateway错误吗?
我看到的唯一解决方法是删除自定义标头并在POST正文中传递数据。
答案 0 :(得分:5)
您可以完全控制API网关中OPTIONS响应的CORS标头。如果需要将x-header添加到Access-Control-Allow-Headers标头,请继续添加!转到OPTIONS方法的Integration Response并修改该标头的静态值。
当您首次使用控制台功能配置CORS时(您可能没有这样做),您可以在那里输入标题列表并查看其他高级标题。
因此,您可以在创建时进行此更改,或者在创建OPTIONS后即时更新。
答案 1 :(得分:2)
我有完全相同的问题。我已将自定义标头添加到资源上的Access-Control-Allow-Headers的逗号分隔列表中,启用CORS;以及资源 - 选项 - 集成响应,标题映射。
我在Chrome中遇到同样的错误,并检查网络中的OPTIONS调用,我在响应中的Access-Control-Allow-Headers中看不到我的标题名称。
答案 2 :(得分:1)