概述
摘自百度百科:
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。
HTTP 属于 OSI 网络七层协议模型中的"最上层":应用层。由请求和响应构成,是一个标准的客户端服务器模型。HTTP 是一个无状态的协议。
HTTP 默认端口号为 80。它也可以承载在 TLS 和 SSL 之上,通过加密、认证的方式实现数据传输的安全,称为 HTTPS,HTTPS 默认端口号为 443。
早期 HTTP 用于传输网页 HTML 文件,发展到现在,应用变得广泛,客户端软件(PC,Android,iOS 等)大部分通过 HTTP 传输数据。
HTTP1.1
发布于 1997 年
持久连接(persistent connection),即 TCP 连接默认不关闭,可以被多个请求复用,不用声明 Connection: keep-alive
。解决了 1.0 版本的 keepalive 问题,1.1 版本加入了持久连接,一个 TCP 连接可以允许多个 HTTP 请求;
加入了管道机制,在同一个 TCP 连接里,允许多个请求同时发送,增加了并发性,进一步改善了 HTTP 协议的效率,虽然允许复用 TCP 连接,但是同一个 TCP 连接里面,所有的数据通信是按次序进行的。;
新增了请求方式 PUT、PATCH、OPTIONS、DELETE 等;
HTTP2.0
发布于 2015 年
为了解决 1.1 版本利用率不高的问题,提出了 HTTP/2.0 版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题(HTTP2.0 使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比 HTTP1.1 大了好几个数量级);HTTP 请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在 2.0 版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了 1.0 旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。
另外也增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。
HTTP3.0
TTP3 的主要改进在传输层上。传输层不会再有那些繁重的 TCP 连接了。现在,一切都会走 UDP。QUIC 的意思是“快速 UDP Internet 连接”。协议的这种更改将显著加快连接建立和数据传输的速度。然而,虽说 UDP 肯定更快、更简单,但它不具备 TCP 的可靠性和错误处理能力。
HTTP3 是 HTTP2 的复用和压缩,协议从 TCP 更改为 UDP。然后,谷歌的那些人在协议中添加了他们做的层,以确保稳定性、数据包接收顺序及安全性。
因此,HTTP3 在保持 QUIC 稳定性的同时使用 UDP 来实现高速度,同时又不会牺牲 TLS 的安全性。是的,在 QUIC 中就有 TLS1.3,你可以用它发起优雅的 SSL。这些层的底层机制是下面这样:
通信过程
Nginx 实现 http2.0
检查 nginx 支持的模块
/usr/sbin/nginx -V
如果包含 --with-http_v2_module
这个模块,恭喜你可以直接使用
server {
listen 443 ssl http2;
...
使用方式很简单在配置文件 sever 模块里面的 listen 那边加个 http2 即可
可以通过 chrome 的 devtools 来检查修改是否生效
http1.1:
http2.0:
Nginx 实现 http3.0
编译安装支持 quic 的 nginx,可以参看《Nginx 配置启用 QUIC 和 HTTP/3.0》
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
# 只支持tls1.3
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers [TLS13+AESGCM+AES128|TLS13+CHACHA20]:TLS13+AESGCM+AES256:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA;
ssl_prefer_server_ciphers on;
ssl_early_data on;
ssl_ecdh_curve X25519:P-256:P-384;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
# OCSP Stapling 启用
ssl_stapling on;
ssl_stapling_verify on;
ssl_stapling_file /home/others/ocsp/nange.cn.ocsp.resp;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'quic=":443"; ma=2592000; ';
http3.0
我的博客是挂了 cloudflare 的 cdn,可以看出来 cloudflare 那边已经在使用 http3 了
如果本文对你有用,麻烦双击·666·加·关注·
原文引用:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于