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