此问题的另一个根本原因可能是HTTP / 1.1和HTTP / 2之间的差异。
症状:使用我们的软件时,部分用户(并非全部)报告出现CORS错误。
问题:在Access-Control-Allow-Origin
头不见了有时。
上下文:我们有一个Lambda,专用于处理OPTIONS
请求并使用相应的CORS标头进行回复,例如Access-Control-Allow-Origin
匹配列入白名单的Origin
。
解决方案:对于HTTP / 2调用,API网关似乎将所有标头都转换为小写,但是对于HTTP / 1.1则保留大写。这导致访问event.headers.origin
失败。
检查您是否也遇到此问题:
假设您的API位于https://api.example.com
,而前端位于https://www.example.com
。使用CURL,使用HTTP / 2发出请求:
curl -v -X OPTIONS -H 'Origin: https://www.example.com' https:
响应输出应包含标题:
< Access-Control-Allow-Origin: https://www.example.com
使用HTTP / 1.1(或使用小写Origin
标头)重复同一步骤:
curl -v -X OPTIONS --http1.1 -H 'Origin: https://www.example.com' https:
如果Access-Control-Allow-Origin
缺少标题,则在读取Origin
标题时可能要检查是否区分大小写。
Bucket Policy
吗?确保您的策略中有该方法