Браузеры блокируют запросы веб-страницы к другому домену, если сервер их явно не разрешил. Правила CORS (Cross-Origin Resource Sharing) позволяют вашему сайту загружать файлы из бакета или отправлять файлы в бакет прямо из браузера.
В примерах используется AWS CLI, настроенный для UzCloud. Замените my-bucket на имя своего бакета.
Создание правил
Опишите правила в файле cors.json. Этот пример разрешает сайту https://example.com читать объекты и загружать их по presigned URL:
{
"CORSRules": [
{
"AllowedOrigins": ["https://example.com"],
"AllowedMethods": ["GET", "HEAD", "PUT"],
"AllowedHeaders": ["*"],
"ExposeHeaders": ["ETag"],
"MaxAgeSeconds": 3600
}
]
}
AllowedOrigins— домены вашего сайта. Не используйте*, если файлы не публичные.AllowedMethods— разрешенные HTTP-методы.MaxAgeSeconds— сколько браузер кеширует результат предварительного запроса.
Примените и проверьте правила:
aws s3api put-bucket-cors --bucket my-bucket --cors-configuration file://cors.json
aws s3api get-bucket-cors --bucket my-bucket
Проверка из командной строки
Отправьте предварительный запрос так же, как это делает браузер. В ответе должен быть заголовок Access-Control-Allow-Origin:
curl -i -X OPTIONS "https://s3.uzcstorage.uz/my-bucket/image.png" \
-H "Origin: https://example.com" \
-H "Access-Control-Request-Method: GET"
Чтобы удалить правила: aws s3api delete-bucket-cors --bucket my-bucket.