Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HTTPKeepAlive,开启还是关闭

HTTPKeepAlive,开启还是关闭

作者头像
LA0WAN9
发布于 2021-12-14 00:11:31
发布于 2021-12-14 00:11:31
51700
代码可运行
举报
文章被收录于专栏:火丁笔记火丁笔记
运行总次数:0
代码可运行

所谓「HTTP Keep-Alive」,在维基百科里称为「HTTP Persistent Connection」,说白了就是复用HTTP连接,如此一来理论上客户端的用户体验会更流畅,但是与之相对服务端不得不维持大量的连接。开启还是关闭,这是个问题。

一个经常用来讲解HTTPKeepAlive的例子一般是这样描述的:当我们访问一个包含了若干个图片的网页时,如果HTTPKeepAlive是关闭的,那么页面中每一个图片都会发起一次连接请求;但是如果HTTPKeepAlive是开启的,那么因为可以复用HTTP连接,所以可以节省很多不必要的开销。

听起来不错!不过现在可不是用猫上网的年代了,当今高带宽低延迟的网络让建立HTTP连接不再是什么难事儿,此时访问一个包含了若干个图片的网页时,与其打开一个连接然后串行的请求图片,不如打开多个连接然后并行的请求图片,事实上现代浏览器也都是这么干的,最佳实战甚至倡导通过多域名进一步提升并发数。

此外,再让我们看看某台开启了KeepAlive的Nginx服务器Status结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
shell> curl -s http://127.0.0.1/status
Active connections: 95896
server accepts handled requests
 66542336512 66542336512 67713042963
Reading: 1945 Writing: 82 Waiting: 93869

其中,各项结果的含义如下:

  • Active connections: number of all open connections
  • Server accepts handled requests: nginx accepted 66542336512 connections, handled 66542336512 connections (no one was closed just it was accepted), and handles 67713042963 requests
  • Reading: nginx reads request header
  • Writing: nginx reads request body, processes request, or writes response to a client
  • Waiting: keep-alive connections, actually it is active – (reading + writing)

实际复用HTTP连接的效果如何呢:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
67713042963 / 66542336512 = 1.01 requests per connection

额滴神啊,基本等同于没用!为什么会这样?因为这是一台WebService服务器,客户端只是偶尔访问一次,此时的KeepAlive连鸡肋都不如,为了服务器的性能,关闭它吧!

HTTPKeepAlive,开启还是关闭,大家不妨结合自己的客观情况重新思考一下。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验