首先说到 http 版本的区别,这里其实有 3 个 http 需要我们了解,分别是 http1.0 / http1.1 / http2.0
http1.0 和 http1.1 和 http2.0 的区别
http1.X版本的缺陷概括来说是:线程阻塞,在同一时间,同一域名的请求有一定的数量限制,超过限制数目的请求会被则塞。
http1.0
缺点:浏览器和服务器只保持短暂的连接,浏览器的每次请求都需要对服务器建立一个 TCP 连接(TCP 连接的成本很高没因为每次新建都需要对服务器三次握手),服务器请求完成后立刻断开 TCP 连接,服务器也不会记录过往的每次请求。
解决方式:在请求的头信息中添加 Connection 字段并设定值为 keep-alive
http1.1
而 http1.1 相对于 http1.0 提升了下面这些点:
- 引入持久连接 : 即 TCP 默认不关闭,可以被多个请求复用,不用声明 keep-alive (对于同一个域名,大多数浏览器允许同时建立 6 个连接)
- 管道机制 : 同一个 TCP 连接中,客户端可以同时发送多个请求
- 分块传输编码 : 服务器每产生一块数据,就发送一块,用
流模式
取代缓存模式
- 新增请求方式
PUT:请求服务器存储一个资源
DELETE:请求服务器删除标识的资源
OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求
CONNECT:保留请求以供将来使用
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
但是虽然相对于 http1.0 改进了很多地方, http1.1 还是有些许缺点:
- 队头拥塞 :虽然允许了 TCP 的多路复用,但是在同一个 TCP 连接中,所有的请求都还是按照次序执行的,服务器只有在一个请求处理完了之后才会接着处理下一个,这导致的问题是如果排在前面的请求很慢,那么后面的请求就会一直处于等待状态,这就是
队头拥塞
。
那么如何来解决这个问题呢?我们可以通过减少请求数
,和同时多开持久连接
来解决。
http2.0
首先我们来了解一下 http2.0 的特点~~
-
采用二进制格式而非文本格式
http1.1 的头信息是 ASCII 编码(文本),而数据体可以使二进制也可以是文本,但是 http2.0 无论是头信息还是数据体都是二进制,统称为帧,这是因为二进制解析起来更加的高效,并且紧凑,出错率也更少。
-
完全的多路复用,而非 有序拥塞 的,只需要一个连接即可实现并行
http2.0 复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,避免了
队头拥塞
。 -
报头压缩,减低开销
http 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如 Cookie ,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度,所以 http2.0 对于相同的头部,不必再通过请求发送,只需发送一次。
并且引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送
另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。 -
服务器端推送
http2.0 允许服务器在未经客户端请求的情况下,向客户端发送资源
通过推送服务器任务,客户端可以把需要的内容存储在客户端中,避免了往返的延迟。
http 和 https 的区别
首先我们知道,http 协议是承载于 TCP 协议之上的,而在 http 和 TCP 之间增加一个安全协议层 (SSL 或者 TSL)就形成了我们所说的 https。
https 的主要作用
- 对数据进行加密,并建立一个安全通道,以此来保证传输过程中数据的安全。
- 对网站服务器进行真实的身份认证。
https 和 http 的区别
- https 是加密传输协议,http 是明文传输协议
- https 需要用到 ssl 证书,http 不用
- https 比 http 更加的安全,对搜索引擎更加友好,利于 seo
- https 标准端口 443,http 标准端口 80
- https 基于传输层,http 基于应用层
https 和 http 在工作流程上的区别
http 的工作流程:
- 建立一个 TCP 连接
- 浏览器发送 http 请求信息到服务端
- 服务器发送 http 回应信息到浏览器
- tcp 连接关闭
由于 https 在 http 的基础上新增了 ssl 证书的验证,所以在进行 http 请求之前,会进行如下的验证:
- 验证服务器端
- 客户端和服务器端选择加密算法和密码,确保双方都支持
- 验证客户端(可选)
- 使用公钥加密技术来生成共享加密数据
- 创建一个加密的 SSL 连接
- 基于该 SSL 连接传递 HTTP 请求