HTTP

HTTP协议是基于TCP/IP,并且使用了请求-应答的通信模式

特性

  1. 简单:报文格式就是header+body,易于理解
  2. 灵活和易拓展:HTTP协议里各类请求方法、状态码、投资端等都允许开发人员自定义和扩充;同时,由于它位于应用层,它的下层可以随意变化(HTTPS就是在TCP与HTTP层间加入了SSL/TLS的安全协议;HTTP/3将TCP换成了基于UDP的QUIC)
  3. 应用广泛和跨平台:HTTP协议应用广泛,且具有跨平台的优越性
  4. 无状态:好处:不需要额外的资源来记录状态信息,减轻CPU的负担;坏处:在处理关联性操作时很麻烦(解决:cookie)
  5. 明文传输:可以方便我们阅读,为调试工作带来了便利性;但会造成信息的不安全。
  6. 不安全明文通信不加密,内容会有被窃听的可能;不验证通信方的身份,有可能遭遇伪装;无法证明报文的完整性,有可能报文已经遭遇篡改。

    HTTP/1.1

    特点

  7. 提出了长连接的通信方式(持久连接),减少了TCP链接的重复建立和断开造成的额外开销,减轻服务端的负载;特点:只要任意一端没有明确提出断开连接,则保持TCP的连接状态

  8. 管道网络传输:由于采用了长连接的模式,使得管道网络传输成为了可能;即可在同一个TCP链接里面,客户端发起多个请求,只要第一个请求发出去了,不必等他回来就可以发送第二个请求,减少整体响应时间。但是服务器还是按照顺序,依次回应请求,如果前面回应的特别慢,后面就会有许多请求等待,这称为队头阻塞

    缺点

  9. 请求/响应头部未经压缩就发送,首部信息越多延迟越大,只能压缩Body部分

  10. 发送冗长的首部,每次发送相同的首部造成浪费
  11. 服务器按请求顺序响应,会造成队头阻塞
  12. 没有请求优先级控制
  13. 请求只能从客户端开始,服务器只能被动响应

    HTTP/2

  14. 头部压缩:如果同时发送多个请求,且头部是相似或一样的,协议会自动消除重复部分—-这就是HPACK算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个信息表,生成一个索引号,以后就不发送相同的字段了,只发送索引号。

  15. 二进制格式:不再像HTTP/1.1中纯文本形式,采用了二进制格式,头部和数据体的信息都是二进制,统称为;至此,计算机收到报文后无需将明文的报文转化为二进制,而是直接解析二进制报文,提升了数据传输的效率
  16. 数据流:数据包不再是按需发送。每个请求或回应的所有数据包成为一个数据流,每个数据流都有一个标记,(其中规定客户端的数据流编号为奇数;服务器发出的数据流编号为偶数);
  17. 客户端还能指定数据流的优先级,优先级高的请求,服务器先响应
  18. 多路复用:可以在一个连接中发送多个请求或回应,不用按序一一回应,移除了HTTP/1.1的串行请求,不用排队等待也就不会出现队头阻塞,降低了延迟,提高了连接的利用率
  19. 服务器推送:改善了请求-应答的工作模式,服务器不再是被动响应,也可以主动发送信息。

    缺点

    多个HTTP请求复用在一个TCP连接中,下层的TCP协议不知道有多少个HTTP请求,一旦发生了丢包,就会触发TCP的重传机制,因此一个TCP连接中所有的HTTP请求必须等待这个丢失的包被传送回来

    HTTP/3

    基于TCP传输层的问题,HTTP/3吧下层的TCP改成了UDP。UDP不能可靠传输,但基于UDP的QUIC协议可以实现类似TCP的可靠传输

    特点

  20. UDP不管顺序、不管丢包,因此不会出现1.1中的队头阻塞或者2中的丢一个包就要全部重传的问题

  21. QUIC有一套机制可以保证传输的可靠性,当某个流发生丢包时,就阻塞这个流,其他的流不会受到影响
  22. TLS3升级成1.3版本,头部压缩算法用了QPACK
  23. HTTPS建立以此连接需要完成六次交互,三次握手以及TLS/1.3的三次握手,QUIC直接把以往的将六次交互合并成了三次,减少了交互次数

    HTTPS

    在TCP和HTTP网络层之间加入SSL/TLS的安全协议,使得报文能够加密传输

    与HTTP的区别

  24. HTTPS需要在TCP的三次握手后在进行SSL/TLS的握手过程,才能进入加密报文传输

  25. HTTP的端口是80,HTTPS的端口是443
  26. HTTPS需要向CA(证书权威机构)申请数字证书以此来保证服务器的身份是可信的。

    如何解决HTTP的不安全这一缺点

  27. 使用混合加密(对称加密和非对称加密相结合)保证信息的机密性,解决了窃听的风险

  28. 使用摘要算法来保证信息的完整性
  29. 使用数字证书保证服务器的身份是可信的