HTTP 协议的演变
HTTP/1.0
- 缺点:每进行一次HTTP通信,都需要经历建立TCP连接、传输HTTP数据和断开TCP连接三个阶段,需要频繁的进行TCP的连接与断开管理。
HTTP/1.1
- 针对HTTP/1.0的缺点,增加了持久连接的特性,在一个TCP连接上可以传输多个HTTP请求,只要浏览器或者服务器没有明确断开连接,那么该TCP连接会一直保持,请求头中
Connection:keep-alive
就表示持久连接。 - 浏览器为每个域名最多同时维护6个TCP持久连接。
- 请求头中增加了Host字段,提供了虚拟主机的支持。
- 持久连接虽然能减少TCP的建立和断开次数,但是它需要等待前面的请求返回之后,才能进行下一次请求。在当前的请求没有结束之前,其他的请求只能处于阻塞状态。
HTTP/2
- 头部压缩,可消除冗余报头字段,减少不必要的带宽占用。
- 多路复用:引入二进制分帧层。
- 实现资源的并行传输,可以直接将数据提前推送到浏览器。
HTTP/3
- 基于UDP实现了类似于TCP的多路数据流、传输可靠性等功能,称为QUIC协议。
很多浏览器和Web服务器已经支持 HTTP/2,使用 HTTP/2 协议可以使得我们网站的性能得到大幅的提升。Akamai 公司建立的一个官方的演示,用以说明 HTTP/2 相比于之前的 HTTP/1.1 在性能上的大幅度提升:HTTP/2 is the future of the Web。
在 Nginx 中启用 HTTP/2
要开启 HTTP/2 需要 Nginx
版本在 1.10.0 以上,且 openssl 版本在 1.0.2
。
我们可以分别通过命令
nginx -v
,openssl version
进行版本查看,在最新版本的 Nginx 中,默认是支持 HTTP/2 协议的,只需要配置文件中做如下的配置即可开启。
server {
listen 443 ssl http2; # 表示启用 HTTP/2
server_name www.kangpeiqin.cn;
ssl_certificate "/usr/cert/ssl.pem";
ssl_certificate_key "/usr/cert/ssl.key";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
gzip on;
gzip_buffers 32 4K;
gzip_comp_level 9;
gzip_min_length 1k;
gzip_types application/javascript text/css text/xml;
gzip_vary on;
}
未启用HTTP/2:
启用后:
参考:
- HTTP1、HTTP2、HTTP3
- 《图解 HTTP》
欢迎关注我的个人博客&公众号- 个人博客:https://www.kangpeiqin.cn/#/index
- 个人博客:https://www.kangpeiqin.cn/#/index