$content_length

Переменная $content_length содержит значение HTTP‑заголовка 'Content-Length', отправленного клиентом, представляющее размер тела запроса в байтах. — NGINX Core (HTTP)

$content_length NGINX Core (HTTP)

Описание

Переменная $content_length в NGINX содержит длину тела запроса, указанную в HTTP‑заголовке 'Content-Length'. Она задаётся только для запросов, в которых этот заголовок присутствует, обычно при методах POST и PUT. Если клиент не отправил заголовок 'Content-Length', переменная будет пустой. Эта переменная в первую очередь полезна для обработки запросов с известным размером содержимого, позволяя применять условную логику в зависимости от размера поступающих данных. При обработке запросов NGINX устанавливает $content_length после разбора заголовков входящего запроса. Если заголовок 'Content-Length' указан, переменная будет содержать числовое значение; однако если заголовок отсутствует или имеет неверный формат, $content_length не будет отражать корректный размер. На практике допустимые значения этой переменной — строго неотрицательные целые числа, указывающие количество байт в теле запроса. Разработчики часто используют эту переменную для установки ограничений по размеру, логирования размеров запросов или условной обработки больших полезных нагрузок более эффективно.

Пример конфига

http {
    server {
        listen 80;

        location /upload {
            if ($content_length > 10000) {
                return 413;  # Request entity too large
            }
        }
    }
}

Подсистема

http

Кэшируется

Да

Контексты

http, server, location, if

Убедитесь, что заголовок 'Content-Length' действительно присутствует; иначе $content_length будет пустым.

$content_length полезен только для методов, таких как POST и PUT, где обычно присутствует тело; для запросов GET он не будет установлен.

Не все клиенты корректно используют заголовок 'Content-Length', что может привести к неожиданным результатам. При его отсутствии переменная не вернёт размер.