`
lokki
  • 浏览: 59943 次
  • 来自: ...
社区版块
存档分类
最新评论

Response与Transfer-Encoding:chunked、Content-Length、Content-Encoding:gzip

    博客分类:
  • java
阅读更多
曾经在公司里的百科留下了一些文章,在地址栏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大小。
分享到:
评论

相关推荐

    boost之http请求及chunked解析

    3. 异步读取响应头,检查“Transfer-Encoding”字段确认是否使用了chunked编码。 4. 如果使用了chunked编码,开始异步读取每个chunk: - 读取十六进制的chunk大小。 - 读取chunk数据,直到达到指定的字节数。 - ...

    HTTP chunked方式传输的C语言解析示例

    1. **读取头部信息**:首先,你需要解析HTTP响应头,寻找`Transfer-Encoding: chunked`字段,这表明后续的数据将以chunked编码的形式传输。同时,也要注意`Content-Type`头,因为它定义了数据的类型。 2. **理解...

    关于PHP 如何用 curl 读取 HTTP chunked 数据

    在HTTP协议中,`Transfer-Encoding: chunked`是一种用于分块传输编码的方式,常用于服务器无法预先知道响应体总长度的情况。这种方式将响应体分成多个块(chunks),每一块都有一个大小标识,最后以一个零长度的块...

    http协议进阶之Transfer-Encoding和HttpCore实现详解

    如果想知道Transfer-Encoding和Content-Length的关系,只要反过来问下自己,为什么Transfer-Encoding会有identity和chunked两种,各在什么上下文情景中要用到。 Chunked格式是Transfer-Encoding的一种实现方式,...

    spring-mvc-msgpack-sample:Spring MVC + MessagePack 示例

    Spring MVC + MessagePack 示例 跑步 $ mvn spring-boot:run $ curl -v "localhost:8080/calc?... Transfer-Encoding: chunked < Date: Fri, 16 Jan 2015 15:00:26 GMT < leftd right , answer

    P21_创建Company资源POST_P20_HTTP方法的安全性与幂等性_Routine.Api2020_2_7.rar

    Transfer-Encoding:chunked Location:http://localhost:5000/api/companies/61156544-d8bd-4787-a79a-a484dd9a382c 在浏览器中输入http://localhost:5000/api/companies/61156544-d8bd-4787-a79a-a484dd9a382c ...

    HTTP大文件传输方案

    - `Transfer-Encoding: gzip, chunked`: 同时使用gzip压缩和分块传输。 ##### 2.2 数据压缩 数据压缩可以显著提高Web站点性能,减少带宽需求。 ###### 2.2.1 应用场景 数据压缩特别适用于文本、图片和视频等格式...

    http响应头首部Content-Length.rar_HTTP_saynvx

    例如,动态生成的内容大小在响应生成之前未知,或者服务器使用"Transfer-Encoding: chunked"编码。这时,服务器会省略"Content-Length",转而使用分块编码来传输数据。 在实际网络开发中,理解和正确使用"Content-...

    weblogic不兼容客户端的解决办法

    解决方法一:关闭 Transfer-encoding: chunked WebLogic 服务器提供了一个配置选项,用于关闭 chunked 编码的传输方式。这可以通过 WLST(WebLogic Scripting Tool)工具来实现。具体步骤如下: 1. 启动 WLST 工具...

    django-eventstream:Django的服务器发送事件

    Django EventStream EventStream为您的Django应用程序提供API终结点,...Transfer-Encoding: chunked Connection: Transfer-Encoding Content-Type: text/event-stream event: message data: {"foo": "bar"} event:

    HTTP常见请求和响应头说明1

    15. Transfer-Encoding: 响应传输的编码方式,如chunked。 16. Vary: 告诉缓存服务器如何根据请求头选择缓存资源。 17. WWW-Authenticate: 身份验证的挑战信息,用于401 Unauthorized响应。 以上是HTTP请求和响应头...

    CefSharp.rar

    //网页 Transfer-Encoding: chunked,普通采集程序返回412错误 //采用 Chrome WebBrowser模式返回Html //需nuget 下载CefSharp.WinForms包

    serverless-testing-examples:无服务器测试示例

    无服务器测试示例 该存储库说明了一些测试使用构建的应用程序的策略。 我已经在“媒介:上发表了有关此的文章 设置 安装Node 8.10(AWS Lambda支持的最新运行时)...Transfer-Encoding: chunked access-control-allow

    HTTP服务器返回的chunk数据包

    HTTP chunk数据包 服务器端发送的数据格式有俩类,我称之为按长度返回、按块返回这俩类。一类是在返回头中有Content-Length: 258,258标识该正文内容长度;还有一类是返回Transfer-Encoding: chunked。

    neustar-clouds-proxy

    如何建造 首先,需要构建和 。 之后,只需运行 mvn clean install ...Transfer-Encoding: chunked Date: Fri, 19 Sep 2014 15:37:06 GMT { "id" : 2, "time_started" : "2014-09-19T15:36:54.478

    Burpsuite插件之chunked-coding-converter使用方法1

    5. 在Burp Suite的历史记录中找到相关的请求,检查是否包含`Transfer-Encoding: chunked`的头部。如果有,说明chunked编码已成功应用。 6. 分析响应,确认WAF是否被成功绕过。 参考项目主页和相关文章,可以深入...

    WEB_文件的上传与下载思维导图总结及所用的包

    - 长连接:使用`Transfer-Encoding: chunked`,适合大文件传输。 - Web框架支持:Flask/Django等提供设置响应头和返回文件流的方法。 4. 所用的包: - Flask-Uploads/WTForms-FileField:Flask中的文件上传处理...

    Http协议中关于Content-Length的解读.docx

    如果实体长度和传输长度不相等(例如设置了Transfer-Encoding),那么不能设置Content-Length。 4. 通过服务器关闭连接可以确定消息的传输长度,这种情况主要对应于短连接,即非keep-alive模式。 5. HTTP/1.1必须...

    php下HTTP Response中的Chunked编码实现方法

    进行Chunked编码传输的HTTP Response会在消息头部设置: Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成,由一个标明长度为0的chunk标示结束。每个...

Global site tag (gtag.js) - Google Analytics