Проблемы с LWP при использовании HTTP/1.1: неправильный размер фрагмента, усеченные ответы
Я писал некоторые утилиты Perl для взаимодействия с некоторыми внутренними веб-сайтами моей компании. Некоторое время назад я столкнулся с периодической ошибкой при доступе к определенным страницам: "Неверный размер чанка в HTTP-ответе". Я отследил это сообщение до модуля Net::HTTP::Methods
, Я потратил немного времени, пытаясь определить причину ошибки, но безуспешно. Затем где-то я нашел предположение, что установка протокола моих HTTP-запросов на "HTTP/1.0" может помочь, и, к моему удивлению, это помогло. Как только я сделал это для всех моих запросов страниц, которые вызывали у меня проблемы, это было гладко.
Совсем недавно я писал код, который взаимодействует с нашим локальным сервером Bugzilla. Временная ошибка, когда HTTP-ответы усекаются где-то посередине страницы. Сначала я был озадачен, но потом вспомнил описанную выше проблему и попытался установить протокол на HTTP/1.0. Опять же, это сработало. Я пытался получить доступ к странице Bugzilla "Enter CR" сто раз. Используя HTTP/1.1 по умолчанию, я получил обрезание ответа шесть раз; с HTTP/1.0, ноль раз.
Кто-нибудь знает, что здесь может происходить? Я никогда не вижу в своем браузере усечения страницы, что говорит о том, что проблема в библиотеке LWP, но трудно поверить, что такая древняя и широко используемая библиотека может иметь такую явную ошибку. Я запускаю Ubuntu с современными модулями Perl, и ответы Bugzilla идентифицируют сервер как Apache, если это вообще помогает.
1 ответ
Из твоего описания действительно трудно понять, что происходит, но
- если вы используете HTTP/1.0, серверу не разрешено отправлять данные с
Transfer-Encoding: chunked
, так что это может объяснить, почему он работает с HTTP/1.0 - Ubuntu не предоставляет последнюю версию LWP, они предоставляют в основном только обновления той версии, которую они поставили изначально. И какая версия зависит от вашей версии Ubuntu. Вы можете проверить установленную версию с
perl -MLWP::UserAgent -e 'warn LWP::UserAgent->VERSION'
, Текущая версия 6.06. - Невозможно решить проблему, не получив больше информации. Необходимая информация - версия LWP. Захват пакета (tcpdump с реальным содержимым, т.е.
tcpdump -s0 -wfile ...
) неудачного соединения также было бы очень полезно увидеть данные, отправляемые сервером.