曾经在公司里的百科留下了一些文章,在地址栏index.php/后加上All,即"index.php/All"后出现的内容至这个时刻或许大多数都是我留下的文档。
别人有两次问过一些知识,现随自己时间安排把一些有用的通用技术文档贴到blog上,以下是一篇(字体大小请调浏览器):
在j2ee web结构里http header中的 Content-Length 或Transfer-Encoding:chunked
应由web容器层自动设置,不用在应用的servlet里做,因为应用的servlet返回后,还可能经过filter/mod_jk等很多层,
servlet自己是不知道确对的Content-Length,servlet或servlet上的框架只管向response的OutputStream write即可。
Content-Length 和 Transfer-Encoding:chunked是不会在header中同时存在的。
如果是普通地使用response的OutputStream,web容器可能会选择用Content-Length、Transfer-Encoding:chunked 任一方式返回前端。Content-Length会优先点。
如果servlet强硬地调用了OutputStream.flush(),web容器是不知道怎么返回Content-Length的,所以会用Transfer-Encoding:chunked方式返回。
如果servlet中设定了Content-Length,web容器就不用Transfer-Encoding:chunked方式。
如果servlet中设定了Transfer-Encoding:chunked,web容器会保留Transfer-Encoding:chunked,并撒手不管了。
对于一些页面渲染/装饰框架,在先识别了应该先发送的内容后,发送部分数据后,可能立刻调用flush(),可令前端显示页面快点。
如还有Content-Encoding:gzip,Transfer-Encoding是包在Content-Encoding:gzip的外层。从http协议先驱谨慎定的英文,或许就可以看出一些本意:Transfer是针对http header外的http body的,而Content是http body内的。
对于Transfer-Encoding:chunked的数据传到HttpClient,从HttpClient.getResponseBodyAsStream()里获得的数据是已经被拼接起来了的(因为使用者应该没这个奢好,自动解码比较人性化)。如果您提供给getResponseBodyAsStream().read()的存放区比原来chunk大,每次read到的可能会是原来的chunk大小。
分享到:
相关推荐
- `Transfer-Encoding: gzip, chunked`: 同时使用gzip压缩和分块传输。 ##### 2.2 数据压缩 数据压缩可以显著提高Web站点性能,减少带宽需求。 ###### 2.2.1 应用场景 数据压缩特别适用于文本、图片和视频等格式...
15. Transfer-Encoding: 响应传输的编码方式,如chunked。 16. Vary: 告诉缓存服务器如何根据请求头选择缓存资源。 17. WWW-Authenticate: 身份验证的挑战信息,用于401 Unauthorized响应。 以上是HTTP请求和响应头...
- **Transfer-Encoding**: 数据传输编码方式,例如`chunked`。 - **Upgrade**: 协议升级类型。 - **Via**: 消息经过的中间节点信息。 #### 2. 请求首部字段 (Request Headers) 请求首部字段主要包含客户端对服务器...
- **Content-Encoding**:响应内容的编码方式,如`gzip`或`deflate`。 - **Content-Length**:响应消息体的长度。 - **Last-Modified**:对象最后一次被修改的时间。 - **Location**:当资源被创建或移动时,服务器...
如`Cache-Control`用于控制缓存策略,`Connection`指示是否保持TCP连接,`Date`记录消息的创建时间,`Pragma`提供兼容旧版HTTP的功能,`Transfer-Encoding`用于标识数据传输的方式(如gzip压缩或chunked编码),`...