Ответ 1
Поскольку вы обычно не отправляете никаких дополнительных данных при выполнении запроса GET
, заголовок Content-Length
не должен отправляться вообще.
Заголовок Content-Length
должен включаться только в том случае, если вы отправляете тело сообщения, а значение соответствующего заголовка всегда является длиной этого поля, измеренного в байтах (OCTET).
(RFC2616) 14.13 Content-Length
Поле Content-Length entity-header указывает размер тела сущности, десятичного числа OCTET, отправленного получателю или, в случае метода HEAD, размер тела объекта, который будет иметь был отправлен, если запрос был GET.
< snip/ >
Приложения СЛЕДУЕТ использовать это поле, чтобы указать длину передачи тела сообщения, если это не запрещено правилами в разделе 4.4.
Он (AFAIK) считал, что плохая практика включает тело сообщения при выполнении запроса GET
, но при чтении HTTP RFC2616 я ничего не вижу в заявлении что запрос GET
не может содержать тело сообщения.
Хотя я предполагаю, что большинство веб-серверов сегодня не будут отвечать тем, что вы хотите, чтобы они ответили, если вы отправляете данные в теле сообщения и ожидаете, что он будет разбираться и обрабатываться в этом случае.
(RFC2616) 4.3 Тело сообщения
Тело сообщения (если есть) HTTP-сообщения используется для переноса сущность-тело, связанное с запросом или ответом. Тело сообщения отличается от тела объекта только тогда, когда кодирование передачи применяется, как указано полем заголовка Transfer-Encoding (раздел 14,41).
message-body = entity-body | <entity-body encoded as per Transfer-Encoding>
Передача-кодирование ДОЛЖНА использоваться для обозначения любых кодировок передачи применяемые приложением для обеспечения безопасной и надлежащей передачи сообщение. Transfer-Encoding является свойством сообщения, а не сущности, и поэтому МОЖЕТ быть добавлено или удалено любым приложением по цепь запроса/ответа. (Однако в разделе 3.6 устанавливаются ограничения на когда могут использоваться некоторые кодировки передачи.)
Правила для того, когда тело сообщения разрешено в сообщении, различаются для запросы и ответы.
Наличие тела сообщения в запросе сигнализируется включение поля заголовка Content-Length или Transfer-Encoding в запросить заголовки сообщений.
Тело сообщения НЕ ДОЛЖНО быть включено в запрос, если спецификация метода запроса (раздел 5.1.1) не позволяет отправлять тело объекта в запросы.
Сервер ДОЛЖЕН читать и пересылать тело сообщения по любому запросу; если метод запроса не включает определенную семантику для объекта-тела, тогда тело сообщения ДОЛЖНО быть проигнорировано при обработке запроса.