`
july05122868
  • 浏览: 17304 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于HTTP协议中的KeepAlive属性

阅读更多
首先就看一下KeepAlive出现的原因吧:
当一个客户端向服务器发送http请求时,两者之间会建立一个tcp连接,然后服务器发回响应信息同时关闭连接。如果请求的的页面中含有别的资源连接,比如图片、flsah等,就会再次创建连接。KeepAlive的作用就是在第一次创建连接时,服务器会把这个tcp连接保持一段时间(服务器端会有一个keepaliveTime的最大时间,超过时间就断开连接)。这样就不会频繁的去建立tcp连接,同一次请求中的信息传递都可以使用同一个tcp连接。

KeepAlive的工作原理:
在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中HTTP1.0需要在request中增加“Connection: keep-alive” header才能够支持,而HTTP1.1默认支持。(大家可以利用抓包工具看一下)
HTTP1.0 KeepAlive支持的数据交互流程如下:
a)Client发出request,其中该request的HTTP版本号为1.0。同是在request中包含一个header:“Connection: keep-alive”。
b)Web Server收到request中的HTTP协议为1.0及“Connection: keep-alive”就认为是一个长连接请求,其将在response的header中也增加“Connection: keep-alive”。同是不会关闭已建立的tcp连接。
c)Client收到Web Server的response中包含“Connection: keep-alive”,就认为是一个长连接,不close tcp连接。并用该tcp连接再发送request。(跳转到a))
HTTP1.1 KeepAlive支持的数据交互流程如下:
a)Client发出request,其中该request的HTTP版本号为1.1。
b)Web Server收到request中的HTTP协议为1.1就认为是一个长连接请求,其将在response的header中也增加“Connection: keep-alive”。同是不会关闭已建立的tcp连接。
c)Client收到Web Server的response中包含“Connection: keep-alive”,就认为是一个长连接,不close tcp连接。并用该tcp连接再发送request。(跳转到a))

关于KeepAlive的分析:
现在的一些服务器都可以设置KeepAlive是否开启,以及KeepAlive的超时时间,服务器支持的KeepAlive数量(数量一般不会很大,否则会对服务器产生很大的压力)。
那么我们考虑3种情况:
  1、用户浏览一个网页时,除了网页本身外,还引用了多个 javascript 文件,多个 css 文件,多个图片文件,并且这些文件都在同一个 HTTP 服务器上。
  2、用户浏览一个网页时,除了网页本身外,还引用一个 javascript 文件,一个图片文件。
  3、用户浏览的是一个动态网页,由程序即时生成内容,并且不引用其他内容。
对于上面3中情况,1 最适合打开 KeepAlive ,2 随意,3 最适合关闭 KeepAlive
打 开 KeepAlive 后,意味着每次用户完成全部访问后,都要保持一定时间后才关闭会关闭 TCP 连接,那么在关闭连接之前,必然会有一个服务器进程对应于该用户而不能处理其他用户,假设 KeepAlive 的超时时间为 10 秒种,服务器每秒处理 50 个独立用户访问,那么系统中 Apache 的总进程数就是 10 * 50 = 500 个,如果一个进程占用 4M 内存,那么总共会消耗 2G 内存,所以可以看出,在这种配置中,相当消耗内存,但好处是系统只处理了 50次 TCP 的握手和关闭操作。
如果关闭 KeepAlive,如果还是每秒50个用户访问,如果用户每次连续的请求数为3个,那么 Apache 的总进程数就是 50 * 3 = 150 个,如果还是每个进程占用 4M 内存,那么总的内存消耗为 600M,这种配置能节省大量内存,但是,系统处理了 150 次 TCP 的握手和关闭的操作,因此又会多消耗一些 CPU 资源。

分享到:
评论

相关推荐

    springboot-keepalive设置测试

    在这个“springboot-keepalive设置测试”项目中,我们将关注的是如何在Spring Boot应用中配置和测试HTTP长连接(keepalive)功能,以优化服务器与客户端之间的通信效率。 HTTP长连接,也被称为持久连接,允许TCP...

    用C#实现HTTP协议下的多线程文件传输

    - `Connection`属性和`KeepAlive`属性:控制连接是否保持活跃状态。 - `Content-Length`属性:指定请求消息体的长度。 - `Content-Type`属性:指定请求消息体的MIME类型。 - `AddRange`方法:指定请求的字节范围...

    nginx keepalive的具体使用

    // 开启keepalive属性 int keepidle = 60; // 若该连接在60秒内没有任何数据往来,则进行探测 int keepinterval = 5; // 探测时发包的时间间隔为5秒 int keepcount = 3; // 探测尝试的次数 setsockopt(rs, SOL_...

    c# Socket长连接 短链接 自己封装 通讯

    在C#中,可以通过设置Socket的KeepAlive属性来维持长连接。 3. **自定义通信协议**:描述中提到的包结构(包头、指令、内容)表明开发者正在设计自己的通信协议。包头用于指示接下来的数据包大小,这有助于接收端...

    ONENET设备终端接入协议4-MQTT.docx

    3. **登录信息填写**: 完成设备属性填写,并在项目中添加新设备,获取项目ID、设备ID及鉴权信息(authinfo)。 4. **TCP连接**: 向指定地址发送连接请求。服务器地址:183.230.40.39,端口:6002。 #### 四、Packet格式...

    HttpClient以及获取页面内容应用

    HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta...

    RTSP转HLSV1.0.pdf

    HLS(HTTP Live Streaming)是一种流媒体传输协议,它将媒体文件切分为一系列小文件(TS格式),并通过HTTP协议分发给客户端。客户端通过播放列表(M3U8格式)中的链接顺序播放这些小文件。HLS特别适用于在互联网上...

    Web服务器压力测试

    -k 启用HTTP KeepAlive功能,允许一个TCP连接上发送多个请求。 -n requests 执行的总请求数,若不设置默认仅执行一次请求。 -p POST-file 指定包含要POST的数据的文件。 -P proxy-auth-username:password 使用...

    11个网络操作客户端服务器类项目源码.rar

    8. **套接字选项与属性**:Socket类提供了许多属性和方法,如NoDelay(禁用Nagle算法)、KeepAlive(保持连接活跃)等,可以根据实际需求调整网络通信的性能和行为。 9. **设计模式**:在这些项目源码中,可能会...

    jk2.properties+workers2.properties

    `socket_keepalive`属性如果设为`true`,则会在连接空闲时保持活动状态,防止因网络问题导致的连接中断。 配置完成后,你需要在Apache的配置文件(通常是`httpd.conf`)中引入`jk2.properties`,并通过`LoadModule`...

    c#重启路由几种方式(源码)

    此外,了解HTTP协议的基本知识以及路由器管理界面的API文档对于实现这类功能至关重要。在实际应用中,开发者应根据具体需求选择最适合的方法,并始终遵循最佳实践,确保代码的可维护性和网络设备的安全稳定运行。

    C# tcp/ip Socket Programmer

    1. **TCP/IP基础**:首先,你需要理解TCP/IP协议族的基本概念,包括OSI模型、TCP/IP四层模型(应用层、传输层、网络层、数据链路层)以及各层的主要协议,如HTTP、TCP、UDP、IP等。 2. **C# Socket API**:C#提供了...

    俄国牛人写的开源爬虫xNet.zip

    这个一个俄国牛人写的开源工具,为啥说他强悍了,因为他将所有Http协议的底层都实现了一遍,这有啥好处?只要你是写爬虫的,都会遇到一个让人抓狂的问题,就是明明知道自己Http请求头跟浏览器一模一样了,为啥还会...

    Socket 编程 教科书

    在TCP/IP协议族中,Socket主要分为两种类型:流式Socket(TCP)和数据报Socket(UDP)。TCP提供面向连接、可靠的字节流服务,而UDP则是无连接、尽最大努力交付的数据报服务。 在教科书中,我们可能会学到以下几个...

    apache2.2中文使用手册

    2. KeepAlive:设置合适的KeepAlive选项可以优化连接复用,减少HTTP请求的延迟。 3. Caching:通过mod_cache模块缓存静态资源,减轻服务器负担。 六、故障排查与安全 1. 错误报告:阅读错误日志是解决Apache问题的...

    Apache2中文教程

    例如,使用MPM(Multi-Processing Module)如prefork或worker,调整`MaxKeepAliveRequests`和`KeepAliveTimeout`参数,以及启用GZIP压缩等。 九、故障排查 当遇到问题时,Apache2的错误日志是排查故障的重要资源。...

    H5stream 中文文档

    H5stream的配置文件位于conf/h5ss.conf,配置文件中定义了HTTP、RTSP、RTMP、FLV、HLS、WEBRTC等服务器的配置,例如RTSP服务器配置中SSL代表RTSP over TCP/TLS。配置文件还支持日志和线程池的设置,以及视频源的配置...

    SocketDemo.zip

    8. **套接字选项和属性**:Socket类有许多可配置的选项,例如NoDelay(禁用Nagle算法)、KeepAlive(保持连接活动)等,可以根据实际需求调整。 9. **关闭和清理**:完成通信后,务必调用`Close()`或`Dispose()`...

    httpd.conf文件配置详解

    - 存储关于 Apache 当前工作状态的信息,如活动连接数等。这有助于了解服务器的当前负载情况。 - **Timeout 300** - 设置连接超时时间,单位为秒。默认情况下,如果客户端在 300 秒内没有发送任何数据,则连接将被...

Global site tag (gtag.js) - Google Analytics