如何让你的网站使用HTTP2.0
1. 什么是HTTP2.0
HTTP2.0是HTTP协议的升级版,HTTP2.0在HTTP1.1的基础上,优化了传输性能,同时增加了很多新的特性,比如多路复用、服务器推送、头部压缩等。HTTP2.0的传输性能比HTTP1.1有了很大的提升。
特 性 | HTTP/1.1 | HTTP/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";
}
}
}