文章目录
  1. 统一资源定位符URL
  2. 超文本传送协议HTTP
    1. HTTP的操作过程
    2. 代理服务器
    3. HTTP报文结构
    4. Cookie
  3. HTTPS
    1. TLS握手
    2. HTTPS优化

统一资源定位符URL

URL一般格式为:<协议>://<主机>:<端口>/<路径>。

超文本传送协议HTTP

HTTP协议基于TCP协议。HTTP协议的端口号为80。HTTP是无连接的、无状态的。

HTTP的操作过程

如下是一个建立HTTP请求到收到HTTP响应的过程示意图。

 

可以看到,整个从建立HTTP请求到收到HTTP响应所花的时间=2RTT+服务器处理时间。而HTTP1.0规定服务器发送完响应消息后,要主动执行断开操作,而HTML文档与图片被视为独立的对象,因此要获取一个有多个图片的网页的全部内容时就需要多次HTTP请求与释放,这使得获取数据的效率很低。于是,HTTP1.1采用持续连接,即服务器在发送响应后的一段时间仍然保持这条连接。

代理服务器

代理服务器可减轻网络上的负载。

 

HTTP报文结构

HTTP有两类报文:HTTP请求报文与HTTP响应报文。区别在于开始行不同。

 

HTTP请求报文中的一些方法如下。

 

HTTP请求报文中的一些首部字段如下。

 

HTTP响应报文中的一些首部字段如下。

 

实体中用到的一些字段如下。

 

状态码是一个3位数,分为5大类。

1XX表示通知信息;2XX表示成功;3XX表示重定向;4XX表示客户的差错;5XX表示服务器的差错。

Cookie

当用户A浏览某个使用Cookie的网站时,网站的服务器为A产生一个唯一的识别码,并以此为索引在服务器后端数据库中产生一个项目。

接着在给A的响应报文中添加一个Set-cookie的首部行(如Set-cookie: 31d4d96e407aad42);

当A收到响应后,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括服务器的主机名及其给出的识别码;

当A继续浏览网站时,每发送一个HTTP请求报文,浏览器均会从Cookie文件中取出此网站的识别码,并放到HTTP请求报文的首部行(Cookie: 31d4d96e407aad42)。

于是,这个网站就能跟踪用户A在该网站的活动。

HTTPS

TLS握手

HTTPS相对于HTTP,在建立TCP连接后,还需要进行TLS握手来协商出加密的参数。TLS握手示意图如下。

 

(1)客户端向服务器发送Hello报文,其中包含客户端生成的随机数C、客户端的TLS版本号、支持的密码套件列表以及扩展列表。

(2)服务器回复ACK报文;服务器向客户端发送Hello报文(选择了用来协商密钥的非对称加密算法后,自己计算出一对公私钥),其中包含服务器生成的随机数S、对TLS版本号的确认、选择使用的密码套件(非对称加密算法与对称加密算法)、本服务器的证书,公钥与私钥的签名。

(3)客户端回复ACK报文;然后验证证书与签名,确认无误后,自己计算出一对公私钥,并发送自己的公钥给服务器;客户端根据C、S与协商出来的密钥pre_master计算出主密钥master_secret,这将用来派生出对称加密密钥。同时,服务器按照相同的方式计算出主密钥master_secret。

(4)此时客户端与服务器都能知道所有派生出的密钥,注意双方对称加密的密钥是不同的,这主要是为了进一步提高安全性,但是双方都可以解密出对方加密的密文。

(5)客户端发送Change Cipher spec报文表明之后使用对称加密进行通信,并且发送对所有握手数据的摘要的加密密文(Finish报文)供服务器验证。

(6)服务器回复ACK报文;不等服务器向客户端发送Change Cipher spec报文与Finish报文,客户端就开始向服务器发送加密的HTTP请求报文,这就是False start。

(7)服务器回复ACK报文;服务器向客户端发送Change Cipher spec报文与Finish报文。

(8)客户端回复ACK报文;之后双方进入HTTP加密通信。

HTTPS优化

通常所说”HTTPS连接慢”就是指刚开始建立时相对于HTTP增加了TLS握手。而在对称加密通信过程中,对称加密算法的软硬件优化已经做得很好。对于HTTPS,有如下方面可以优化。

  • HSTS重定向技术。启用HSTS后,保证浏览器始终连接到网站的HTTPS加密版本,省去301跳转的出现,缩短访问时间。
  • TLS握手优化。使用ECDHE椭圆曲线密码套件,可以节约带宽与计算量,还能实现False start。
  • 会话标识符复用。
    • 服务器为每次会话生成并记录一个ID号,发送给客户端;
    • 若客户端重新发起连接,则要向服务器发送此ID号;
    • 服务器收到客户端发来的ID号,查找自己的会话记录,匹配ID后,双方就可以重新使用之前协商好的密钥进行加密通信;
  • 开启OSCP装订。服务器主动获取OSCP查询结果与证书一起发送给客户端,客户端可直接验证证书,省去浏览器的在线验证过程;
  • 完全前向加密。采用ECDHE算法,每次握手都会生成一对临时的公私钥,每次通信的密钥对均不同,即使之前的密钥被泄露,目前进行的加密通信也是安全的。

参考链接