Если я проверяю заголовок "content-length", он на 100% точен?
Если нет, то насколько это точно?
Я хочу знать размер изображения, прежде чем загрузить его.
6 ответов
Это должно быть лучше - иначе зачем это вообще нужно?
Если он не может быть надежно определен заранее, он вообще не должен обслуживаться сервером. (Например, при работе с динамически генерируемым текстом может использоваться что-то вроде кодирования по частям передачи - что не требует, чтобы конечная длина была известна, когда заголовок HTTP записывается в начале потока.)
Может ли заголовок HTTP Content-length иметь неправильный формат? Да.
Должны ли вы верить, что это точное представление о размере тела сообщения? Да.
Это должно быть и, как правило, является точным. Однако веб-сервер вполне может сообщить о неверной длине контента, хотя это, очевидно, происходит не часто (я вспоминаю старые версии Apache, перенастраивающие бессмысленные длины контента для файлов> 2 ГБ).
Также не обязательно указывать заголовок Content-Length.
Браузеры могут не прощать, если длина содержимого неверна.
У меня возникла проблема, когда сервер иногда возвращал слишком низкую длину контента. Браузеры просто не справятся.
Так что да, вы можете предположить, что сервер правильно устанавливает длину контента, основываясь на знании того, что клиенты браузера работают на том же предположении.
Content-Length может быть отправлен кодом сервера (или) самим уровнем apache. Когда код не отправляется, Apache отправит его.
Известны сбои клиента, когда клиент подключается и закрывает сокет, когда длина содержимого меньше.
Поскольку изображения обычно не генерируются кодом во время выполнения, вы можете положиться на него.
Делюсь тем, что недавно обнаружил.
В моем случае я использовал NodeJS для отправки http-запроса на другой сервер, на котором я могу самостоятельно установить значение длины содержимого в заголовок (значение ниже фактического размера).
Когда другой сервер получил мой http-запрос, он обработал размер параметра/тела запроса только до того момента, когда длина содержимого сообщила серверу.
Например, фактическая длина моего запроса составляет 100, но длина содержимого указана как 80, сервер, получивший запрос, будет обрабатывать только 1-80, а последние 20 не обрабатывались и вызвали некоторую ошибку, например «Неверный параметр».
В настоящее время серверная сторона автоматически вставит длину содержимого для вас, если в этом нет необходимости и вы знаете, что делаете, иначе вы не хотите ее менять, поскольку это может вызвать у вас проблемы.