HTTP协议的特点

  • 允许传输任意类型的数据,传输的类型由Content-Type加以标记
  • 无状态。对于客户端每次发送的请求,服务器都认为是一个新的请求,上一次会话与下一次会话之间没有联系。
  • 支持客户端/服务器模式

HTTP长连接

  • HTTP长连接,指的是复用TCP连接.多个HTTP请求可以复用同一个TCP连接,这样就节省了TCP连接建立和断开的消耗
  • HTTP1.0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
  • HTTP1.1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。

HTTP是否安全?

  • HTTP是明文传输,容易被黑客窃听或篡改,不安全
  • HTTPS在HTTP的基础上加入了SSL/TLS协议,靠SSL证书来验证服务器的身份,为客户端和服务器端之间建立SSL通道,确保数据传输安全。

HTTPS的原理

  • TCP三次握手,客户端发起一个HTTPS连接建立请求,客户端先发送一个ClientHello包,然后服务端相应Server Hello,并同时向客户端发送证书,双方经过密钥交换,最后使用交换的密钥加密数据
  • 具体过程

    • 协商加密算法,在Client Hello里面客户端会告知服务端自己当前的一些信息,包括客户端要使用的TLS版本、支持的加密算法、要访问的域名、给服务器生成一个随机数(Nonce)。需要提前告知服务器想要访问的域名以便服务器发送相应的证书过来。
    • 服务端相应Server Hello,告诉客户端服务端选中的加密算法
    • 接着服务端给客户端发来证书
    • 客户端使用证书认证机构CA公开发布的RSA公钥对该证书进行验证
    • 验证通过后,浏览器和服务器通过密钥交换算法产生的对称密钥
    • 最后开始传输数据,使用同一个对称密钥来加密。