
1.1.3 HTTP协议
当浏览器寻找到Web服务器的地址之后,浏览器将帮助我们把对服务器的请求转换为一系列参数发送给Web服务器。服务器收到浏览器发来的请求参数之后,将会分析这些数据并进行处理,然后向浏览器回应处理的结果,也就是一些新的数据;这些数据通常是HTML网页或者图片。浏览器收到之后,解析这些数据,将它们呈现在浏览器的窗口中,就是我们现在看到的网页。
在浏览器与Web服务器的对话中,需要使用双方都能够理解的语法规范进行通信,这种程序之间进行通信的语法规范,我们称之为协议。协议有许多种,根据国际标准化组织ISO的网络参考模型,程序与程序之间的通信可以分为7层,从低级到高级依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。每层都有自己所对应的协议。比如,应用层之间的通信协议,我们称为应用层协议。不同的应用程序可能有着不同的应用层协议。同一层的协议也有许多种。
浏览器与Web服务器之间的协议是应用层协议,当前,我们主要遵循的协议为HTTP/1.1。HTTP协议是Web开发的基础,这是一个无状态的协议,客户机与服务器之间通过请求和响应完成一次会话(Session)。每次会话中,通信双方发送的数据称为消息 (Message),消息分为两种:请求消息和回应消息。
消息的格式如图1-2所示。每个消息可能由三部分组成,第一部分为请求行或者回应的状态行,第二部分为消息的头部,第三部分为消息体部分。消息头部分和消息体部分使用一个空行进行分隔。

图1-2 消息的格式
通常情况下,我们在客户端使用浏览器来访问服务器,浏览器软件帮助我们构造所有的请求消息。使用Fiddler软件,可以帮助我们检测到浏览器与服务器之间的通信内容,如图1-3所示。

图1-3 用Fiddler检测浏览器与服务器之间的通信内容
图1-3右上部为浏览器请求的内容,可以看到,第一行为请求行,请求行的内容为:
GET http://www.microsoft.com/HTTP/1.1
下面的连续7行为请求头部分,然后是一个空行,由于是GET请求,所以没有请求体部分。
图1-3右下部为服务器回应的内容,第一行为回应的状态行,HTTP/1.1 302 Found表示请求的内容可以找到,但是需要到另外的地址去获取。下面的连续10行为回应的头部,其中Location:/en/us/default.aspx用来说明转到的地址;Content-Length:142说明回应体中包含142个字节的内容。一个空行分隔了回应的头部和回应体部分,回应体中为一个简单的HTML网页。
HTTP协议定义了内容的格式,这是一个应用层的协议,应用层协议的内容需要通过传输层在浏览器和服务器之间传送,TCP/IP协议是ISO网络参考模型的一种实现。在TCP/IP协议中,与网络程序员相关的主要有两个层:传输层和应用层。
传输层协议负责解决数据的传输问题,包括数据通信的可靠性问题。传输层依赖更低层的网络层完成实际的数据传输,在TCP/IP网络协议中,负责可靠通信的传输层协议为TCP协议。而网络层一般由网络驱动来实现,普通的程序员不会涉及;在TCP/IP协议中,网络层的协议为IP协议。
应用层用于在特定的应用程序之间传输数据。HTTP协议就是TCP/IP协议中专门用于浏览器与Web服务器之间通信的应用层协议。应用层协议依赖于传输层协议完成数据传输,传输层协议依赖于网络层协议完成数据传输,它们的关系如图1-4所示。

图1-4 浏览器与服务器之间网络通信的传输过程