一什么是HTTP协议
HTTP协议是一种应用层协议HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据HTTP协议主要用于Web浏览器和Web服务器之间的数据交换我们在使用IE或Firefox浏览网页或下载Web资源时通过在地址栏中输//hostport/path开头的个字母http就相当于通知浏览器使用HTTP协议来和host所确定的服务器进行通讯
HTTP协议诞生于上世纪年代初第一个被广泛使用的版本是HTTP这个最初的版本非常简陋它只向服务器发送一个非常简单的请求而服务器也会返回一个很简单的响应以及相应的HTML文本在随后的HTTP中增加了很多在HTTP中没有的特性如增加了资源重定位大量的状态响应码等在最新的HTTP中对HTTP做了更进一步的改进除了增加了一些请求方法外最大的改进就是可以使HTTP保持连接状态这对于一些频繁传输数据的应用是非常有益的由于HTTP协议已经达到了它的目标因此负责制定规范的WC已经停止了对HTTP的改进(和HTTP相关的协议或扩展并未停止)所以HTTP将是HTTP协议的最后一个版本
无论你是从事网络程序开发还是Web开发或是网站的维护人员都必须对HTTP协议有一个比较深入的了解因此HTTP协议不仅是Internet上应用最为广泛的协议也是应用协议家族中比较简单的一种入门级协议而且所有的Web服务器无一例外地都支持HTTP协议这也充分地说明对于那些开发网络程序尤其是开发各种类型的Web服务器的开发人员透彻地掌握HTTP协议将对你所开发的基于HTTP协议的系统产生直接的影响
由于本文的目的并不是讲解HTTP协议因此只讨论了HTTP协议的主要部分如果读者对HTTP协议感性趣并想深入了解HTTP协议请查看RFC或通过来了解HTTP协议的详情
二HTTP的工作方式
HTTP协议采用了请求/响应的工作方式基于HTTP协议的客户端在每次向服务器发出请求后服务器就会向客户端返回响应消息(包括请求是否正确以及所请求的数据)在确认客户端已经收到响应消息后服务端就会关闭网络连接(其实是关闭TCP连接)在这个数据传输过程中并不保存任何历史信息和状态信息因此HTTP协议也被认为是无状态的协议图描绘了HTTP协议的通讯过程
图 HTTP协议的通讯过程
在HTTP协议中当Web浏览器发出请求时就意味着一个请求/响应会话已经开始在请求响应结束后服务器就会立刻关闭这个连接这种会话方式虽然简便但它会带来另外一个问题如果客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源如JavaScript文件图像文件CSS文件等当浏览器每遇到这样一个Web资源就会建立一个HTTP会话如果这样的资源很多的话就会加重服务器的负担同时也会影响客户端浏览器加载HTML等Web资源的效率
在对上述的缺陷进行改进和完善后HTTP协议进入了我们的视线HTTP和HTTP相比较而言最大的区别就是增加了持久连接支持当客户端使用HTTP协议连接到服务器后服务器就将关闭客户端连接的主动权交还给客户端也就是说在客户端向服务器发送一个请求并接收以一个响应后只要不调用Socket类的close方法关闭网络连接就可以继续向服务器发送HTTP请求当HTML中含有其他的Web资源时浏览器就可以使用同一个网络连接向下载这些资源这样就可以大大减轻服务器的压力图演示了这一过程
图 HTTP协议的通讯过程
HTTP除了支持持久连接外还将HTTP的请求方法从原来的三个(GETPOST和HEAD)扩展到了八个(OPTIONSGETHEADPOSTPUTDELETETRACE和CONNECT)而且还增加了很多请求和响应字段如上述的持久连接的字段Connection这个字段有两个值Close和KeepAlive如果使用ConnectionClose则关闭HTTP的持久连接的功能要打开HTTP的持久连接的功能必须使用ConnectionKeepAlive或者不加Connection字段(因为HTTP在默认情况下就是持久连接的)除了这些还提供了身份认证状态管理和缓存(Cache)等相关的请求头和响应头