先说说问题出现的背景:
        公司服务器与手机客户端交互,客户端请求一个动态生成的XML文件,在用firebug查看http响应头的时候,有时候发现有content-length属性,有时候没有这个属性,取而代之的是Transfer-Encoding: chunked属性。由于客户端强制要求,服务器端必须返回content-length,否则,客户端将不予解析。于是测试发现,当XML文件很小的时候,是有content-length属性的,到达一个值时,就成了Tansfer-Encoding:chunked。

再引用一段话,解释一下Transfer-Encoding:chunked这个属性的意义:
        通常,HTTP协议中使用Content-Length这个头来告知数据的长度。然后,在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。
    如果要一边产生数据,一边发给客户端,WEB 服务器就需要使用"Transfer-Encoding: chunked"这样的方式来代替Content-Length。

最后说说自己的理解与解决方式:
        通过种种迹象,我得出的结论是,JSP页面有一个缓存大小,当输出数据的长度没有到达这个大小的时候,服务器是知道总的数据长度的,所以服务器会输出content-length头。但如果超过缓存大小,那么,缓存一满,服务器就得输出内容给客户端,所以,不能判断整个内容的大小,于是返回Transfer-Encoding:chunked这个头信息。
        解决方式是:在JSP页面中加入代码,response.setBufferSize(402800);40820即400K,其实只要这个值大于你返回的数据的大小就行了。具体设置多少,你可以根据实际情况,合理配置。另外说一句,在page指令中加入buffer="400kb",是不管用的,我测试的情况是这样。

最新文章

  1. SpringMVC 参数注入
  2. Hibernate POJO在序列化(JSON)时遇到的若干问题
  3. ASP.NET MVC的过滤器
  4. java基础2.0:Object、Class、克隆、异常编程
  5. TCP/IP详解 笔记十二
  6. 1.1---判断字符串是否所有字符都不相同(CC150)
  7. php常量的声明和使用
  8. atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException
  9. Java原来如此-遍历Map的三种方法
  10. Git 代码管理常用命令
  11. win7-opengl开发环境的搭建
  12. 【ACM/ICPC2013】POJ基础图论题简析(一)
  13. Myapplication的作用与理解
  14. 《JS权威指南学习总结--8.8.4 记忆函数》
  15. python机器学习实战(三)
  16. 【C#复习总结】匿名类型由来
  17. SQL SERVER数据库的简单介绍
  18. Python常见的问题
  19. SpringBoot使用Druid数据库加密链接完整方案
  20. SQL Server 并发死锁解决案例备忘

热门文章

  1. (八十一)c#Winform自定义控件-时间轴-HZHControls
  2. C lang:Pointer and Array
  3. 【Gradle】Android Gradle 多渠道构建
  4. canvas在vue中的应用
  5. 如何实现用户的历史记录功能(最多n条)
  6. Angular框架入门
  7. Python selenium登录163邮箱示例
  8. 关于Git和GitHub的一些知识
  9. 给OPi Zero Plus添加USB启动功能
  10. django.db.utils.OperationalError: (1093, "You can't specify target table 'xxx' for update in FROM clause")