正确设置:Nginx的HTTP/2 可加速11.81%到47.7%

HTTP/2是HTTP协议中最新版本,它对网站及用户具有许多优势。2021年已经到来,呼吁所有网站都检查一下WEB环境,强烈建议开启HTTP/2。自成立以来,万维网(WWW)一直基于两种技术:超文本标记语言HTML和超文本传输​​协议HTTP。与HTML相比,HTTP的创新一直是很谨慎的,因为网站基本上都是需要24小时不间断提供访问服务的,如果出现任何意外情况,代价都是巨大的。所以对于HTTP技术来说,广泛的兼容性、稳定性一直是重中之重。

HTTP/2于于2015年2月17日被IESG(互联网工程指导小组)正式批准,多数主流浏览器已经在2015年底支持了该协议。到了如今,所有的浏览器均支持HTTP/2(已经被淘汰的浏览器除外)。但还有很多网站任然采用HTTP 1.1这一过时的传输协议。

HTTP/2与HTTP/1.1比较

  • HTTP/2 相比 HTTP/1.1 的修改并不会破坏现有程序的工作,但是新的程序可以借由新特性得到更好的速度。
  • HTTP/2 保留了 HTTP/1.1 的大部分语义,例如请求方法、状态码乃至URI和绝大多数HTTP头部字段一致。而 HTTP/2 采用了新的方法来编码、传输 客户端<——>服务器 间的数据。

在Nginx中启用HTTP/2

要在Nginx中启用HTTP/2,需要满足以下要求:

  • Nginx版本1.9.5或更高版本。可以通过运行(nginx -v)命令来检查Nginx版本 。
  • OpenSSL版本1.0.2或更高版本。可以通过运行(OpenSSL version)命令来检查OpenSSL版本。
  • Let’s Encrypt的SSL/TLS证书或其它SSL/TLS证书。
  • 启用TLS 1.2或更高版本的协议。否则,将无法使用HTTP/2。HTTP/2的实现必须对TLS上的HTTP/2使用TLS版本1.2或更高版本。

http2 参数添加到虚拟主机中的 listen指令中:

listen 443 ssl http2;

最后重启Nginx

一个最简单的示例:

server {

  listen 443 ssl http2;
  listen [::]:443 ssl http2;

  server_name example.com;
  root /path/to/public;

  ssl_certificate /path/to/certificate.crt;
  ssl_certificate_key /path/to/private.key;

  ssl_protocols TLSv1.2;

}

检验HTTP/2是否启用

在Chrome浏览器中(Microsoft Edge或Firefox浏览器均可),使用F12进入到调试模式,访问相关页面,查看Protocol是否为h2。下面以站长帮(https://www.zhanzhangb.com首页)为例:

Chrome F12查看Protocol
Chrome F12查看Protocol

HTTP/2简介

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),简称为h2(基于TLS/1.2或以上版本的加密连接)或h2c(非加密连接),是HTTP协议的的第二个主要版本,使用于万维网。

HTTP/2是HTTP协议自1999年HTTP 1.1的改进版RFC 2616发布后的首个更新,主要基于SPDY协议。它由互联网工程任务组(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于2014年12月将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。

HTTP/2标准于2015年5月以RFC 7540正式发表。HTTP/2的标准化工作由Chrome、Opera、Firefox、Internet Explorer 11、Safari、Amazon Silk及Edge等浏览器提供支持。

根据W3Techs的数据,截至2019年6月,全球有36.5%的网站支持了HTTP/2。

HTTP/2的新特性

在 HTTP/2 的第一版草案(对 SPDY 协议的复刻)中,新增的性能改进不仅包括HTTP/1.1中已有的多路复用,修复队头阻塞问题,允许设置设定请求优先级,还包含了一个头部压缩算法(HPACK)。此外, HTTP/2 采用了二进制而非明文来打包、传输 客户端<——>服务器 间的数据。

有别于HTTP/1.1在连接中的明文请求,HTTP/2与SPDY一样,将一个TCP连接分为若干个流(Stream),每个流中可以传输若干消息(Message),每个消息由若干最小的二进制帧(Frame)组成。这也是HTTP/1.1与HTTP/2最大的区别所在。 HTTP/2中,每个用户的操作行为被分配了一个流编号(stream ID),这意味着用户与服务端之间创建了一个TCP通道;协议将每个请求分割为二进制的控制帧与数据帧部分,以便解析。这个举措在SPDY中的实践表明,相比HTTP/1.1,新页面加载可以加快11.81% 到 47.7%

网站为了使请求数减少,通常采用对页面上的图片、脚本进行极简化处理。但是,这一举措十分不方便,也不高效,依然需要诸多HTTP链接来加载页面和页面资源。

HTTP/2引入了服务器推送,即服务端向客户端发送比客户端请求更多的数据。这允许服务器直接提供浏览器渲染页面所需资源,而无须浏览器在收到、解析页面后再提起一轮请求,节约了加载时间。


《正确设置:Nginx的HTTP/2 可加速11.81%到47.7%》有1条评论

发表评论