AWS s3 загружает вызов API, возвращая статус 411

Я пытался выполнить AWS s3 rest api call, чтобы загрузить документ в корзину s3. Документ находится в форме байтового массива.

PUT /Test.pdf HTTP/1.1
Host: mybucket.s3.amazonaws.com
Authorization: **********
Content-Type: application/pdf
Content-Length: 5039151
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD
x-amz-date: 20180301T055442Z

Когда мы выполняем вызов API, он дает статус ответа 411, т.е. Длина требуется. Мы уже добавили заголовок Content-Length с длиной байтового массива в качестве значения. Но все же проблема повторяется. Пожалуйста, помогите решить проблему.

1 ответ

Решение

x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD используется только с нестандартным API загрузки чанка. Это пользовательская кодировка, которая позволяет записывать порции данных в провод. Это не то же самое, что Multipart Upload API, и не то же самое, что Transfer-Encoding: chunked (который S3 не поддерживает для загрузки).

Не ясно, почему это приведет к 411 Length Required но ошибка говорит о том, что S3 не устраивает формат загрузки.

Для стандарта PUT загрузить, x-amz-content-sha256 должен быть установлен в шестнадцатеричный хэш SHA-256 тела запроса или строку UNSIGNED-PAYLOAD, Первый рекомендуется, потому что он обеспечивает проверку целостности. Если по какой-либо причине ваши данные будут повреждены на проводе способом, который TCP не смог обнаружить, S3 автоматически отклонит поврежденную загрузку и не создаст объект.

Смотрите также https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-auth-using-authorization-header.html

Другие вопросы по тегам