一、HTTP协议
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP),它是Web 的核心,在[RFC 1945]和[RFC 2616]中进行了定义。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换 HTTP报文进行会话。
Web服 务器(Webserver)实现了 HTTP的服务器端,它用于存储Web对象,每个对象由URL寻址。流行的Web服务器有Apache和Microsoft Internet Information Server (微软互联网信息服务器)。
HTTP定义了 Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。当用户请求一个Web页面(如点击一个超链接)时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收到请求并用包含这些对象的HTTP响应报文进行响应,如下图所示。
HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。HTTP客户首先发起一个与服务器的TCP连接。一旦
连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。
二、HTTP报文格式
HTTP 规范包含了对HTTP 报文格式的定义。HTTP报文有两种:请求报文和响应报文。
2.1 HTTP请求报文
下面则是从客户端发送给某个 HTTP 服务器端的请求报文中的内容。请求报文主要由三部分组成:请求行、首部行和实体行
请求行
请求行有3个字段:方法字段、URL字段和HTTP版本字段。
方法字段可以取几种不同的值,包括GET、POST、HEAD、PUT和DELETE。绝大部分的HTTP请求报文使用GET方法。当浏览器请求一个对象时,使用GET方法,在URL字段带有请求对象的标识。在本例中,该浏览器正在请求对对象/somedir/page. html。
首部行
- 首部行指明了对象所在的主机Host:hackr.jp
- 通过包含Connection: keep-alive首部行,该浏览器告诉服务器要使用持续连接
实体行
使用GET
方 法时实体行为空,而使用POST
方法时 才使用该实体行。当用户提交表单时, HTTP客户常常使用POST
方法,例如 、当用户向搜索引擎提供搜索关键词时。2.2 HTTP响应报文
响应报文有三个部分:一个初始状态行(status line) , 多个首部行(headerline),然后是实体行(entity body)。实体行部分是报文的主要部分,即它包含了所请求的对象本身(表示为data data data data data -)状态行
状态行有3个字段:协议版本字段、状态码和相应状态信息。在这个例子中,状态行指示服务器正在使用HTTP/
1.1,并且一切正常(即服务器已经找到并正在发送所请求的对象)。
我们补充说明一下状态码和它们对应的短语。状态码及其相应的短语指示了请求的结果。一些常见的状态码和相关的短语包括:
- 200 0K:请求成功,信息在返回的响应报文中。
- 301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL。
- 400 Bad Request: 一个通用差错代码,指示该请求不能被服务器理解。
- 404 Not Found:被请求的文档不在服务器上。
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
三、动手查看响应报文
你想看一下真实的HTTP响应报文吗?这正是我们高度推荐而且也很容易做到的事。首先用Telnet登录到你喜欢的Web服务器上,接下来输入一个只有一行的请求报文去请求放在该服务器上的某些对象。例如,假设你看到命令提示,键入:
(在输入最后一行后连续按两次回车。)这就打开一个到主机gaia. cs. umass. edu的80端口的TCP连接,并发送一个HTTP请求报文。telnet gaia.cs.umass.edu 80
GET /kurose_ross/interactive/index.php HTTP/1.1
Host: gaia.cs.umass.edu