Я использую Serverless, и у меня есть лямбда, доступная через API Gateway. Как и во многих вопросах COR, в которых упоминается аналогичный стек, при вызове из браузера я получаю следующую ошибку (обычное локальное тестирование Postman / curl работает нормально):
Access to XMLHttpRequest at 'https://<gatewayUrl>/dev/login/?userType=userA' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field z-client-timezone is not allowed by Access-Control-Allow-Headers in preflight response
Тип запроса интеграции: Lambda_Proxy
Cors был включен, добавлен метод параметров
Обработчик лямбда-выражения возвращает ожидаемые заголовки
Запрос ax ios отправляет один настраиваемый заголовок Z-Client-Timezone
, который также разрешен в Lambda
Я пробовал все, включая все здесь , но не повезло.
Я очень расстроен, поэтому любая помощь будет потрясающей. Еще одна вещь, когда я делаю curl -i -X OPTIONS https://<gatewayUrl>/dev/login
, я получаю этот результат, который, кажется, отсутствует Z-Client-Timezone
:
HTTP/2 200
content-type: application/json
content-length: 0
date: Fri, 10 Jul 2020 04:00:10 GMT
x-amzn-requestid: <aws_requestId>
access-control-allow-origin: *
access-control-allow-headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
x-amz-apigw-id: <apigw-id>
access-control-allow-methods: OPTIONS,POST
via: 1.1 <id>.cloudfront.net (CloudFront), 1.1 <id>.cloudfront.net (CloudFront)
x-amz-cf-pop: DFW50-C1
x-cache: Miss from cloudfront
x-amz-cf-pop: DFW55-C1
x-amz-cf-id: <cf-id>
Моя лямбда:
export async function login(event) {
const headers = {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': true
}
....
return {
statusCode: 200,
headers,
body: JSON.stringify(session)
};
}
Мой Serverless.yml:
login:
handler: dist/src/handlers/auth.login
events:
- http:
path: login
method: post
cors:
origin: '*'
headers:
- Access-Control-Allow-Credentials
resources:
Resources:
GatewayResponseDefault4XX:
Type: 'AWS::ApiGateway::GatewayResponse'
Properties:
ResponseParameters:
gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
ResponseType: DEFAULT_4XX
RestApiId:
Ref: 'ApiGatewayRestApi'
Я хотел бы получить любую помощь, которую вы можете оказать. Я пропустил некоторый код, так как все остальное работает, за исключением материала cors, поэтому я только что включил его, но если необходимы дополнительные разъяснения, я с радостью предоставлю.