HTTPQUERY
Русский

411 Length Required

Применение

При получении сообщения об ошибке 411 Length Required запрос нужно отправить заново, включив в него заголовок Content-Length. HTTP-запросы обычно используют этот заголовок для указания длины тела сообщения, хотя и не всегда. Например, когда присутствует поле заголовка Transfer-Encoding со значением chunked, поле заголовка Content-Length не требуется.

Если клиент передаёт поток данных и получает этот статус, данные следует отправлять блоками с указанным размером.

Влияние на SEO

Поисковые системы, такие как Google, не индексируют URL с кодом ответа 411 Length Required. Ранее проиндексированные URL будут удалены из результатов поиска. Страницы, возвращающие этот код, не расходуют краулинговый бюджет.

Пример

Клиент пытается отправить файл, но сервер отклоняет запрос с кодом 411 Length Required, поскольку длина тела сообщения не указана.

Запрос

PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf

<PDF file included as message body>

Ответ

HTTP/1.1 411 Length Required

Как исправить

Добавьте заголовок Content-Length с точным количеством байтов в теле запроса. Большинство клиентских HTTP-библиотек вычисляют это значение автоматически при отправке строки или буфера. Убедитесь, что библиотека не удаляет этот заголовок и не устанавливает его значение в ноль.

Если запрос использует chunked в Transfer-Encoding, значит целевой сервер не принимает тела, разбитые на блоки. Сначала буферизуйте полную полезную нагрузку, измерьте её длину в байтах и отправьте тело с заголовком Content-Length.

Прокси и межсетевые экраны иногда удаляют или изменяют заголовки при передаче. Если клиент корректно отправляет Content-Length, а сервер всё равно возвращает 411, проверьте запрос на стороне сервера и убедитесь, что заголовок доходит в неизменном виде.

В curl флаг -d устанавливает Content-Length автоматически. Для Transfer-Encoding: chunked в curl используйте -H “Transfer-Encoding: chunked”, но только если сервер поддерживает передачу блоками.

На стороне сервера этот статус часто возвращают строгие конфигурации или устаревшие серверы HTTP/1.0, не поддерживающие кодирование блоками. Администратор сервера устанавливает такую политику намеренно, и исправление всегда выполняется на стороне клиента.

411 в инструментах тестирования API

Инструменты вроде Postman и curl обрабатывают заголовок Content-Length автоматически для большинства типов запросов. Ошибка 411 в Postman обычно возникает при отправке пустого тела в запросе POST или PUT без выбора типа тела. Выбор формата тела (raw, form-data или x-www-form-urlencoded) заставляет Postman правильно установить заголовок Content-Length.

Примеры кода

.NET

HttpStatusCode.LengthRequired

Rust

http::StatusCode::LENGTH_REQUIRED

Rails

:length_required

Go

http.StatusLengthRequired

Symfony

Response::HTTP_LENGTH_REQUIRED

Python3.5+

http.HTTPStatus.LENGTH_REQUIRED

Java

java.net.HttpURLConnection.HTTP_LENGTH_REQUIRED

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_LENGTH_REQUIRED

Angular

@angular/common/http/HttpStatusCode.LengthRequired