hoo*_*oos 6 tomcat gzip transfer-encoding chunked-encoding
我在使用我的一个数据源服务时遇到了一些问题.正如它在HTTP响应头中所说,它在Apache-Coyote/1.1上运行.服务器使用Transfer-Encoding给出响应:chunked,这里是示例响应:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Date: Tue, 30 Mar 2010 06:13:52 GMT
Run Code Online (Sandbox Code Playgroud)
问题是当我请求服务器发送gzipped请求时,它经常发送不完整的响应.我收到回应,看到最后一块收到了,但是在解开后我看到回复是偏的.我从未在请求标头中关闭gzip这样的行为.
所以我的问题是:它是常见的tomcat问题吗?也许其中一个mod正在进行压缩?或者也许它可能是某种代理问题?我不知道tomcat的版本或者他们使用的是什么gzip mod,但随便问一下,我会试着询问我的服务提供商.
谢谢.
由于 gzip 压缩响应的内容长度是不可预测的,并且首先将其完全压缩到内存中,然后计算长度,然后从内存中流式传输 gzip 响应,因此可能会昂贵且缓慢,因此一般 Web 服务器将使用不带标头的方式以块的形式发送它们。Transfer-Encoding: chunked Content-Length
由于它是一个自行开发的 HTTP 客户端,因此听起来好像它无法正确处理分块请求。您必须确定Transfer-Encoding响应标头,如果它等于chunked,则必须将其解析为分块流。
您可以从上述 HTTP 规范链接和维基百科了解如何解析分块流。每个块由一个标头组成,该标头以十六进制表示块长度,然后是 CRLF,然后是实际块内容,然后是 CRLF。重复此操作,直到出现一个带有表示块长度的标头的块0。您需要分别解压这些块,然后将它们粘合在一起。
为了节省所有繁琐的编码工作(也可能是您自己开发的 HTTP 客户端的剩余工作),我强烈建议您查看Apache HttpComponents Client。
| 归档时间: |
|
| 查看次数: |
4800 次 |
| 最近记录: |