HTTP 和 HTTPS | HTTP发展

1.http 和 https 的基本概念

http: 是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
https:是以安全为目标的 HTTP 通道,即 HTTP 下 加入 SSL 层进行加密。其作用是:建立一个信息安全通道,来确保数据的传输,确保网站的真实性。
:::info
SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。
:::

2.http 和 https 的区别及优缺点?

  • http 是超文本传输协议,信息是明文传输,HTTPS 协议要比 http 协议安全,https 是具有安全性的 ssl 加密传输协议,可防止数据在传输过程中被窃取、改变,确保数据的完整性(当然这种安全性并非绝对的,对于更深入的 Web 安全问题,此处暂且不表)。
  • http 协议的默认端口为 80,https 的默认端口为 443。
  • http 的连接很简单,是无状态的。https 握手阶段比较费时,会使页面加载时间延长 50%,增加 10%~20%的耗电。
  • https 缓存不如 http 高效,会增加数据开销。
  • Https 协议需要 ca 证书,费用较高,功能越强大的证书费用越高。
  • SSL 证书需要绑定 IP,不能再同一个 IP 上绑定多个域名,IPV4 资源支持不了这种消耗。

3.https 协议的工作原理

客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤:

  1. 客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 链接。
  2. web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),传输给客户端。
  3. 客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
  4. 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
  5. web 服务器通过自己的私钥解密出会话密钥。
  6. web 服务器通过会话密钥加密与客户端之间的通信。

相对于HTTP1.0,HTTP1.1的升级差异

  • 默认长连接。HTTP1.0也提供长连接,但是默认是短连接,要想长连接必须将头部的connection设置为keep-alive。而HTTP1.1默认开启connection:keep-alive,不用设置。
  • 强制设置Host请求首部字段。Host字段是HTTP1.1唯一一个强制要求设置的字段。
  • 管线化(pipelining):不用等待响应,就可以发送下一个请求。
  • 缓存处理的扩展:HTTP1.1增加的Cache-control可以控制缓存行为,并且支持断点续传。
  • 带宽优化:HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了 ,并且不支持断点续传。HTTP1.1增加了range请求头部字段,允许客户端只请求服务器某个对象的一部分资源。返回206状态码表示请求一部分资源成功,否则返回200的状态码,并且返回对象的全部资源。

在 HTTP/1.1 时代主要增加了:

  • 默认长连接:建立连接后,在一定时间内不会断开,其他请求都可以使用这条连接。
  • pipelining 管线化:通过这个管道,浏览器的多个请求可以同时发到服务器,但是服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。

相对于HTTP1.0,HTTP2.0的升级差异

  • 多路复用:HTTP2建立一个TCP连接,一个连接上面可以有任意多个流,消息分割成一个或多个帧在流里面传输。帧传输过去之后,在进行重组,形成一个完整的请求和响应。
    :::info
    这里注意:Stream是乱序的,但同一个Stream里面的帧是按序传输的,二进制帧到达后,对方将Stream ID相同的二进制帧组装成完整的请求报文响应报文
    20191207164926527.jpg
    :::

  • 请求优先级:为并发的请求设置优先级,重要的请求会先响应。

  • 压缩头部:HTTP1.x中采用文本格式传输,每个传输会增加500~800字节的开销。每次请求都要带上向cookie、user-agent这样相同的首部。HTTP采用HPACK压缩双来压缩头部。在浏览器与服务器之间:
    :::info

    1. 维护一份相同的静态字典,包含常见的头部名称,以及常见的头部值
    2. 维护一份相同的动态字典,可以动态的添加内容
    3. 通过静态Huffman编码对传输的首部字段进行编码
      :::
  • 服务器推送:以SPDY一样,支持服务器主动向客户端推送数据的功能。


开发相关

  1. 现代浏览器中,都不支持非https下的http2
  2. 在Golang模拟请求时,需使用http2.ConfigureServer方法对server进行配置
  3. 当调试网站时,请求头中包含":"时,即可断定采用了HTTP2协议
  4. 普通http请求头加入":"是无效的。
  5. HTTP/2 的多路复用能够解决 HTTP 队头阻塞问题,更充分地利用 TCP 带宽。

参考文章

连八股文都不懂还指望在前端混下去么
HTTP 2.0 与HTTP1.1的差别
HTTP1.0、HTTP1.1和HTTP2.0的区别
面试官问:你了解HTTP2.0吗?
HTTP1.0、HTTP1.1和HTTP2.0主要特性对比

posted @ 2023-07-26 17:03  skywa1ker  阅读(26)  评论(0编辑  收藏  举报