HTTP长连接 及 数据分块

来自how tomcat works第四章

 

http长连接( persistent connection )是http1.1中新增的特性。

在此之前,如果浏览器向服务器请求资源,服务器在发送该资源后就将连接关闭。这样客户端需要使用不同的连接下载页面引用的其他资源,多余的连接需要耗费资源,是访问变慢。

所以在HTTP1.1中引入了persistent connection,当页面下载的时候,服务器并不直接关闭连接,而是等待web客户端请求页面引用的其他资源,使用同一个连接来完成传输。

persistent connection是http1.1的默认连接方式。

浏览器也可以在http request header中使用connection:keep-alive来显示指明。

 

数据分块

使用长连接的结果是,服务器可以使用同一个连接以字节流的方式发送不同的资源,客户端也可以发送多个请求。

数据发送方必须为每个请求或响应发送数据长度,接收方以此来决定如何解析收到的数据。

但通常,发送方在发送数据时,并不知道将要发送多少数据,只是在待发送数据的开始一些字节可用时,就开始发送。

这时,http header中的content-length字段不可用。

所以,需要有一种方式来告诉接收方如何解析收到的字节流。

 

HTTP1.1使用一个特别的头部transfer-encoding来表示有多少以块形式的字节流将会被发送。对每块来说,在数据之前,长度(十六进 制)后面接着CR/LF将被发送。整个事务通过一个零长度的块来标识。假设你想用2个块发送以下38个字节,第一个长度是29,第二个长度是9。

I'm as helpless as a kitten up a tree.

    你将这样发送:

1D/r/n

I'm as helpless as a kitten u

9/r/n

p a tree.

0/r/n

    1D,是29的十六进制,指示第一块由29个字节组成。0/r/n标识这个事务的结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值