2.3 HTTP的请求/响应模型
我们通常使用各类浏览器软件访问网站,这些浏览器或其他下载工具常常被称为“客户端”。在浏览器的地址栏中输入我们要访问的网页的地址后,位于Internet上的服务器会接收到请求。如果请求的是静态网页,则直接将网页内容发回给客户端;如果请求的是动态网页,则需要执行其中的动态代码段,将处理后的网页内容(类似于网页快照)以HTML格式发送回客户端。
客户端与Internet上的服务器之间是采用HTTP协议进行通信的,因此有必要了解一下HTTP协议的相关知识。
HTTP协议即超文本传输协议(Hypertext Transfer Protocol)的简称,用于传输超文本内容。它是基于应用层的网络通信规范,即客户端与服务器进行通信时需要遵守的一种规范,广泛应用于WWW的全球信息服务。这里的服务器端是指提供HTTP服务的部分,而客户端是指浏览器或者下载工具等。
HTTP有1.0和1.1版本,HTTP/1.1的详细说明可以查阅RFC2616文档。
HTTP协议是如何工作的呢?它采用“发起请求/发回响应”的方式进行双方的通信,即请求/响应模型(request/response),具体工作流程如下。
1.客户端请求HTTP服务
首先,客户端向服务器发起连接请求,服务器接受并建立通信连接。
连接建立成功后,客户端将请求信息发给服务器。一个请求主要由4部分组成,格式如下:
HTTP请求行 请求标头 空行 消息体(可选)
注:HTTP请求行和请求标头必须以<CR><LF> 作为结尾(即回车换行)。空行内必须只有<CR><LF>而无其他空格。
消息体中包含要发送给服务器的所有数据,如请求参数、Cookie等。
2.服务端接受请求并返回HTTP响应
Web服务器收到请求后,解析请求并定位指定请求资源。服务器将响应内容以特定的格式发送给客户端。一个响应由4部分组成,格式如下:
HTTP状态行 响应标头 空行 消息体(可选)
消息体中包含了要显示在浏览器中的所有内容。
3.断开连接,浏览器解析响应
发送完数据后,服务端关闭连接。浏览器解析状态行、响应标头、空行,以及消息体中的响应数据等,并根据HTML的语法和语义对其进行格式化,在窗口中显示HTML格式的页面内容。
HTTP协议是无状态的协议,即在处理完一个请求后,Web服务器并不记住关于这个客户端或这次请求的任何信息,而只在一次请求期间建立起一个临时的通信连接,处理完成后立即断开连接。
HTTP协议的这种“无状态性”既是优点也是缺点。一方面,由于不保存状态,使得HTTP累赘少,系统运行效率高,服务器应答快;另一方面,由于没有状态,协议对事务处理没有记忆能力,若后续的事务处理需要之前的处理信息,那么这些信息必须使用其他方法在协议之外进行保存。