通过SAM创建API时,预检响应中的Access-Control-Allow-Headers不允许请求标头字段conte



我正在使用SAM模板创建Rest API。

我正在通过Postman测试这些API,一切都按预期进行,但当我在应用程序中集成这些API时,我就收到了这个错误:

from origin 'http://localhost:3033' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

这种情况只发生在PUT、POST和PATCH方法上。GET方法运行良好。

我在代码返回部分添加了以下内容:

return {
"statusCode": 200,
"headers": {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Headers": "*"},
"body": json.dumps(item)
}

然而,错误仍然存在。

我创建了一个API和lambda来为控制台提供相同的功能,它在应用程序中运行良好。

这是我创建API的SAM代码:

ApiGatewaySignUpFlowUserApi:
Type: AWS::Serverless::Api
Properties:
Name: loadeo_signup
StageName: Stage
Cors: "'*'"
CreateUserSignup:
Type: AWS::Serverless::Function
Properties:
FunctionName: loadeo_create_user_signup
CodeUri: createUserSignup/
Handler: create_user_signup.lambda_handler
Timeout: 5
Runtime: python3.8
Role: arn:aws:iam::272075499248:role/loadeo_lambda_execution
MemorySize: 128
Events:
GetAllUser:
Type: Api
Properties:
Path: /create-user
Method: post
RestApiId:
Ref: ApiGatewaySignUpFlowUserApi

我真的不明白这里可能出了什么问题。有人能帮我吗?

将API定义更改为以下帮助我解决了问题:

ApiGatewaySignUpFlowUserApi:
Type: AWS::Serverless::Api
Properties:
Name: loadeo_signup
StageName: Stage
Cors: 
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"  

明确指定CORS规则有帮助。

来自文档(https://www.serverless.com/blog/cors-api-gateway-survival-guide/),允许所有请求的cors密钥的值是true而不是"*"

相关内容

最新更新