Для меня, поскольку я использовал довольно стандартные вызовы React fetch, это можно было исправить с помощью некоторых из исправлений AWS Console и Lambda, описанных выше, но моя Lambda вернула правильные заголовки (я также использовал режим прокси), и мне нужно было упаковать мои приложение в шаблон SAM, поэтому я не мог тратить время, щелкая по консоли.
Я заметил, что все элементы CORS работали нормально, ПОКА я не поставил Cognito Auth в свое приложение. Я просто очень медленно выполнял развертывание пакета SAM / SAM со все большим количеством конфигураций, пока он не сломался, и он не сломался, как только я добавил Auth в свой API-шлюз. Я провел целый день, просматривая замечательные дискуссии, подобные этой, в поисках простого решения, но в конце концов мне пришлось прочитать о том, что делает CORS. Я сохраню вам чтение и дам вам еще одно легкое решение (по крайней мере, для меня).
Вот пример окончательно сработавшего шаблона шлюза API (YAML):
Resources:
MySearchApi:
Type: AWS::Serverless::Api
Properties:
StageName: 'Dev'
Cors:
AllowMethods: "'OPTIONS, GET'"
AllowHeaders: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
AllowOrigin: "'*'"
Auth:
DefaultAuthorizer: MyCognitoSearchAuth
Authorizers:
MyCognitoSearchAuth:
UserPoolArn: "<my hardcoded user pool ARN>"
AuthType: "COGNITO_USER_POOLS"
AddDefaultAuthorizerToCorsPreflight: False
Обратите внимание на AddDefaultAuthorizerToCorsPreflight внизу. По умолчанию это True, если у вас НЕТ в вашем шаблоне, насколько я могу судить из моего чтения. И, когда True, он как бы блокирует нормальное поведение OPTIONS, чтобы объявить, что ресурс поддерживает с точки зрения разрешенного происхождения. Как только я явно добавил его и установил значение False, все мои проблемы были решены.
Подразумевается, что если у вас возникла эта проблема и вы хотите диагностировать ее более полно, вам следует посетить свои ресурсы в API-шлюзе и проверить, содержит ли ваш метод OPTIONS какую-либо форму аутентификации. Вашему GET или POST требуется Auth, но если в ваших OPTIONS включен Auth, вы можете оказаться в этой ситуации. Если вы щелкаете по консоли AWS, попробуйте удалить из OPTIONS, повторно развернуть, а затем протестировать. Если вы используете SAM CLI, попробуйте мое исправление, указанное выше.
person
CDixon
schedule
25.01.2021
Bucket Policy
? Убедитесь, что у вас есть метод в вашей политике - person iSkore   schedule 04.02.2016The response had HTTP status code 403
конкретно намекает, что вы получаете ответ об ошибке, и ответ об ошибке, скорее всего, не содержит указанного заголовка cors. - person Kevin B   schedule 14.02.2017