Помните, что прокси часто изменяют представление базовой сущности. В вашем случае я подозреваю, что прокси, вероятно, изменяет кодировку передачи. Что, в свою очередь, делает Content-Length бессмысленным, даже если он указан.
Вы попали в следующие два раздела спецификации HTTP 1.1:
4.4 Длина сообщения
- ...
- ...
- Если присутствует поле заголовка Content-Length (раздел 14.13), его десятичное значение в OCTET представляет как длину объекта, так и длину передачи. Поле заголовка Content-Length НЕ ДОЛЖНО отправляться, если эти две длины различны (то есть, если присутствует поле заголовка Transfer-Encoding). Если сообщение получено как с полем заголовка Transfer-Encoding, так и с полем заголовка Content-Length, последнее ДОЛЖНО игнорироваться.
14.41 Передача-кодировка
Поле общего заголовка Transfer-Encoding указывает, какой (если есть) тип преобразования был применен к телу сообщения для безопасной передачи его между отправителем и получателем. Это отличается от кодирования содержимого тем, что кодирование передачи является свойством сообщения, а не объекта.
Transfer-Encoding = "Transfer-Encoding" ":" 1#transfer-coding
Кодировки перевода определены в разделе 3.6. Пример:
Transfer-Encoding: chunked
Если к объекту применено несколько кодировок, кодировки передачи ДОЛЖНЫ быть перечислены в том порядке, в котором они были применены. Дополнительная информация о параметрах кодирования МОЖЕТ предоставляться другими полями заголовка объекта, не определенными в данной спецификации.
Многие старые приложения HTTP / 1.0 не понимают заголовок Transfer-Encoding.
Таким образом, URLConnection игнорирует заголовок Content-Length
согласно спецификации, потому что он бессмыслен при наличии chunked передач
На скриншоте отладчика неясно, присутствует ли заголовок Transfer-Encoding
. Пожалуйста, дайте нам знать ...
При дальнейшем расследовании - похоже, что lynx не показывает все заголовки, возвращаемые при вводе lynx -head
. Он не показывает заголовок Transfer-Encoding
, критичный для этого обсуждения.
Вот доказательство расхождения с публично видимым веб-сайтом
Ξ▶ lynx -useragent='dummy' -source -head http://www.bbc.co.uk
HTTP/1.1 302 Found
Server: Apache
X-Cache-Action: PASS (non-cacheable)
X-Cache-Age: 0
Content-Type: text/html; charset=iso-8859-1
Date: Tue, 03 Apr 2012 13:33:06 GMT
Location: http://www.bbc.co.uk/mobile/
Connection: close
Ξ▶ wget -useragent='dummy' -S -X HEAD http://www.bbc.co.uk
--2012-04-03 14:33:22-- http://www.bbc.co.uk/
Resolving www.bbc.co.uk... 212.58.244.70
Connecting to www.bbc.co.uk|212.58.244.70|:80... connected.
HTTP request sent, awaiting response...
HTTP/1.1 200 OK
Server: Apache
Cache-Control: private, max-age=15
Etag: "7e0f292b2e5e4c33cac1bc033779813b"
Content-Type: text/html
Transfer-Encoding: chunked
Date: Tue, 03 Apr 2012 13:33:22 GMT
Connection: keep-alive
X-Cache-Action: MISS
X-Cache-Age: 0
X-LB-NoCache: true
Vary: Cookie
Поскольку я явно не в вашей сети, я не могу воспроизвести ваши точные обстоятельства, но, пожалуйста, подтвердите, что вы действительно не получаете заголовок Transfer-Encoding при прохождении через прокси.