HTTP 有两类报文:
(1) 请求报文----从客户向服务器发送请求报文,见图6-12(a).
(2) 响应报文----从服务器到客户的回答,见图6-12(b).
由于 HTTP是面向文本的(text-oriented),因此在报文中的每一个字段都是一些ASCII码串,因而每个字段的长度都是不确定的。
HTTP请求报文和响应报文都是由三个部分组成。可以看出,这两种报文格式的区别就是开始行不同。
(1) 开始行 用于区分是请求报文还是响应报文。在请求报文中的开始行叫做请求行(Request-Line),
而在响应报文中的开始行叫做状态行(Staus-Line).在开始行的三个字段之间都以空格隔开,最后的“CR”
和“LF”分别表示“回车”和“换行”。
(2)首部行 用来说明浏览器,服务器或报文主体的一些信息。首部可以有好几行,也可以不使用。
在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有“回车”和“换行”。整个首部行
结束时,还有一空行将首部行和后面的实体主体分开。
(3)实体主体 在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。
下面介绍HTTP请求中最主要的一些主要特点。
请求报文中的第一行“请求行”,只有三个内容,即方法,请求资源的URL,以及HTTP的版本。
请注意:这里的名词“方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的
操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采取的方法决定的。表6-1
给出了请求报文中常用的几种方法。
下面是一个请求报文的例子:
GET /chn/yxsz/index.htm HTTP/1.1 (请求使用了相对URL)
Host: www.tsinghua.edu.cn (此行是首部行的开始,这行给出了主机的域名)
Connection: close(告诉服务器发送完请求的文档后就可以释放连接了)
User-Agent: Mozilla/5.0 (表明用户代理是使用Netscape浏览器)
Accept-Language:cn (表示用户希望优先得到中文版本的文档)
(请求报文的最后还有一个空行)
在请求行使用了相对URL(即省略了主机的域名)是因为下面的首部行(第二行)给出了主机的域名。
第三行是告诉服务器不使用持续连接,表示浏览器希望服务器在传送完所请求的对象后即关闭TCP连接。这个请求报文
没有实体主体。
在看看HTTP响应报文的主要特点。
每一个请求报文发出后,都能收到一个响应报文,响应报文的第一行就是状态行。
状态行包含三项内容:HTTP的版本,状态码,以及解释状态码的简单语句。
状态码都是三位数字的,分为5大类共33种。例如:
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或是知道了。
3xx 表示重定向,如要完成请求还必须采取下一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
节选自《计算机网络》(第五版)谢希仁