http,全称hyper text transfer protocol,中文名为超文本传输协议。
http是一种用于从web服务器端传送超文本标记语言(html-hyper text markup language)文件到客户端浏览器的传送协议,它是internet上最常见的协议之一。我们通常访问的网页,就是通过http协议进行传送的。
http用名字标识某一资源时(即在浏览器中输入网址),遵循统一资源名(urn-uniform resource name)的规则,当前网络中最常用的urn是统一资源定位符(url-uniform resource locator),当客户端在浏览器中输入一个url或单击一个url超链接时,就确定了要访问的地址。
以http://www.colasoft.com.cn/resource/index.html为例介绍url的组成:
http使用tcp协议的80端口进行可靠数据传输,一个http会话由客户端开始发起,包括以下步骤:
宏观工作方式:
图1 客户端与web服务器直接连接
图2 客户端通过中介服务器与web服务器连接
图3 客户端与中介服务器通讯过程
内部操作过程:
如图4所示,它分为四个步骤:建立连接、发出请求信息、发出响应信息、关闭连接。
图4 http协议内部操作过程
客户端发送的http报文,我们称为请求链;中介服务器或web服务器发送的http报文,称为响应链。两种报文都遵循以下格式:
我们使用科来网络分析系统捕获并分析一个http通讯过程,客户端主机名为“wangym”,客户端浏览器是ie6.0,请求的域名是“www.colasoft.com.cn”。
在客户端上打开科来网络分析系统。为避免数据干扰,可以设定一个过滤器,只捕获本机的数据通讯。设定好后开始数据捕获,同时在本机的浏览器中输入www.colasoft.com.cn,待网页全部打开后,停止捕获。
注意:此文里提到的http访问均指标准80端口的通信,对于非80端口的http访问,用户可在“工程->高级分析模块->http分析模块->常规设置->端口”处进行更改,系统默认为80,当http服务有多个端口时,多个端口之间用分号分隔,如80;8080。
1) http请求
图5所示的是科来网络分析系统对上面访问www.colasoft.com.cn的操作的http请求报文跟踪。
图5 http get请求操作
从图5中的数据包列表可知,上述操作中http请求的原始信息如下:
上述http访问的http请求方法是get,而get仅仅是http众多方法中的一种,http通过不同的方法实现不同的功能,下表列出了http常见的请求方法。
方 法 | 描 述 |
get | 向web服务器请求一个文件 |
post | 向web服务器发送数据让web服务器进行处理 |
put | 向web服务器发送数据并存储在web服务器内部 |
head | 检查一个对象是否存在 |
delete | 从web服务器上删除一个文件 |
connect | 对通道提供支持 |
trace | 跟踪到服务器的路径 |
options | 查询web服务器的性能 |
(表1 http常见请求方法)
每个http请求都包含两个部分:
具体分析图5中第6个数据包的http请求解码,可以得到如下信息:
注意:在传送一个网页时,web服务器会同时打开多个tcp连接,如每一张图片都单独使用一个tcp连接进行传送。
2) http响应
web服务器在收到http请求后,会向http客户端发送一个应答响应。
图6所示的是科来网络分析系统对上面访问www.colasoft.com.cn的操作的http响应报文跟踪。
图6 http响应
图6中第8个数据包即是web服务器返回给客户端的http响应数据包,详细查看其解码,可以得到如下信息:
在以太网中,数据包的大小在64-1518字节之间,如果客户端请求的页面大于1518字节,则会将请求的页面分段传送给客户端,客户端浏览器接收到web服务器传送给自己的html代码后,便开始读取数据并将其显示为网页。
http的不同状态码表示http响应的不同类型,主要包括:
代码 | 描述 |
1xx | 信息 |
2xx | 成功 |
3xx | 重定向 |
4xx | 客户端错误 |
5xx | 服务器端错误 |
表2 http响应状态码
3) http访问流程
通过上面对访问www.colasoft.com.cn的报文进行跟踪分析,我们可以总结出http的工作流程图如图7所示。
注意:http访问可以使用域名,也可直接使用ip地址,在使用ip进行访问时,将不会产生图5中第1和第2个所表示的dns数据包,故此http流程图里未包括dns部分,而直接从tcp的三次握手开始。
图7 http访问流程图
图7表示http的访问流程如下:
客户端向服务器发送一个tcp连接的syn请求(1),服务器在收到此请求后使用一个syn/ack的数据包对其进行响应(2),而客户端在收到此响应后再次向其发送一个ack数据包进行确认(3),此时,tcp连接成功建立。在连接建立后,客户端立即使用请求方法(通常为get或post)向服务器请求数据(4),一般情况下这时服务器会向客户端回应其相应的http报头和数据(5),但在某些情况下(脚本比较复杂,需耗费大量时间执行)开始的时候只能返回http的报头,而数据(6、7、n)可能会在相隔一段时间后再单独地分组进行传输,当数据传输完后,客户端发送fin数据包关闭连接。
对应图7中的标识,1-2的时间表示客户端和服务器之间路由所用的时间,4-5的时间为服务器的响应时间、5-n(此时5只返回了http报头)所用的时间为服务器上脚本程序所用的时间。科来网络分析系统中,对于每个数据包都可查看其绝对时间和相对时间(设定某个数据包为基准),在遇到访问网页速度慢的情况时,捕获http的访问并查看相应的时间,即可确定访问速度慢的原因并排查故障。
以上简单介绍了http协议,并使用科来网络分析分析系统跟踪分析了访问一个网页的具体流程。据此,用户在遇到网页访问故障时,即可结合上述的http相关知识,使用网络检测分析软件(科来网络分析系统)对http访问的报文进行跟踪分析,以完成对此类故障的快速排查。