- 深入浅出计算机网络
- 韩立刚 韩利辉 王艳华 马青
- 2054字
- 2021-09-27 18:06:02
1.2.1 HTTP的主要内容
为了更好地理解HTTP,下面的HTTP就以租房协议的格式展示。注意,下面是HTTP的主要内容,而不是全部内容。
HTTP
甲方: Web服务器
乙方: 浏览器
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(World Wide Web,WWW)服务器传输超文本到本地浏览器的传输协议。HTTP是一个基于TCP/IP来传递数据(HTML文件、图片文件、查询结果等)的应用层协议。
HTTP工作于客户端/服务器端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务器端(Web服务器)发送所有的请求,Web服务器根据接收到的请求向客户端发送响应信息。
协议条款
一、HTTP请求、响应的步骤
1.客户端连接到Web服务器
一个HTTP客户端通常是浏览器,它将与Web服务器的HTTP端口(默认使用TCP的80端口)建立一个TCP套接字连接。
2.发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文。一个请求报文由请求行、请求头部、空行和请求数据4个部分组成。
3.Web服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源副本写到TCP套接字,由客户端读取。一个响应由状态行、响应头、空行和响应数据4个部分组成。
4.释放TCP连接
若connection模式为close,则Web服务器主动关闭TCP连接,客户端被动关闭TCP连接,以释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。
5.客户端(浏览器)解析HTML内容
客户端(浏览器)首先解析状态行,查看表明请求是否成功的状态码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端(浏览器)读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
二、请求报文格式
由于HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII串,因而各个字段的长度都是不确定的。HTTP请求报文由3个部分组成,如图1-8所示。
图1-8 请求报文格式
1.开始行
开始行用于区分是请求报文还是响应报文。在请求报文中的开始行叫作请求行,而在响应报文中的开始行叫作状态行。开始行的3个字段之间都以空格分隔开,最后的“CR”和“LF”分别代表“回车”和“换行”。
2.首部行
首部行用来说明浏览器、Web服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行结束时,还有一行空行将首部行和后面的实体主体分开。
3.实体主体
在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。
三、HTTP请求报文中的方法
浏览器能够向Web服务器发送以下8种方法(有时也叫“动作”或“命令”)来表明Request-URL指定的资源的不同操作方式。
(1)GET:请求获取Request-URL所标识的资源。当在浏览器的地址栏中输入网址访问网页时,浏览器采用GET方法向Web服务器请求网页。
(2)POST:在Request-URL所标识的资源后附加新的数据。要求被请求的Web服务器接受附在请求后面的数据,常用于提交表单,如向服务器提交信息、发帖、登录。
(3)HEAD:请求获取由Request-URL所标识的资源的响应消息报头。
(4)PUT:请求Web服务器存储一个资源,并用Request-URL作为其标识。
(5)DELETE:请求Web服务器删除Request-URL所标识的资源。
(6)TRACE:请求Web服务器回送收到的请求信息,主要用于测试或诊断。
(7)CONNECT:用于代理Web服务器。
(8)OPTIONS:请求查询Web服务器的性能,或者查询与资源相关的选项和需求。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,Web服务器应当返回状态码405(method not allowed);当Web服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(not implemented)。
四、响应报文格式
每一个请求报文发出后,都能收到一个响应报文。响应报文的第一行是状态行。状态行包括3项内容,即HTTP的版本、状态码,以及解释状态码的简单短语,如图1-9所示。
图1-9 响应报文格式
五、HTTP响应报文状态码
状态码(status-code)都是3位数字的,分为5大类共33种,简单介绍如下。
(1)lxx表示通知信息,如请求收到了或正在进行处理。
(2)2xx表示成功,如接受或知道了。
(3)3xx表示重定向,如要完成请求还必须采取进一步的行动。
(4)4xx 表示客户端错误,如请求中有错误的语法或不能完成。
(5)5xx表示Web服务器的差错,如Web服务器失效无法完成请求。
下面几种状态行在响应报文中是经常见到的。
HTTP/1.1 202 Accepted(接受)
HTTP/1.1 400 Bad Request(错误的请求)
HTTP/1.1 404 Not Found(找不到)
可以看到,HTTP定义了浏览器访问Web服务器的步骤、能够向Web服务器发送哪些请求(方法)、HTTP请求报文格式(有哪些字段,分别代表什么意思),也定义了Web服务器能够向浏览器发送哪些响应(状态码)、HTTP响应报文格式(有哪些字段,分别代表什么意思)。
举一反三,其他的应用层协议也需要定义以下内容。
(1)客户端能够向Web服务器发送哪些请求(方法或命令)。
(2)客户端访问Web服务器的命令交互顺序,例如,POP3,需要先验证用户的身份才能接收邮件。
(3)Web服务器有哪些响应(状态码),每种状态码代表什么意思。
(4)定义协议中每种报文的格式:有哪些字段,字段是定长还是变长,如果是变长,字段分隔符是什么,都要在协议中定义。一个协议有可能需要定义多种报文格式,例如,ICMP定义了ICMP请求报文格式、ICMP响应报文格式、ICMP差错报告报文格式。