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 服务器通信时有以下几个步骤:
- 客户端使用 https url 访问服务器,则要求 web 服务器建立 ssl 链接。
- web 服务器接收到客户端的请求之后,会将网站的证书(证书中包含了公钥),传输给客户端。
- 客户端和 web 服务器端开始协商 SSL 链接的安全等级,也就是加密等级。
- 客户端浏览器通过双方协商一致的安全等级,建立会话密钥,然后通过网站的公钥来加密会话密钥,并传送给网站。
- web 服务器通过自己的私钥解密出会话密钥。
- 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相同的二进制帧组装成完整的请求报文 和响应报文
::: -
请求优先级:为并发的请求设置优先级,重要的请求会先响应。
-
压缩头部:HTTP1.x中采用文本格式传输,每个传输会增加500~800字节的开销。每次请求都要带上向cookie、user-agent这样相同的首部。HTTP采用HPACK压缩双来压缩头部。在浏览器与服务器之间:
:::info- 维护一份相同的静态字典,包含常见的头部名称,以及常见的头部值
- 维护一份相同的动态字典,可以动态的添加内容
- 通过静态Huffman编码对传输的首部字段进行编码
:::
-
服务器推送:以SPDY一样,支持服务器主动向客户端推送数据的功能。
开发相关
- 现代浏览器中,都不支持非https下的http2
- 在Golang模拟请求时,需使用http2.ConfigureServer方法对server进行配置
- 当调试网站时,请求头中包含":"时,即可断定采用了HTTP2协议
- 普通http请求头加入":"是无效的。
- HTTP/2 的多路复用能够解决 HTTP 队头阻塞问题,更充分地利用 TCP 带宽。
参考文章
连八股文都不懂还指望在前端混下去么
HTTP 2.0 与HTTP1.1的差别
HTTP1.0、HTTP1.1和HTTP2.0的区别
面试官问:你了解HTTP2.0吗?
HTTP1.0、HTTP1.1和HTTP2.0主要特性对比