Я занимаюсь разработкой веб-приложения на 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, и я не могу понять, почему Кто-нибудь может мне помочь с этим или указать мне правильное направление?