Проблемы с 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 ...) неудачного соединения также было бы очень полезно увидеть данные, отправляемые сервером.
Другие вопросы по тегам