Если вы принимаете gzipped-контент, сервер может отправлять gzip-контент. (На самом деле, некоторые багги-серверы отправляют gzip-контент, даже если вы не говорите, что согласны с ним!)
Обратите внимание, что в возвращенных заголовках он будет включать Content-Encoding: gzip
или, может быть, deflate вместо gzip. Это говорит о кодировке. Если это gzipped, вам нужно распаковать его с помощью библиотеки, например, zlib
.
Еще одна вещь, которую вы можете увидеть в ответах на запросы HTTP 1.1, заключается в том, что соединение не обязательно будет закрыто, когда оно будет завершено, и вы можете получить Transfer-Encoding: chunked
, который будет отформатировать тело по-разному. Чанкированные ответы - это серия кусков с шестнадцатеричной длиной, а затем содержимое, заканчивающееся пустым куском. Отрицательные ответы, напротив, отправляются с заголовком , который говорит вам, сколько стоит ожидать. Длина содержимого - это длина отправляемых данных, которая будет меньше, если данные будут сжаты.
Если вы не применяете декомпрессию, не отправляйте Accept-Encoding
. Выделенные ответы - это то, что вам, вероятно, придется реализовать, поскольку это распространено в http 1.1, и если вы просто используете http 1.0, вы не сможете использовать важный заголовок хоста.
Сервер отправляет обратно содержимое gzipped. Вам нужно g-разархивировать его, чтобы он был доступен для чтения. – AVP
Спасибо за ответ. Но, как я сказал, поле Content-Length в заголовке ответа для браузера отличается от моего. Например, браузер получает «Content-Length: 17000», но я получаю «Content-Length: 4000». Как это возможно? – user2808671
Используйте Fiddler для захвата и сравнения отправленных запросов и ответов и отправки браузера. –