如何让你的网站使用HTTP2.0

angrybird2332024-11-25Frontend性能优化nginx

1. 什么是HTTP2.0

HTTP2.0是HTTP协议的升级版,HTTP2.0在HTTP1.1的基础上,优化了传输性能,同时增加了很多新的特性,比如多路复用、服务器推送、头部压缩等。HTTP2.0的传输性能比HTTP1.1有了很大的提升。

特 性HTTP/1.1HTTP/2提升点
1. 协议格式基于文本协议,消息以纯文本格式传输。基于二进制协议,消息以二进制帧(frames)的形式传输。二进制协议更高效,解析速度更快,减少了错误处理的开销。
2. 多路复用每个请求需要单独的 TCP 连接,或使用持久连接(Keep-Alive),但请求是串行处理的。允许在同一个 TCP 连接上同时发送多个请求和响应,请求和响应可以交错传输。减少了连接数量,降低了延迟,避免了“队头阻塞”问题。
3. 头部压缩每次请求和响应都会发送完整的 HTTP 头部,即使头部信息与之前的请求相同。使用 HPACK 压缩算法对 HTTP 头部进行压缩,减少了重复头部信息的传输。显著减少了头部的大小,降低了带宽消耗。
4. 服务器推送服务器只能被动响应客户端的请求。服务器可以主动向客户端推送资源,而无需客户端明确请求。减少了客户端请求的等待时间,提高了页面加载速度。
5. 流优先级没有内置的优先级机制,所有请求默认是平等的。允许客户端为每个请求设置优先级,服务器可以根据优先级调整资源的传输顺序。优化了关键资源的加载顺序,提升了用户体验。
6. 安全性可以运行在 HTTP 或 HTTPS 上。主流浏览器(如 Chrome、Firefox)只支持通过 HTTPS 使用 HTTP/2。推动了 HTTPS 的普及,提高了数据传输的安全性。
7. 延迟由于队头阻塞和多次握手,延迟较高。通过多路复用、头部压缩和服务器推送等技术,显著减少了延迟。提升了 Web 应用的响应速度。
8. 兼容性不兼容 HTTP/2。完全兼容 HTTP/1.1 的语义(如方法、状态码、头部字段等)。现有的 Web 应用可以无缝迁移到 HTTP/2。

2. 如何使用HTTP2.0

a. 在服务器上安装nginx,配置nginx.conf文件,开启http2.0

  • 安装或升级你的nginx版本,需要nginx >= 1.9.5 在 Ubuntu/Debian 上
sudo apt update
sudo apt install nginx

在 CentOS/RHEL 上 sudo yum install nginx

  • 安装openssl 首先,检查系统是否已经安装了 OpenSSL 以及当前版本:
  openssl version

如果系统已经安装了 OpenSSL,那么会显示 OpenSSL 的版本信息。如果系统没有安装 OpenSSL,那么会显示“command not found”错误。 接下来,安装 OpenSSL:

sudo yum install openssl

添加SSL支持 要想添加SSL支持就需要添加证书,一种方式是购买或者在网上有一些免费的SSL证书可用,如果只是在测试环境中的话,还可以生成自签名证书。 安装好openssl后执行下面的命令然后需要输入名称、公司等等信息

openssl req -x509 -newkey rsa:4096 -keyout C:\ssl_certs\localhost.key -out C:\ssl_certs\localhost.crt -days 365 -nodes
  • 如果在正式环境中,你需要购买或生成一个有效的SSL证书,然后配置nginx以使用它。

  • 配置nginx.conf文件,开启http2.0

修改的地方有两个地方

# 重定向 HTTP 到 HTTPS
server {
  listen       80;
  server_name  www.xxx.com;
  return       301 https://$host$request_uri;
}
# HTTPS server
  server {
    # 添加 http2 支持
    listen       443 ssl http2; 
    server_name  www.xxx.com;

    ssl_certificate      /etc/ssl/localhost.crt;  # 替换为你的证书路径
    ssl_certificate_key  /etc/ssl/localhost.key;   # 替换为你的密钥路径

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;
        index  index.html index.htm;
        try_files $uri $uri/ index.html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    # 静态文件缓存配置
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
  }

  • 测试nginx配置文件,并重启nginx,查看网页是否已经是http2.0

b. 在windows本地安装nginx,配置nginx.conf文件,开启http2.0

开启nginx http2支持的条件: 1、openssl >= 1.0.2 2、nginx >= 1.9.5

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    #keepalive_timeout  0;
    keepalive_timeout  65;




    # 重定向 HTTP 到 HTTPS
    server {
      listen       80;
      server_name  localhost;
      return       301 https://$host$request_uri;
    }

    # HTTPS server
    #
    server {
      listen       443 ssl http2;
      server_name  localhost;

      ssl_certificate      ssl/localhost.crt;  # 替换为你的证书路径
      ssl_certificate_key  ssl/localhost.key;   # 替换为你的密钥路径

      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;

      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

      location / {
          root   html;
          index  index.html index.htm;
          try_files $uri $uri/ index.html;
      }

      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }

      # 静态文件缓存配置
      location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf)$ {
          expires 30d;
          add_header Cache-Control "public, no-transform";
      }
    }

}
最后更新时间 1/7/2025, 6:24:06 AM