http返回头中content-length与Transfer-Encoding: chunked的问题释疑

先说说问题出现的背景:
       
公司服务器与手机客户端交互,客户端请求一个动态生成的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",是不管用的,我测试的情况是这样。

http返回头中content-length与Transfer-Encoding: chunked的问题释疑,布布扣,bubuko.com

时间: 2024-10-12 19:42:46

http返回头中content-length与Transfer-Encoding: chunked的问题释疑的相关文章

The maximum string content length quota (8192) has been exceeded while reading XML data

原文:The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们WCF服务发布后,我们要确保服务端以及客户端的配置文件允许合适大小的传输设置.笔者在发布WCF服务时,服务端的绑定未做传输大小的设置(采用了默认,maxStringContentLength默认大小为8192),而我们在传输序列化的数据时,大小超过了这个限制. 读取 XML 数据时,超出最大字符串内容

WCF常见异常-The maximum string content length quota (8192) has been exceeded while reading XML data

异常信息:The maximum string content length quota (8192) has been exceeded while reading XML data 问题:调用第三方的WCF服务,产生上述异常信息 分析: 在公布WCF host端时,要确保host端以及客户端的设置允许一定大小的数据传输. 如果未设置传输大小,maxStringContentLength默认大小为8192. 1)如果第三方服务未设置maxStringContentLength或者设置的maxS

string 中的 length函数 和size函数 返回值问题

string 中的 length函数 和 size函数 的返回值  (  还有 char [ ] 中 测量字符串的  strlen 函数 ) 应该是 unsigned int 类型的 不可以 和 -1 比较. 应尽量避免 unsigned int 类型 和 int类型 数据 的比较 .当unsigned int 类型 和 int类型 数据 比较 时 ,会 把int 类型 转换 为 unsigned int类型 .如果 int是负数 ,转换 为 unsigned int 会是 一个 很大 的正整数

String构造器中originalValue.length>size 发生的情况

建立map的方式(其实用的是json实现方式) var a = {}; a["key1"] = "value1"; a["key2"] = "value2"; 既然是个map就有检索某个键是否存在的方法,这样写 if ("key1" in a) { // something } else { // something else } 简单的一句话声明map里面的key和value的方式: var a = {'

[C++模板]Loki中的Length和TypeAt使用C++11特性改进

C++模板变参实现Loki中的Length和TypeAt 一,原Loki中的Length和TypeAt模拟实现如下 1,模板文件 /**********************************                                                              * * Author : szyu * * Date : 2017.1.7 * **************************************/ #ifndef 

Java中的length字段和length()方法

本文主要讲述Java中的length字段和length()方法,有需要的朋友可以参考下,更多Java教程知识,请登陆疯狂软件教育官网. 首先,你能快速回答下面的问题吗? 如果没有IDE(集成开发环境)的自动补全功能,如何获取数组和字符串的长度? 我问了不同等级的开发者(初级和中级)同样的问题,他们很难准确而确信地给出答案.虽然IDE提供的代码自动补全功能十分方便,但也带来了“表面理解(surface understanding)”的问题.在本文中,我会解释一些和Java数组的关键概念. 上述问题

debug.js中的length的错误

记得昨天报了一个错,debug.js文件中的length未定义.前台不定位代码,后天也不报错,而debug.js是框架封装的文件,不是自己写的,无从得知是哪里的问题,而项目也已经重新启动过,无法撤销.所以报错不出现自己代码,也无法撤回,不知何时出现的操作. 后来我degugger.看从哪里开始报错,通过页面加载,确定哪个模块,最终发现,页面还没进来就开始报错,?页面没进来就报错,那就不是代码错误. 配置文件也没改啊,,最后我的目光聚焦到了index.jsp中的title下面的    <mx:Fr

Java中的length和length()

首先,你能快速回答下面的问题吗? 不借助IDE的代码自动完成,如何获取一个数组的长度?如何获取一个字符串的长度? 我曾问过不同层次的开发者这个问题.他们不能正确的或者自信的回答这个问题.当IDE提供了便捷的代码完成功能,也带来了对问题理解仅停留在表面的问题.在这里,我会解释一些关于数组的关键概念. 答案: int[] arr = new int[3]; System.out.println(arr.length);//length for array String str = "abc"

[ css 伪对象添加 content ] css中content内容生成技术以及应用问题讲解及实例演示

小小的提醒 在进入正题之前,我要做一回啰嗦的老女人,讲点可有可无无伤大雅的提醒: 仅在CSS可用的现代浏览器下起作用 不可通过DOM使用,它只是纯粹的表象 最基本的 – 生成内容 content使用如下: h2:before { content: "我是额外文字!"; } 此段样式的作用是在每个h2标签的前面添加文字“我是额外文字”.您可以狠狠地点击这里:content最基本使用Demo content属性的值除了使用文本值外,还可以使用标签的一些属性值,方法是attr(),参见如下代