定义
分块编码就是把报文分割为若干大小已知的块,一次发送到接收端。
常见使用场景
长连接
发送时无法获取主体长度
其他传输场景
1、非长连接 即发送完数据后就断开连接
接收端读取到EOF(-1)即读取完毕
2、长连接
固定主体长度,通过响应头中的Content-Length决定是否读取结束。
块数据报文结构
Http响应
HTTP/1.1 200 OK <CR><LF>
Content-type: text/plain<CR><LF>
Transfer-encoding: chunked<CR><LF>
Trailer: Content-MD5<CR><LF>
<CR><LF>
第一块(十六进制标示的分块大小 27–>39)
27<CR><LF>
We hold these truths to be self-evident<CR><LF>
第二块(十六进制标示的分块大小 26–>38)
26<CR><LF>
,that all men are created equal,that<CR><LF>
最后一块(以0结尾)
0<CR><LF>
拖挂(如果在响应首部中有定义)
Content-MD5:ofj0a39889a4ug00fas9f3jf0jf<CR><LF>
拖挂可以包含附带的首部字段,他们的值在报文开始的时候可能是无法确定的(例如,必须要先生成主体结构)
定义 分块编码就是把报文分割为若干大小已知的块,一次发送到接收端。常见使用场景 长连接 发送时无法获取主体长度其他传输场景 1、非长连接 即发送完数据后就断开连接 接收端读取到EOF(-1)即读取完毕 2、长连接 固定主体长度,通过响应头中的Content-Length决定是否读取结束。
转载地址:
http
://zh.wikipedia.org/wiki/%E5%88%86%E5%9D%97%E4%BC%A0%E8%BE%93%E7%BC%96%E7%A0%81
分块
传输
编码
(
Chunked
transfer encoding)是超文本
传输
协议(
HTTP
)中的一种数据
传输
机制,允许
HTTP
由网页服务器发送给客户端应用(
通常是网页浏览器)的数据可以分成多个部分。
分块
传
HTTP
长连接响应正常包含报头Content-Length,如Content-Length:1024,用于表示本报文的长度。
当返回的数据量比较大时,如果等待生成完数据再
传输
,效率会比较低下。相比而言,服务器更希望边生成数据边
传输
,这时可以在响应头加上以下字段标识
分块
传输
Transfer-Encoding
:
chunked
此时响应头不再包含Content-Length,客户端将以
chunked
的...
一、背景:
持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界;而对于持续连接,这种方法显然不奏效。有时,尽管我已经发送完所有数据,但浏览器并不知道这一点,它无法得知这个打开的连接上是否还会有新数据进来,只能傻傻地等了。
用Content-len...
http
协议是超文本
传输
协议,所谓协议,就是指双方遵循的规范。
http
协议,就是浏览器和服务器之间进行“沟通”的一种规范。
学习
http
协议,主要需要了解
http
的请求和响应(当然,还有get、post等请求方式,状态码、URI、MIME等)
http
请求消息(浏览器丢给服务器的):
一个
http
请求代表客户端浏览器向服务器发送的数据。一个完整的
http
请求消息,包含一个请求行,若干个消...
分块
传输
编码
Http
有长连接和短连接两种方式;短连接即一次请求对应一次TCP连接的建立和销毁过程,而长连接是多个请求共用同一个连接这样可以节省大量连接建立时间提高通信效率。请求头里面的字段Connection:keep-alive字段就是告诉
HTTP
服务器响应结束后不要关闭连接,浏览器会将连接缓存起来,当在有限时效内有再次对相同服务器发送请求时则直接从缓存中取出连接进行通信。当然被缓存的连接如果空闲时间超过了设定值则会关闭连接。
当使用短连接的时,可以通过服务器端对连接的关闭来获得消息体的结束位置;但长连
用在win上用telnet测试发现连接可以长达10分钟保持不断,再次输入
http
请求仍然可以响应,实际上可不止10分钟,因为我只测试了10分钟,这种长连接会在某些情况下导致服务器问题。怎样强行中断连接?
在数据量大的时候也是以
Transfer-Encoding
:
chunked
传输
的,实际上下面的代码数据量并不大,w.Write([]byte("hehe"))却又不是
chunked
。 如果我们...