Вопрос

Я проверяю некоторые проблемы с одним из моих услуг по источникам данных. Как говорится в заголовках отклика HTTP, он работает на Apache-Coyote / 1.1. Сервер дает ответы с кодировкой Transferning: Colaled, здесь пример ответа:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Date: Tue, 30 Mar 2010 06:13:52 GMT

И проблема заключается в том, когда я запрашиваю сервер, чтобы отправить запрос Gziped, он часто отправляет не полный ответ. Я получаю ответ, увидим, что последний кусок получил, но затем после безгласимости я вижу, что ответ является частичным. Я никогда не видел такого поведения с gzip выключил в заголовки запроса.

Итак, мой вопрос: это общая проблема Tomcat? Может быть, один из него мода, который делает сжатие? Или, может быть, это, может быть, какой-то проблема прокси? Я не могу рассказать о версиях Tomcat или какой GZIP мод они используют, но не стесняйтесь спрашивать, попробую спросить моего поставщика услуг.

Спасибо.

Это было полезно?

Решение

Поскольку длина содержания ответа GZaked непредсказуема, и потенциально дорого и медленно сжимается на память сначала с компрессорами, затем рассчитать длину, а затем поток затемненного отклика от памяти, средний веб-сервер отправит их в куски Transfer-Encoding: chunked без а. Content-Length заголовок

Поскольку это доморощенный клиент HTTP, звучит так, как будто он правильно обрабатывает сложные запросы. Вы должны определить Transfer-Encoding заголовок ответа и если это равна chunked, Тогда вы должны разбирать его как сложный поток.

Вы можете узнать у вышеупомянутых ссылок HTTP-спецификации и от Википедия Как разбирать повторный поток. Каждый чан состоит из заголовка, обозначающего длину кусочки в шестнадцатеричном, затем CRLF, затем фактический контент куска, затем CRLF. Это повторяется до куска с заголовком, обозначающим длину кусочки 0. Отказ Вам нужно сгладить куски отдельно, а затем склеить их вместе.

Чтобы сохранить всю утомительную кодирующую работу (вероятно, также для остатка вашего доморощенного HTTP-клиента), я настоятельно рекомендую взглянуть на Apache httpComponents клиент.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top