这里把HTTP的一次请求/响应活动定义为一个事务,事务就是用户定义的一系列操作。HTTP使用TCP传输消息。HTTP 1.0使用非持久连接(一次性连接),HTTP 1.1默认使用持久连接。
1.非持久连接和持久连接
采用非持久连接方法,每个TCP连接只能处理一个事务,传送一个对象,其过程如下。
1)建立TCP连接。
2)客户端发送HTTP请求消息。
3)服务器端生成响应消息,返回给客户端。
4)服务器端关闭连接,客户端解析返回的响应首部,显示页面。
采用持久连接方法,一个TCP连接中允许客户端同时发送多个请求消息而无须等待每个响应。持久连接分为非流水线和流水线两个版本。HTTP 1.1的默认模式是使用流水线的持久连接。对于非流水线版本,客户端在收到响应之后才能发出新的请求。对于流水线版本,客户端每碰到一个引用就立刻发出请求,例如,整个Web页面以及页面上的引用对象(图片、视频等)可以连续通过一个TCP连接发送。HTTP服务器在某个连接闲置一段时间后会主动关闭连接。
2.网页浏览的连接过程
假设用浏览器浏览一个网页,该网页文件由基本的HTML和5个GIF图片构成,该网页文件的URI为http://mynankai.com/example.html。在非持久连接情况下,客户端浏览器与服务器之间的交互过程如下。
1)客户端初始化一个与服务器的TCP连接,服务器使用默认的端口80监听来自客户端的连接建立请求。
2)客户端发出一个HTTP请求消息,请求行的URI为http://mynankai.com/example.html。
3)服务器接收到这个请求消息,从服务器的硬盘或者内存中读取出文件example.html,向客户端发送包含该文件的响应消息。(www.daowen.com)
4)服务器通知TCP层关闭这个TCP连接,TCP层并不立即关闭这个连接,而是等客户端收到刚才那个响应消息后才会真正终止这个连接。
5)客户端接收这个响应消息,发送关闭TCP连接请求,随后终止连接。客户端所收到的消息中封装了客户端所请求的HTML文件,客户端从缓存中取出这个文件,进行分析后发现文件中还有5个GIF文件指针。
6)对每个GIF文件指针向服务器发送请求信息,重复步骤1)~4)。
7)待所有的GIF文件请求完成,客户端进行页面恢复。
大多数浏览器默认可以打开5~10个并行TCP连接,每个连接处理一个请求/响应事务。
3.HTTP连接实例
下面以获取最简单的Web页面为例,分析实际网络环境下的HTTP交互过程。测试的页面文件为test.html,位于实验环境中的http://mynankai.com/test/目录下。该网页文件包含一个图片对象引用tu.gif,其中tu.gif也位于该服务器的test文件夹下。网页的源代码如下,就是响应消息的实体主体。
利用Wireshark抓包软件,抓取有关HTTP的协议消息,结果如下。
从该交互流程可以看出传输HTML文件和tu.gif对象,只建立了一个TCP连接,因此为持久连接。下面是对部分HTTP消息的各类参数和取值的分析。
以36号报文为例,从字段GET(GET是请求行的方法字段)看出,这是一个HTTP请求消息,具体内容如下。
37号报文的第一行是状态行,这是一个HTTP响应消息,具体内容如下。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。