Контент обрезается по HTTP-запросу со сжатием GZIP (только в браузере) - PullRequest
2 голосов
/ 26 февраля 2011

Я занимаюсь разработкой веб-приложения на Haskell с использованием веб-платформы Yesod (хотя я думаю, что эта проблема не связана с Haskell и / или Yesod, я просто упомяну это для полноты). Я использую сервер Warp, чтобы обслуживать запрос, и у меня возникает странная проблема при доступе к сайтам с использованием Chromium / Firefox (но не Opera) с использованием сжатия GZIP.

У меня настроен сайт, который возвращает только Hello world!.

  • Если я получу сайт, используя netcat, и я установлю Accept-Encoding на gzip, я получу правильный результат. Это означает, что я могу распаковать полученные данные и правильно распаковать их до Hello world!.
  • Если я хочу посмотреть сайт с помощью Chromium или Firefox, все, что я получаю, это H (остальная часть контента обрезается). Я проверил, что заголовки Content-Length и Content-Encoding установлены сервером правильно.

Вот код, который я использую для отправки строки Hello world!:

getRootR = return $ RepPlain $ toContent ("Hello world!" :: ByteString)

Я вызываю Warp со стандартной функцией run:

withWebApp $ Warp.run 3000

Это запрос, который я отправляю с netcat, с которым он работает:

GET / HTTP/1.0
Accept-Encoding: gzip,    

И результат распаковки вывода netcat:

$ nc --idle-timeout=1 localhost 3000 < test | tail -n1 | gunzip
nc: using stream socket
Hello world!

И еще одна вещь: если я перехватываю трафик с помощью Wireshark, пакеты отображаются как HTTP-трафик, но Wireshark сообщает мне (text/plain)Continuation or non-HTTP traffic. Пакет выглядит хорошо для меня жестко.

По какой-то причине, это просто не будет работать в Chromium или Firefox, и я не могу понять, почему Кто-нибудь может мне помочь с этим или указать мне правильное направление?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2011

Скорее всего, причина в том, что Content-Length не установлен должным образом, то есть сервер сообщает размер исходного содержимого, а не размер сжатых данных. Как указано выше в sclv, это должно быть ошибкой на веб-сервере.

1 голос
/ 27 февраля 2011

Я могу подтвердить, что это ошибка в wai-extra.Кажется, что правильное действие должно заключаться в удалении заголовков Content-Length при использовании gzip, чтобы Warp автоматически обслуживал кусочную кодировку передачи.Надеюсь, сегодня я выпущу патч позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...