在 API 请求上返回 303 重定向状态时,我遇到了 CORS 错误。API 托管在 AWS API Gateway 上,并使用 AWS Lambda 与代理响应的集成。当最终用户单击我正在部署的站点上的按钮时,将发出 API 请求。
这是CORS错误:
Access to XMLHttpRequest at 'https://destination.com/' (redirected from 'https://my-api-endpoint.com') from origin 'http://source.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我从 Lambda 函数返回以下代理对象:
{
"statusCode": 303,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Credentials": True,
"Location": "https://destination.com/",
},
}
因此,"Access-Control-Allow-Origin": "*"
作为请求中的标头丢失不是问题,这实际上是我迄今为止通过谷歌搜索找到的唯一答案。
此外,如果我将 API 端点放入浏览器,它会按预期工作。据我所知,不同之处在于,当端点直接放入浏览器时,sec-fetch-site
标题返回为none
,而当我单击网站上的按钮时,标题返回为cross-site
,这种差异导致了 CORS 错误。
我的用例是 AWS Marketplace 上的 SaaS 列表,因此当用户订阅我将列出的产品时,POST 请求会发送到我的 API 端点,其中包含我需要摄取的客户端令牌,然后我需要从那里将最终用户路由到我的登录页面。对我来说,最自然的处理方式是返回 303 重定向的 API 端点,但由于源是 AWS Marketplace URL,我自然会遇到跨域问题。
有谁知道如何避免这个 CORS 错误?如果没有,是否有人对我应该如何解决这个问题有其他建议?