- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
http报文格式
1.协议简介和应用
1.1协议介绍
HTTP(Hypertext Transfer Protocol, 超文本传输协议)是目前最常用的应用层协议之一,这里只对协议做一个简单的介绍。
HTTP自1990 年以来就被全球信息网采用为基础通讯协议,它是一种应用层的通讯协议,特性是轻便、快速,特别适合如Web 这种分布式、合作式的超媒体信息系统。HTTP 虽早自1990 年起就已被普遍使用,但过去许多年并无统一规范,此项不明确的规范后来通称为HTTP/0.9。直到1996 年6 月一份仅供参考的文件才由Internet Society 的HTTP Working Group 出版,称为HTTP/1.0。
HTTP/1.0 传输格式就像大部分的网络通讯协议,HTTP 使用C/S模式。但是,HTTP/1.0没有充分考虑到分层代理,高速缓存的作用以及对稳定连接和虚拟主机的需求。并且随着不完善的进程应用的激增,HTTP/1.0迫切需要一个新的版本,以便使两个通信应用程序能够确定彼此的真实性能。
这里规定的协议叫做“HTTP/1.1”,这个协议与HTTP/1.0相比,要求更为严格,以确保各项功能得到可靠实现。
1.2协议常见的应用环境
在我们日常生活中最常见的应用环境就是上网浏览网页,很多上班族到办公室的第一件事就是打开电脑,而开机后的第一件事就是打开IE、Firefox、Myie、GreenBrowser、Opera等浏览器时,做的第一件事就是浏览一下例如, 的新闻,而这种简单的应用操作,完成的交互过程就是一个典型的HTTP协议的应用过程。
1.2.1正常连接的应用环境
基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。如图1
HTTP_图1
显而易见有如下4个交互的过程:
建立连接
连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。通俗地说就是TCP的三次握手。
发送请求
首先,这个消息是用普通的ASCII文本书写的。这个消息共有多行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车符和换行符。当然,一个请求消息也可以仅仅只有一行。请求的报文中包含了各种信息,包括客户端想要访问的URL,HTTP的版本,支持的浏览的字体等内容。详细分析见2.2.1请求报文字段。
发送响应
服务器在处理完客户的请求之后,要向客户机发送响应消息。
这个响应消息分为3部分:1个起始的状态行(status line),6个头部行(不固定)、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。详细分析见2.2.2应答报文字段。
关闭连接
客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话。通俗地说就是TCP的4次握手断开。常见的应用环境就是这样,实际生活中可能就是多了一个NAT转换,其实过程都是一样的。
1.2.2通过代理上网的应用环境
在很多网络安全产品中,提供了HTTP过滤的功能,要求客户在IE浏览器上做一个【Internet选项】-【连接】-【局域网设置】的更改,配置代理的ip和端口。如下图2:
HTTP_图2
点击【局域网设置】后输入ip和端口,并钩选“为LAN使用代理服务器”如下图3:
HTTP_图3
客户端和代理主机间用交换机相连,下面的拓扑中为了看得更加清晰并没有画出交换机。
下面是一个简单的拓扑图4:
HTTP_图4
详细的交互过程分析参见:3.3
2.协议分析
HTTP报文格式并不复杂,但是各个字段类型数量庞大,这里只对常见的字段进行分析。
对于下面字段说明中出现的一些常见字符作一下说明:
“文字”
文字原文使用引号。除特殊情况,原文对外界不敏感。
规则1 | 规则2
由竖线(|)分开的元素是可选的,例如,yes | no表示yes或no都是可接受的。
(规则1 规则2)
围在括号里的多个元素视作一个元素。这样“(elem (foo | bar) elem)”允许标记序列“elem foo elem”和elem bar elem”。
*规则
前面的字符*表示重复。完整的形式是*元素,表示元素至少出现次,至多出现次。默认值是0和无穷大,所以*(元素)允许任何数值,包括零;1*元素至少需要一次;1*2element允许一次或两次。
[规则]
方括号里是任选元素;[foo bar]相当于*1(foo bar)。
2.1报文格式
对于HTTP的报文格式分析,就是两种格式,因为基于C/S的访问应答模式,所以一个是请求的报文格式,而另一个是应答的报文格式。
2.1.1请求报文格式
先看一下请求报文
文档评论(0)