Периодические ошибки 403 CORS при использовании подписанного URL-адреса S3 для объекта PUT - PullRequest
1 голос
/ 20 июня 2019

Я сталкиваюсь с проблемой, когда S3 иногда возвращает 403 по запросу предварительного запроса OPTIONS при попытке загрузить объект со стороны клиента с запросом PUT на подписанный URL-адрес. Огорчает то, что в 90% случаев он работает нормально, и когда он терпит неудачу, если я повторю один и тот же запрос несколько раз, он будет выполнен.

Кто-нибудь испытывал нечто подобное, и если да, то как вы это решили?

Похоже, что это связано с этой проблемой , но не совсем так, потому что они проходят через CloudFront, а я иду прямо к S3.

Создание подписанного URL на стороне сервера

const params = {
    Bucket: **my bucket**,
    Key: 'test/my-test-file.csv',
    Metadata: {
        'created-by': req.user.id,
        'job-id': job.id,
    },
};

const url = s3.getSignedUrl('putObject', params);

Angular.JS HTTP-запрос на подписанный URL-адрес

return $http({
    url: **signedUrlHere**,
    method: 'PUT',
    data: file,
    headers: {
        'Content-Type': '',
    },
    transformRequest: [],
});

Настройки ведра CORS

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <MaxAgeSeconds>3000</MaxAgeSeconds>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

Заголовки запроса

Host: s3.amazonaws.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Access-Control-Request-Method: PUT
Access-Control-Request-Headers: content-type
Referer: https://**.***.com/*/*/*
Origin: https://**.***.com
DNT: 1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Заголовки ответа

HTTP/1.1 403 Forbidden
x-amz-request-id: *********
x-amz-id-2: *******
Content-Type: application/xml
Transfer-Encoding: chunked
Date: Thu, 20 Jun 2019 02:54:39 GMT
Server: AmazonS3

Screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...