目录
1 HTTP 基本概述
2 HTTP 的操作过程
3 HTTP 的特点
4 HTTP 的报文结构
5 HTTPS
1 HTTP 基本概述
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,HTTP定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
从层次的角度看,HTTP 是面向事务的(Transaction-oriented) 应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式与规则,是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
2 HTTP 的操作过程
从协议执行过程来说,浏览器要访问www服务器时,首先要完成对www服务器的域名解析。一旦获得了服务器的IP地址,浏览器就通过TCP向服务器发送连接建立请求。
万维网的大致工作过程如下图所示。
- 每个万维网站点都有一个服务器进程,它不断地监听TCP的端口80 (默认),当监听到连接请求后便与浏览器建立连接。
- TCP连接建立后,浏览器就向服务器发送请求获取某个Web页面的HTTP请求。
- 服务器收到HTTP请求后,将构建所请求Web页的必需信息,并通过HTTP响应返回给浏览器。
- 浏览器再将信息进行解释,然后将Web页显示给用户。
- 最后,TCP连接释放。
在测览器和服务器之间的请求与响应的交互,必须遵循规定的格式和规则,这些格式和规则就是HTTP。因此HTTP有两类报文:
-
请求报文(从Web客户端向Web服务器发送服务请求)
-
响应报文(从Web服务器对Web客户端请求的回答)。
用户单击鼠标后所发生的事件按顺序如下(以访问CSDN的网站为例):
- 浏览器分析链接指向页面的URL (http://www.csdn.com/index.htm)。
- 浏览器向DNS请求解析www.csdn.com的IP地址。
- 域名系统DNS群析出CSDN服务器的IP地址。
- 浏览器与该服务器建立TCP连接(默认端口号为80)。
- 浏览器发出HTTP请求: GET /index. htm。
- 服务器通过HTTP响应把文件index.htm发送给测览器。
- TCP连接释放。
- 浏览器解释文件indexhtm,并将Web页显示给用户。
3 HTTP 的特点
HTP是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。因为服务器不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。
HTTP的无状态特性简化了服多器的设计,使服务器更容易支持大量并发的HTTP请求。
在实际应用中,通常使用Cookie 加数据库的方式来跟踪用户的活动(如记录用户最近浏览的商品等)。
Cookie 是一个存储在用户主机中的文本文件,里面含有一串“识别码”,如“123456”。 用于Web服务识别用户。Web服务器根据Cookie就能从数据库中查询到该用户的活动记录,进而执行一些个性化的工作,如根据用户之前浏览过的商品向其推荐新产品等。
HTTP采用TCP作为运输层协议,保证了数据的可靠传输。HTTP 不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP本身是无连接的。也就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。
HTTP既可以使用非持久连接,也可以使用持久连接(HTTP/1.1 支持)。
- 对于非持久连接,每个网页元素对象(如JPEG图形、Flash 等)的传输都需要单独建立一个TCP连接,如下图所示(第三次握手的报文段中捎带了客户对万维网文档的请求)。也就是说,请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间RTT(一个RTT用于TCP连接,另一个RTT用于请求和接收文档)。
- 所谓持久连接,是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和服务器可以继续在这条连接上传送后续的HTTP请求与响应报文,如下图所示。
持久连接又分为:
- 非流水线
- 流水线两种方式。
对于非流水线方式,客户在收到前一个响应后才能发出下一个请求。
HTTP/1.1的默认方式是使用流水线的持久连接。这种情况下,客户每遇到一个对象引用就立即发出一个请求,因而客户可以逐个地连续发出对各个引用对象的请求。如果所有的请求和响应都是连续发送的,那么所有引用的对象共计经历1个RTT延迟,而不是像非流水线方式那样,每个引用都必须有1个RTT延迟。
4 HTTP 的报文结构
HTTP是面向文本的(Text-Oriented), 因此报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。有两类HTTP报文:
- 请求报文:从客户向服务器发送的请求报文,如下图(a)所示。
- 响应报文:从服务器到客户的回答,如下图(b)所示。
HTTP请求报文和响应报文都由三个部分组成:
- 开始行
- 首部行
- 实体主体
从上图可以看出,这两种报文格式的区别是开始行不同。
开始行
用于区分是请求报文还是响应报文。在请求报文中的开始行称为请求行,而在响应报文中的开始行称为状态行。开始行的三个字段之间都以空格分隔,最后的“CR"和“LF"分别代表“回车"和“换行”。
请求报文的“请求行”有三个内容:
- 方法
- 请求资源的URL
- HTTP的版本
其中,“方法”是对所请求对象进行的操作,这些方法实际上也就是一些命令。
下表给出了HTTP请求报文中常用的几个方法。
方法(操作) |
意义 |
GET |
请求读取由URL标识的信息 |
HEAD |
请求读取由URL标识的信息的首部 |
POST |
给服务器添加信息(如注解) |
CONNECT |
用于代理服务器 |
首部行
用来说明浏览器,服务器或报文主体的一些信息。首部可有几行,但可不使用。在每个首部行都有首部字段名和它的值,每行在结束的地方都要有“回车”和“换行”。整个首部结束时,还有一空行将首部行和后面的实体主体分开。
实体主体
在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。
5 HTTPS
HTTPS就是安全的HTTP,在http与传输层之间加上了一个SSL对称加密与非对称加密。HTTPS = HTTP+ 加密 + 认证 + 完整性保护。