在上一篇文章我们已经通过HTTP缓存优化静态文件访问速度,今天我们再来聊聊 HTTP协议优化 的问题。HTTP协议优化主要分为开启 HTTP/2 和 ssl缓存优化,下面我们单独对这两种方式详细的说明一下。
一:开启HTTP/2
HTTP/2标准是从Google的SPDY上进行改进的,比起HTTP/1.1提升了不少性能,尤其是需要并行多个请求的时候可以显著减少延迟。在现在的网络上,一个网页平均需要请求几十次,而在 HTTP 1.1 时代浏览器能做的就是多开几个TCP连接(通常是 6 个)进行并行HTTP请求,而 HTTP 2 中可以在一个TCP连接中进行多个HTTP请求。HTTP 2 原生支持多个并行请求,因此大大减少了顺序执行的请求的往返程,可以首要考虑开启。
HTTP是基于TCP上的协议,每一次HTTP请求都需要先建立一次TCP。到了HTTP/2,一个TCP可以发送多个HTTP请求
1.在 Nginx 中开启 HTTP 2.0 非常简单,只需要增加一个 http2 标志即可
listen 443 ssl;
# 改为
listen 443 ssl http2;
如果你担心你的用户用的是旧的客户端,比如 Python 的 requests,暂时还不支持 HTTP 2 的话,那么其实不用担心。如果用户的客户端不支持 HTTP 2,那么连接会自动降级为 HTTP 1.1,保持了后向兼容。因此,所有使用旧 Client 的用户,仍然不受影响,而新的客户端则可以享受 HTTP/2 的新特性
2.确认你的网站或者 API 开启了 HTTP 2
在 Chrome 中打开开发者工具,点开 Protocol 之后在所有的请求中都可以看到请求用的协议了。如果 protocol 这列的值是 h2 的话,那么用的就是 HTTP 2 了
二:在Nginx中,对于http1.0与http1.1是支持长连接的
http请求是基于TCP协议之上的,那么当客户端在发起请求前,需要先与服务端建立TCP连接,而每一次的TCP连接是需要三次握手来确定的,如果客户端与服务端之间网络差一点,这三次交互消费的时间会比较多,而且三次交互也会带来网络流量。当然,当连接断开后,也会有四次的交互。在一个连接上面执行多个请求,就能节省很多时间和流量。
1.开启长连接
# 开启长连接并设置连接超时时间
keepalive_timeout 120s;
#设置一个长连接最多可以服务多少个请求,超过自动关闭
keepalive_requests 100;
2.启用SSL Session缓存
启用 SSL Session 缓存可以大大减少 TLS 的反复验证,减少 TLS 握手的 roundtrip。虽然 session 缓存会占用一定内存,但是用 1M 的内存就可以缓存 4000 个连接,可以说是非常非常划算的。同时,对于绝大多数网站和服务,要达到 4000 个同时连接本身就需要非常非常大的用户基数,因此可以放心开启。
Nginx配置如下:
#设置ssl session缓存(10m是指缓存大小10兆)
ssl_session_cache shared:SSL:50m;
#设置长连接缓存过期时间
ssl_session_timeout 4h;
3.调整ssl_buffer_size
ssl_buffer_size 控制在发送数据时的 buffer 大小,默认设置是 16k。这个值越小,则延迟越小,而添加的报头之类会使 overhead 会变大,反之则延迟越大,overhead 越小。因此如果你的服务是 REST API 或者网站的话,将这个值调小可以减小延迟和 TTFB,但如果你的服务器是用来传输大文件的,那么可以维持 16k。如果是网站或者 REST API,建议值为 4k,但是这个值的最佳取值显然会因为数据的不同而不一样,因此请尝试 2 - 16k 间不同的值。
nginx中配置如下:
ssl_buffer_size 6K;
这些就是Nginx中比较常见的HTTP协议相关的配置优化,Nginx中还有一些不常见的HTTP协议相关配置,我这里就不一一举例说明了,有兴趣的可以前往官网查看
温馨提示:上述参数需要自己根据网站的实际情况进行调整,设置不当可能会使网站变得更慢。如果不明白其深意,最好不要开启长连接,开启HTTP/2即可。
PS:防止找不到本篇文章,可以收藏点赞,方便翻阅查找哦。
标签:缓存,HTTP,请求,ssl,TCP,连接,Nginx,HTTPS,30% From: https://www.cnblogs.com/cheyunhua/p/17119561.html