HTTP网络协议
第1章 了解Web及网络基础
HTTP的诞生
互联网早期,Tim Berners-Lee博士提出了一种能让远隔两地研究者们共享知识的设想。该设想的基本理念是:借助多文档之间相互关联的超文本(HyperText),连成可相互参阅的WWW(World Wide Web, 万维网)。
为实现这种理念,提出了3项WWW的构建技术,分别是作为页面文本标记语言的HTML、作为文档传输协议的HTTP和指定文档所在地址的URL,HTTP协议因此而诞生。
HTTP的发展
HTTP协议发展至今共经历了三个版本,如下所示:
HTTP/0.9: HTTP于1990年问世,那时它并没有作为标准被建立,此时的版本含有HTTP/1.0之前版本的意思,因而被称为HTTP/0.9。
HTTP/1.0: HTTP被正式作为标准发布是在1996.05,命名为HTTP/1.0。
HTTP/1.1: 1997.01公布的HTTP/1.1是目前主流的HTTP协议版本,它与HTTP/1.0的主要区别是添加了持久连接,也就是可以在一个连接中传输多个对象。
TCP/IP
与互联网相关的协议集合起来总称为TCP/IP。TCP/IP协议族里重要的一点是分层,其按照层次从上往下分别分为应用层、传输层、网络层和数据链路层,而各层的作用如下所示:
应用层: 包含了所有高层协议,向用户提供了应用服务,如FTP、DNS、HTTP等。
传输层: 传输层提供了对于网络连接中两台计算机之间的数据传输,此层包含了两个性质不同的协议:TCP和UDP。
网络层: 处理在网络上流动的数据包,决定了数据包的传输路线。
链路层: 处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC以及光纤等物理可见部分。
其他协议
IP
IP协议位于网络层,作用是把各种数据包传送给远程机器,通过ARP协议找出IP地址所对应的MAC地址以达到传送的目的。
TCP
TCP位于传输层,提供可靠的字节流服务(把大块数据分割成以报文段为单位的数据包进行管理)。TCP采用三次握手策略确保数据准确无误地送达目标处。
DNS
位于应用层,提供从域名到IP地址或从IP地址到域名的服务。
URI/URL
URI用字符串标识某一互联网资源,而URL表示资源的地点。
第2章 简单的HTTP协议
概述
应用HTTP协议时,一端充当客户端角色,另一端充当服务器角色,两端之间通过请求和响应的交换达成通信。
请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。
响应报文由协议版本、状态码、状态语、可选的响应首部字段以及实体主体构成。
HTTP是一种无状态的协议,即不对发送过的请求或响应做持久化处理。
HTTP方法
GET: 获取资源
POST: 传输实体主体
PUT: 传输文件
HEAD: 获得报文首部
DELETE: 删除文件
OPTIONS: 询问支持的方法
TRACE: 追踪路径
CONNECT: 要求用隧道协议连接代理
持久化
在HTTP协议初始版本中,每进行一次HTTP通信都要进行TCP连接的建立和断开,造成了额外的开销,为了解决这种问题,HTTP/1.1提出了持久连接,又称为HTTP keep-alive,它的特点是,只要任意一段没有明确提出断开连接,则保持TCP的连接状态。也就是说,TCP的持久连接旨在建立一次TCP连接后进行多次HTTP请求与响应的交互。
管线化技术的出现解决了多个HTTP的阻塞请求方式,使得多个HTTP请求能以并行的方式进行发送,提高了请求响应的效率。
Cookie管理状态
HTTP是无状态协议,本身不对已经发送过的请求与响应进行管理,为了解决这方面的不足,引入了Cookie技术,这是一种通过在请求与响应保温中写入Cookie信息来控制客户端状态的技术,Cookie会根据从服务器端发送的响应报文中的Set-Cookie的首部字段信息,通知客户端保存Cookie,,当客户端下一次向服务器发送请求时,会在请求报文中加入Cookie的信息发送,以通知服务器端识别是来自哪一个用户。
第3章 HTTP报文
报文结构
用于HTTP协议交互的信息被称为HTTP报文,其中请求端(客户端)的报文称为请求报文,而响应端(服务器端)的报文称为响应报文。
报文的结构由起始行(请求行/状态行)、首部(header)和主体(body)构成。
http报文结构
编码提升传输速率
HTTP在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中使用编码提升传输速率。
压缩传输
由服务器进行实体内容的压缩,内容传输完成后由客户端进行解码。常见的内容编码有:
gzip(GNU zip)、compress(UNIX系统的标准压缩)、deflate(zlib)、identity(不进行编码)。
分块传输
在HTTP通信过程中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求的页面。在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。
其他
多部分对象集合
一份报文主体内可含有多类型实体,通过Content-Type来标识。如multipart/form-data、multipart/byteranges。
范围请求
http中可以通过header中Range字段指定请求的范围,如Range: bytes=5001-10000。
内容协商
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为合适的资源。
内容协商技术包含:服务器驱动协商、客户端驱动协商和透明协商。
第4章 返回结果的HTTP状态码
请求结果
状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。
类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需求进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错
状态码
2XX 成功
200,表示从客户端发来的请求在服务器端被正常处理了。
204,请求处理成功,但是没有资源返回。
206,请求处理成功,返回部分内容,响应报文中包含Content-Range指定范围的实体内容。
3XX 重定向
301,永久性重定向,
302,临时性重定向。
303,表示请求的资源存在着另一个URL,应使用GET方法定向获取请求的资源。
304,表示请求的资源没有改变,可以使用客户端上未过期的资源。
307,临时性重定向,不会从POST变成GET。
4XX 客户端错误
400, Bad Request,表示请求报文中存在语法错误。
401, Unauthorized,表示发送的请求需要有通过HTTP认证。
403, Forbidden, 表示请求资源的访问被服务器拒绝了。
404, Not Found,表示服务器上没有请求的资源。
5XX 服务器错误
500, Internal Server Error,表示服务器在执行请求时发生了错误。
503, Service Unavailable,表示服务器暂时处于超负载或者正在进行停机维护,现在无法处理请求。
第5章 与HTTP协作的Web服务器
虚拟主机实现多域名
HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点。在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的Web网站,因此在发送HTTP请求时,需要在Host首部指定主机名或域名的URI。
通信数据转发程序
HTTP通信时,除了客户端和服务器以外,还有一些用语通信数据转发的应用程序,例如代理、网关和隧道。
代理
代理是一种具有转发功能的应用程序,它扮演了客户端与服务器之间中间人的角色,接收来自客户端的请求,并转发给目标服务器,同时接收目标服务器的响应并转发给客户端。
网关
网关是转发其他服务器通信数据的服务器,接收客户端请求时,就像自己拥有资源的服务器一样对请求进行处理。
隧道
隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序。它可按要求建立起一条与服务器相通的线路,并使用SSL灯加密手段进行通信,保证通信的安全性。