【发布时间】:2020-07-10 04:04:18
【问题描述】:
我正在尝试创建一个启用了 CORS 的函数。 该功能使用 Postman(存在 cors 标头)按预期工作,但从浏览器尝试时出现 CORS 错误(无 cors 标头)。
const getTicket = async event => {
var ticketNumber = Date.now();
return {
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Methods': '*',
'Access-Control-Allow-Origin': '*',
},
statusCode: 200,
body: JSON.stringify({"ticketNumber": ticketNumber})
};
};
functions:
getTicket:
handler: code/common/ticket.getTicket
runtime: nodejs12.x
events:
- http:
method: get
path: getTicket
cors: true
authorizer:
arn: ${self:custom.auth0.authorizer_arn}
我还尝试了其他几种编写 serverless.yaml 文件的方法,但它们都不起作用,它们之间的唯一区别是我的 API 网关中创建的方法。有时我有 GET+OPTIONS 方法,有时只有 GET,但从未使用过 CORS。
我得到错误: “从源 'http://localhost:8080' 访问 XMLHttpRequest 在 'https://...amazonaws.com/prod/getTicket' 已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。”
【问题讨论】:
-
您是否在浏览器中启用了 CORS?
-
响应的 HTTP 状态码是什么?您可以使用浏览器开发工具中的网络窗格进行检查。是 4xx 还是 5xx 错误而不是 200 OK 成功响应?
-
403 代码。我不想在浏览器中激活 CORS,因为这样我就无法检测到类似的问题。
-
实际问题是 403,而不是 CORS。正如stackoverflow.com/a/60926300/441757 的答案所指出的那样,默认情况下,5xx 和 4xx 将不存在 CORS 标头。如果您想让这些错误包含 CORS 标头,那么您可以执行该答案所描述的操作,然后浏览器将不再记录 CORS 消息。但是您仍然需要解决 403 问题。
-
你说得对,我有 2 个问题:Gareth McCumskey 的回答解决了 CORS 问题,以及我的 axios.get 请求中的另一个错误 :) 谢谢!
标签: aws-lambda aws-api-gateway serverless-framework