S3, выбрасывающий 400 Bad Request при использовании axios - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь выполнить HEAD запрос к моему Amazon S3 от моего React App с использованием axios, и я продолжаю получать следующую ошибку

Unhandled promise rejection Error: "Request failed with status code 400"

Моя политика в отношении корзин выглядит следующим образом

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AddPerm",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucket_name/*"
        }
    ]
}

И моя CORS конфигурация такая:

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

Ошибка не возникает, когда я выполняю запрос Postman или curl -I, но возникает, когда я использую axios

Мой код очень прост и выглядит следующим образом

const { data: headerData } = await axios.head(url);
console.log("headerData", headerData);

Что-то не так с этим?

Спасибо

S3 Pics,

Network One Network Two

1 Ответ

1 голос
/ 07 мая 2019

Следующее прекрасно работает для меня вне браузера, для общедоступного объекта:

const axios = require('axios');

const s3url = 'https://s3.amazonaws.com/mybucket/cat.jpg';

const headObject = async (url) => {
  const { headers } = await axios.head(url);
  console.log('headers', headers);
};

headObject(s3url);

Итак, вероятно, ваша проблема связана с CORS. Не могли бы вы добавить следующее в конфигурацию CORSRule блока и повторить попытку:

<ExposeHeader>ETag</ExposeHeader>

Если у вас есть пользовательские метаданные, также добавьте (заменив custom-header на имя метаданных):

<ExposeHeader>x-amz-meta-custom-header</ExposeHeader>
...