HTTP持久连接的方法
本篇内容主要讲解“HTTP持久连接的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTTP持久连接的方法”吧!
创新互联建站于2013年开始,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元朝阳做网站,已为上家服务,为朝阳各地企业和个人服务,联系电话:13518219792
我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
在HTTP1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP请求头中添加一个字段Connection:Keep-Alive,当服务器收到附带有Connection:Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。
在HTTP1.1版本中,默认情况下所有连接都被保持,如果加入"Connection:close"才关闭。目前大部分浏览器都使用HTTP1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep-Alive连接就看服务器设置情况。
由于HTTP1.0没有官方的Keep-Alive规范,并且也已经基本被淘汰,以下讨论均是针对HTTP1.1标准中的Keep-Alive展开的。
注意:
HTTPKeep-Alive简单说就是保持当前的TCP连接,避免了重新建立连接。
HTTP长连接不可能一直保持,例如Keep-Alive:timeout=5,max=100,表示这个TCP通道可以保持5秒,max=100,表示这个长连接最多接收100次请求就断开。
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。另外,Keep-Alive也不能保证客户端和服务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持连接特性,否则会有意想不到的后果。
使用持久连接之后,客户端、服务端怎么知道本次传输结束呢?两部分:1.判断传输数据是否达到了Content-Length指示的大小;2.动态生成的文件没有Content-Length,它是分块传输(chunked),这时候就要根据chunked编码来判断,chunked编码的数据在最后有一个空chunked块,表明本次传输数据结束,详见这里。什么是chunked分块传输呢?下面我们就来介绍一下。
Transfer-Encoding是一个用来标示HTTP报文传输格式的头部值。尽管这个取值理论上可以有很多,但是当前的HTTP规范里实际上只定义了一种传输取值——chunked。
如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。
每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF(回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。
最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。消息最后以CRLF结尾。
一个示例响应如下:
HTTP/1.1 200 OK Content-Type: text/plain Transfer-Encoding: chunked 25 This is the data in the first chunk 1A and this is the second one 0
注意:
chunked和multipart两个名词在意义上有类似的地方,不过在HTTP协议当中这两个概念则不是一个类别的。multipart是一种Content-Type,标示HTTP报文内容的类型,而chunked是一种传输格式,标示报头将以何种方式进行传输。
chunked传输不能事先知道内容的长度,只能靠最后的空chunk块来判断,因此对于下载请求来说,是没有办法实现进度的。在浏览器和下载工具中,偶尔我们也会看到有些文件是看不到下载进度的,即采用chunked方式进行下载。
chunked的优势在于,服务器端可以边生成内容边发送,无需事先生成全部的内容。HTTP/2不支持Transfer-Encoding:chunked,因为HTTP/2有自己的streaming传输方式(Source:MDN-Transfer-Encoding)。
到此,相信大家对“HTTP持久连接的方法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
网页题目:HTTP持久连接的方法
网页URL:http://myzitong.com/article/pdedjd.html