http - 使用 GZIP 压缩的 HTTP 请求内容被截断(仅在浏览器中)

标签 http browser haskell gzip

我正在使用 Yesod Web 框架在 Haskell 中开发一个 Web 应用程序(尽管我认为这个问题与 Haskell 和/或 Yesod 无关,我只是为了完整性而提到这一点)。我正在使用 Warp 服务器来处理请求,并且在使用 Chromium/Firefox(但不是 Opera)访问涉及 GZIP 压缩的网站时遇到了一个奇怪的问题。

我设置了一个仅返回 Hello world! 的网站。

  • 如果我使用 netcat 获取网站并将 Accept-Encoding 设置为 gzip,我会得到正确的结果。这意味着我可以解压缩收到的数据,并且它会正确解压缩为 Hello world!
  • 如果我想使用 Chromium 或 Firefox 查看该网站,我得到的只是 H (其余内容被截断)。我已验证服务器是否正确设置了 Content-LengthContent-Encoding header 。

这是我用来发送 Hello world! 字符串的代码:

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

我使用标准 run 函数调用 Warp:

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 或非 HTTP 流量。这个包对我来说看起来很好很硬。

由于某种原因,它在 Chromium 或 Firefox 中不起作用,我不明白为什么。有人可以帮助我解决这个问题或为我指出正确的方向吗?

最佳答案

最可能的原因是内容长度设置不正确,即服务器报告原始内容的大小而不是压缩数据的大小。 正如 sclv 上面所述,这一定是 Web 服务器中的错误。

关于http - 使用 GZIP 压缩的 HTTP 请求内容被截断(仅在浏览器中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5127327/

相关文章:

http - 将 URL 字符串映射到 ABAP 中的 RFC 目标的标准方法?

php - 如何调试仅在(谷歌)机器人请求页面时发生的问题?

html - 如何处理 iframe 的 popstate 事件或禁用 iframe 上浏览器的后退按钮?

haskell - 模式匹配元组不是完全惰性的吗?

algorithm - 如何确定 Haskell 中 "repeating"函数假定的值的数量?

json - Angular 4 404错误-使用http get方法调用json文件angular 4 webpack

http - 未在默认网站下创建 MSMQ 虚拟目录

javascript - 如果元素的位置是绝对的,浏览器的渲染是否回流?

javascript - 为什么这个微任务在事件循环中先于宏任务执行?

haskell - 如何在 Haskell 中访问 Graphics.Gloss 事件类型?