При работе с AWS (веб-службы Amazon) и реализации запросов между источниками вы можете столкнуться с ошибкой «AWS No ‘Access-Control-Allow-Origin’ Header is Present». Эта ошибка возникает из-за механизма безопасности браузера, известного как совместное использование ресурсов между источниками (CORS). В этой статье блога мы рассмотрим несколько способов устранения этой ошибки и предоставим примеры кода для каждого подхода.
Метод 1. Настройка правил CORS в консоли AWS
Один из способов устранения ошибки — настройка правил CORS в консоли управления AWS. Выполните следующие действия:
Шаг 1. Перейдите в консоль управления AWS и выберите нужный сервис (например, Amazon S3, API Gateway и т. д.).
Шаг 2. Найдите раздел конфигурации CORS и добавьте соответствующие правила.
Шаг 1. >Шаг 3. Сохраните изменения и снова протестируйте запрос из разных источников.
Пример кода для настройки правил CORS в Amazon S3:
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://example.com</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Метод 2. Использование AWS CLI для настройки CORS
Другой подход – использовать интерфейс командной строки AWS (CLI) для программной настройки CORS для ваших ресурсов AWS.
Шаг 1. Установите и настройте интерфейс командной строки AWS на локальном компьютере.
Шаг 2. Откройте командную строку или терминал и выполните следующую команду:
aws s3api put-bucket-cors --bucket YOUR_BUCKET_NAME --cors-configuration file://cors.json
Пример кода для настройки CORS с использованием AWS CLI:
{
"CORSRules": [
{
"AllowedOrigins": ["http://example.com"],
"AllowedMethods": ["GET"],
"MaxAgeSeconds": 3000,
"AllowedHeaders": ["Authorization"]
}
]
}
Метод 3: использование Lambda@Edge
Если вы используете Amazon CloudFront вместе с Lambda@Edge, вы можете использовать службу бессерверных вычислений для изменения заголовков ответов и добавления необходимого заголовка Access-Control-Allow-Origin.
Пример кода для добавления заголовка Access-Control-Allow-Origin с использованием Lambda@Edge (Node.js):
exports.handler = (event, context, callback) => {
const response = event.Records[0].cf.response;
const headers = response.headers;
headers['access-control-allow-origin'] = [
{
key: 'Access-Control-Allow-Origin',
value: 'http://example.com'
}
];
callback(null, response);
};
В этой статье мы рассмотрели несколько способов устранения ошибки «AWS No ‘Access-Control-Allow-Origin’ Header is Present». Настроив правила CORS в консоли AWS, используя интерфейс командной строки AWS или используя Lambda@Edge, вы можете устранить эту ошибку и обеспечить плавность запросов между источниками в ваших приложениях AWS.
Не забудьте адаптировать примеры кода к вашему конкретному варианту использования и обратиться к документации AWS за подробными инструкциями по сервисам, с которыми вы работаете.