chegg网站_chunked

chegg网站_chunked服务端给浏览器发送报文时,必须告诉浏览器报文的大小,这样浏览器可以根据报文大小来判断报文的完整性以及在长连接中确定报文的截尾。但是很多服务器的报文是动态创建的,在发送之前是无法确定其大小的。服务器只有等待内容全部创建后,计算出主体的大小,才能响应客户端的请求,这样的处理方法大大延迟了响应。传输编码中的分块编码为这种困难提供了解决方案,服务器可以逐块发送主体,并说明每块的大小就可以了。HTTP协议中

服务端给浏览器发送报文时,必须告诉浏览器报文的大小,这样浏览器可以根据报文大小来判断报文的完整性以及在长连接中确定报文的截尾。但是很多服务器的报文是动态创建的,在发送之前是无法确定其大小的。服务器只有等待内容全部创建后,计算出主体的大小,才能响应客户端的请求,这样的处理方法大大延迟了响应。传输编码中的分块编码为这种困难提供了解决方案,服务器可以逐块发送主体,并说明每块的大小就可以了。HTTP协议中只定义了两个首部来描述传输编码:

  • Transfer-Encoding响应首部。告诉浏览器传输编码方式,一般为分块编码。 
  • TE请求首部。告诉服务器自己可以接受的编码方式。

HTTP分块编码的响应报文结构大概是这样的:以HTTP响应首部块开始,随后是一系列的分块。每个分块包含一个长度值和该分块的数据,长度值是十六进制形式并将CRLF与数据分隔开。分块中数据的大小以字节计算,不包括长度值和数据之间的CRLF序列。最后是长度为0的结束块,表示分块编码传输结束。

假设请求的文件是jpeg文件,所以在收到数据之后,只考虑跳过响应报文的HEADER部分加\r\n\r\n四个字节后,直接把剩余的数据写到文件中。测试过程中,发现有相当一部分图片不能正常打开,总是比服务器多了几个字节;打印输出响应报文后发现头中并没有我们通常所见的Content-Length域来指明报文体的长度,反而是多了Transfer – Encoding域。上网查阅http1.1协议后,发现通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。协议中关于这个字段的具体解释如下:

一般HTTP通信时会使用是Content-Length头信息来指定body信息大小,但是有时候无法确定信息大小,就要使用trunked编码动态的提供body内容的长度。进行Chunked编码传输的HTTP数据要在消息头部设置:Transfer-Encoding: chunked表示Content Body将用chunked编码传输内容。Chunked编码一般使用若干个chunk串连而成,最后由一个标明长度为0的chunk标示结束。每个chunk分为头部和正文两部分,头部内容指定下一段正文的字符总数(非零开头的十六进制的数字)和数量单位(一般不写,表示字节).正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。在最后一个长度为0的chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。

上述解释过于官方,简而言之,chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度,其具体格式如下:

chegg网站_chunked

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207461.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poweroff 命令_powercfg -h off 函数出了问题

    poweroff 命令_powercfg -h off 函数出了问题2019-02-17基础命令学习目录首页原文链接:https://www.cnblogs.com/Baron-Lu/p/6951297.html基础命令学习目录首页原文链接:https://w

    2022年8月1日
  • win10更新失败0x80240fff_win10系统更新出现错误代码

    win10更新失败0x80240fff_win10系统更新出现错误代码Windows无法更新,无法启用功能,0x8000FFFF错误,系统存在损坏文件,用管理员打开命令行(或powershell)运行sfc/scannow检查并修复。

    2022年9月25日
  • vs2012 MinGW 编译ffmeg 引用外部库libx264,librtmp[通俗易懂]

    vs2012 MinGW 编译ffmeg 引用外部库libx264,librtmp[通俗易懂]VS2012如何编译ffmpeg前面已经有文章讲过,本来主要讲述如何引用外部库libx264,librtmp,ffmpeg版本是3.0.2。1.下载x264源文件并编译源码地址是http://www.videolan.org/developers/x264.html。l…

    2022年9月17日
  • C语言浮点数表示法 / float表示法(浮点数表示方法)

    C语言浮点数表示法 / float表示法(浮点数表示方法)一直不太清楚C语言中浮点数是怎么表示的,这篇文章能回答我的问题?浮点表示法float共计32位(4字节)由最高到最低位分别是第31、30、29、……、0位31位是符号位,1表示该数为负,0反之30~23位,一共8位是指数位(-128~127)22~0位,一共23位是尾数位后更。。…

    2022年6月28日
  • validation怎么用_什么是确认validation

    validation怎么用_什么是确认validation引入文件环境在jQuery下,所有先要引入jQuery1<%–校验样式–%>2<linkrel=”stylesheet”href=”<%=basePath%>css/validationEngine.jquery.css”>3<%–校验及自定义规则规则–%>4<scripttype=”t…

    2022年10月4日
  • Java Spring框架 (底层原理+入门)

    Java Spring框架 (底层原理+入门)JavaSpring框架Spring一、Spring的概述定义:Spring框架是一个开放源代码的J2EE应用程序框架,由RodJohnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweightcontainer)。Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及WebMVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与Swing

    2022年7月7日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号