日期:2014-05-17  浏览次数:20765 次

http 头里没有content-length属性
公司服务器与手机客户端交互,客户端请求一个地址服务器发往一段XML数据,在用Fiddler查看http响应头的时候,有时候发现有content- length属性,有时候没有这个属性,取而代之的是Transfer-Encoding: chunked属性。由于客户端强制要求,服务器端必须返回content-length,否则,将导致客户端解析错误。
于是测试发现,当XML数据量小的时候,是有content-length属性的,而到达一个值时,就成了Tansfer-Encoding:chunked。 请问这种情况,该如何解决?不管XML数据有多大,服务器发往的XML数据在http头里始终有content-length属性!
服务器 xml 测试 手机 content-?length

------解决方案--------------------
Transfer-Encoding: chunked的意思是:一边读数据,一边发给客户端。不是一下传输。会带这个头信息。
Content-Length:则是,服务器内已经缓存了哪个说句,一下发送给客户端会带这个头信息。
------解决方案--------------------
用的什么服务器,怎么生成你的response的?
话说这本来是客户端的问题,他们没能正确的解析response,反过头来让服务器端不要用本来可以优化反应时间的方法
------解决方案--------------------
情况是这样的,服务端是动态生成的,你在xml数据很小的时候,没超过服务器的buffer大小的情况下

HTTP的header还没传输过来,能够把Content-Length传输过来。
当xml数据的大小超过buffer的情况下,服务器必须将HTTP Header和Entity(xml数据)flush到客户端,这个时候,entity大小仍然未知,所以没有Content-Length。

如果一定一定要这个Content-Length(就这点来说,我不太清楚为什么一定要)
可以在生成xml的时候,不是直接输出到响应,而是先输出到内存/临时文件之类,生成完毕,计算大小,这只Content-Length头,然后再将XML输出。
------解决方案--------------------
路过,打个酱油
------解决方案--------------------
写入文件,自己计算大小,在赋给Content-Length,这样应该可以了!