`
mowengaobo
  • 浏览: 164141 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

【转】浏览器,apache的连接超时详解

 
阅读更多

前言

要理解浏览器和apache之间的连接超时问题,需要先明白http的keep-alive属性。先简单介绍keep-alive,您可以从网上查找更加详细的介绍。

浏 览器和apache都是基于http协议的。而http协议中的keep-alive属性通俗的解释就是浏览器和apache第一次建立TCP连接,传输 完数据不会立刻断开这个TCP连接,而是继续等待下一个请求。保持一段时间(keep-alive-time)后才会断开连接。

下面做个测试,查看apache在打开keep-alive支持和关闭keep-alive支持时候的TCP连接状态。

 

 

服务端 虚拟机上的Centos
客户端 本机上IE6浏览器
服务端地址 192.168.212.128
客户端地址 192.168.212.1
访问的文件test.html
	

<html xmlns="http://www.w3.org/1999/xhtml">  

<head>  

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  

<link rel="stylesheet" type="text/css" href="./main.css" />  

<script type="text/javascript" src="./main.js"></script>  

</head>  

<body>  

您知道吗?A处和B处的色值是一样的。<br/>  

<img src="./main.jpg">  

</body>  

</html>  
 

首先关闭apache的keep-alive参数,打开httpd.conf。

image

打开浏览器访问apache。使用netstat命令查看连接状态。

#netstat –nt|grep –i ’80′

image

可以看到四个连接,因为本地访问速度很快,只能抓取到TIME_WAIT得状态。那一个test.html网页为什么会有四个连接呢?

看test.html的内容可以知道有:

1,main.css 文件

2,mian.js   文件

3,main.jpg 图片

4,本身的test.html文件

所以有四个连接。

再看看关闭apache的keep-alive支持后的连接状态。

image

重启服务器,浏览器访问test.html,在查看连接。

#service httpd restart

#netstat –nt|grep –i ’80′

image

可以看到只有一个连接。而且这个连接状态是ESTABLISHED。我们在httpd.conf中设置了keepAlliveTimeout=15,所以连接建立后15秒后才关闭连接。

image

测试得到的结论

如果关闭apache的keep-alive属性,访问的页面中的(上例中test.html)所有文件,包括js,css,图片等等都要建立新的TCP连接。有多少引用文件就建立多少个连接。具体多少个文件可以使用火狐的BUG工具查看。

image

上图中最下面的11个请求就是该网页中需要引用的文件数。

如果开启apache的keep-alive属性,访问的页面中的(上例中的test.html)所有文件,包括js,css,图片等等只建立一个TCP连接,按照顺序传输所有数据。所有数据传输完等待KeepAliveTimeout =15秒后再关闭该连接。

网上看到的参考:

假 如当前Apache每秒响应100个用户访问,KeepAliveTimeOut=5,此时httpd进程数就是100*5=500个(prefork模 式),一个httpd进程消耗5M内存的话,就是500*5M=2500M=2.5G,夸张吧?当然,Apache与Client只进行了100次TCP 连接。如果你的内存够大,系统负载不会太高,如果你的内存小于2.5G,就会用到Swap,频繁的Swap切换会加重CPU的Load。

现 在我们关掉KeepAlive,Apache仍然每秒响应100个用户访问,因为我们将图片、js、css等分离出去了,每次访问只有1个 request,此时httpd的进程数是100*1=100个,使用内存100*5M=500M,此时Apache与Client也是进行了100次 TCP连接。性能却提升了太多。

浏览器的连接超时

每个浏览器都有默认的连接超时时间。IE6的默认时间为60分钟。

这个值可以通过注册表修改。

1,打开注册表:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings。

2,增加一个DWORD值的项,命名为ReceiveTimeout,设置1000。该值的默认单位是毫秒,这里设置的1秒时间。

从浏览器开始访问网站开始,1秒后关闭连接。(设的值有点极端,但是方便展示)。

重启浏览器访问网站。

服务端 虚拟机上的Centos
客户端 本机上IE6浏览器
服务端地址 192.168.212.128
客户端地址 192.168.212.1
访问的文件index.php
<?php  

echo date('H:i:s',time());  

sleep(10);  

?>  
 

可以看到浏览器显示找不到服务器,但是访问刚才的test.html是可以访问的。

image

访问index.php显示连接不成功。因为index.php中sleep(10)延迟10秒的函数。而IE6的连接超时时间为1秒。所以就连接失败了。

image

访问test.hml可以成功连接。因为是访问本地服务器,传输速度很快,在IE6的1秒超时时间之内就已经传完全部数据了。

测试得到的结论

IE6的默认连接超时时间为60分。可以通过注册表中ReceiveTimeout值修改该值。

实际作用:使用IE6往服务器上传一个大文件,如果上传时间超过60分钟就会断开连接。

这也是为什么有些网站要专门开发active插件来实现IE6的大文件上传了。用户是不会主动修改这个值的。

apache的连接超时

看apache的配置文件可以看到有个timeout值。

image  

有人会以为这个是apache的连接超时参数。

我们把它设置为timeout =1访问index.php。

image

看到还是可以访问的,那么这个timeout不是apache的连接超时时间。timeout是apache收到上一个请求和后面一个请求到来之间的最大值。您可以查看浏览器与apache通讯中的TCP连接状态迁移 更加准确的明白timeout的值。

那么apache的连接超时时间到底是多少?是什么参数控制呢?

答:apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。

那么服务端是什么控制了浏览器和apache之间的最大连接超时时间呢?

答:linux

测试得到的结论

apache没有最大连接超时时间,也没有控制连接超时的参数。因为apache是在TCP/IP模型的应用层。

linux的连接超时

在linux的系统配置中可以到关于连接时间的有这两个参数。

#sysctl -a|grep time

image

一个是限制FIN_WAIT状态的超时时间,

一个是限制keepalive连接的超时时间。

结论

linux的默认配置下也没控制浏览器和apache连接超时的参数,只有通过linux的防火墙才能控制apache和浏览器之间连接的最大连接时间。

PHP的操作超时

打开php.ini可以看到两个参数。

image

max_execution_time:一个php程序执行的最长时间。

max_input_time:一个表单提交的最长时间。

这两个值很重要。我们做个测试:

服务端 虚拟机上的Centos
客户端 本机上IE6浏览器
服务端地址 192.168.212.128
客户端地址 192.168.212.1
访问的文件index.php
	

<?php  

for($i = 0;;$i++){  

 echo date('H:i:s',time());  

 echo '<br/>';  

 flush();  

}  

?>  
 
max_execution_time 30

 

访问index.php。

image

30秒后IE死掉了。为什么呢?答:index.php中有死循环。执行到max_execution_time=30秒后php停止了操作。浏览器这边死掉了。

总结

如果从头到尾看完上面的内容,会得出如下结论:

1,在客户端,浏览器控制着浏览器和apache的最大连接超时时间。

2,在服务端(不打开防火墙),linux和apache都不能控制最大连接超时时间,只有php或者mysql等运行程序通过控制自身的执行时间来控制浏览器和apache的最大连接超时时间。

3,在服务端(打开防火墙),linux上的防火墙和php,mysql等共同控制浏览器和apache的最大连接超时时间。

4,这里的浏览器和apache的最大连接超时时间包括TCP连接中的所有状态超时时间的综合。TCP连接中的所有状态

补充

这篇文章是本人关于apache和浏览器之间的最大连接超时的个人理解。难免会有错误的地方。欢迎您的留言讨论。

这篇文章发布于 2011-09-29 星期四,上午 6:48 归档于 apache , 服务器相关 .
版权所有,转载请注明下面地址:
http://www.shichenghy.com/wp-trackback.php?p=1008

分享到:
评论

相关推荐

    Apache-HttpClient4.x详解 高清中文 pdf

    连接参数包括连接超时、保持活跃时间等,而持久连接则能够显著提高网络交互效率。此外,连接路由允许HTTP请求通过代理或者负载均衡器,SSL/TLS定制则提供了连接加密的能力。 状态管理主要依赖于HTTP cookies,这是...

    Apache2.4.9安装包

    10. **性能调优** - 根据服务器的硬件配置和负载情况,你可以调整Apache的配置参数,如MaxKeepAliveRequests(每个连接的最大请求数)、KeepAliveTimeout(保持连接的超时时间)等,以优化性能。 通过以上步骤,你...

    Apache中文文档中文注解

    ### Apache配置详解 #### 一、引言 Apache是一款广泛使用的Web服务器软件,因其稳定性、安全性及可扩展性而受到用户的青睐。对于初次接触Apache的用户来说,掌握其配置文件`httpd.conf`的各项参数设置至关重要。...

    linux下的apache的配置

    ### Linux下的Apache配置详解 #### 一、Apache服务器配置概览 Apache是广泛使用的Web服务器软件之一,在Linux系统中配置Apache对于提供稳定的网络服务至关重要。本文档将详细讲解如何在Linux环境下安装、配置...

    httpd.conf文件配置详解

    ### httpd.conf 文件配置详解 #### 一、概述 `httpd.conf` 是 Apache HTTP Server 的核心配置文件,用于设置服务器的各种参数与行为。通过合理地配置 `httpd.conf`,可以实现对网站的安全性、性能及功能进行优化。...

    apache的包

    - **设置配置**:可以定制连接池大小、超时时间、重试策略等。 - **执行请求**:使用HttpRequestBase子类(如HttpGet、HttpPost)构造请求,并通过HttpClient发送。 - **处理响应**:收到HttpResponse后,可以...

    运维技术课程 Linux学习教程 第13讲 Apache服务器配置 共44页.pptx

    #### 二、Apache服务器配置知识点详解 1. **Apache配置文件** - **位置**:`/usr/local/apache2/conf/httpd.conf` - 这是Apache的主要配置文件。 - **主要配置项**: - `ServerRoot`:指定Apache的服务目录,...

    062801web原理apache配置1

    HTTP 1.1引入了持久连接(keepalive),允许在一个TCP连接上发送多个请求和响应,减少了建立和关闭连接的开销,但同时也设置了超时时间以避免资源浪费。 **MIME类型** MIME类型是在HTTP中用于标识数据类型的协议,...

    ( CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装.OK

    - 调整MySQL的配置以优化性能,例如调整缓存大小和连接超时。 - 定期更新和维护所有组件以确保安全性。 LAMP组合因其开源、免费、稳定和可扩展性而受到开发者喜爱。对于初学者,安装和配置LAMP环境是学习Web开发...

    第十九章 Linux的Apache服务器.docx

    【Linux的Apache服务器详解】 Apache HTTP Server,简称Apache,是一个开源的、跨平台的Web服务器,广泛应用于各种操作系统,包括Linux。它以其稳定性、高效性和灵活性而受到全球用户的青睐。本章将深入探讨Apache...

    apachetomcat最新版

    11. **性能优化**:可以通过调整`conf/server.xml`中的参数来优化Tomcat,比如增大最大线程数、设置连接超时、启用压缩等。 12. **管理工具**:Tomcat提供了一个名为`Manager App`的Web应用,可以用来管理部署在...

    Tomcat与Java.Web开发技术详解+源代码

    6. **Tomcat性能优化**:讨论如何调整Tomcat配置以提高Web应用的性能,例如调整线程池大小、设置连接超时等。 7. **安全管理**:介绍Tomcat的用户认证和授权机制,如 Realm 和角色配置。 8. **Tomcat源码分析**:...

    Delphi_10.2.3_RAD_Server_Linux_Apache_Patch.rar

    这可能包括调整Apache的配置参数,如最大连接数、超时设置,以及可能的硬件升级。 9. **维护与更新** 对于补丁和安全更新,保持定期检查Embarcadero的官方公告和社区论坛,确保及时应用最新的修复和增强功能。 ...

    Tomcat配置详解.doc

    【Tomcat配置详解】 Tomcat,作为Apache软件基金会Jakarta项目中的核心子项目,是备受推崇的Servlet和JSP容器,特别是在Java世界中,它在2001年被JavaWorld杂志评为最具创新的Java产品。Sun Microsystems也推荐...

    PHP采集器Snoopy详解

    Snoopy的类属性包括了各种配置选项,如连接的主机和端口、代理服务器设置、用户代理伪装、重定向控制、认证信息、HTTP头信息、错误处理以及读取超时设置等。这些属性允许开发者灵活地调整Snoopy的行为以适应不同的...

    ETL工具Kettle用户手册

    除了基本的连接信息外,还可以设置连接池大小、超时时间等高级选项,以优化数据库访问性能。 ##### 3.4 数据库用法 一旦建立了数据库连接,就可以在转换或任务中使用该连接来执行查询、插入、更新等操作。 #### 4. ...

    详解Java两种方式简单实现:爬取网页并且保存

    设置`setDoOutput(true)`允许发送数据,设置`setReadTimeout`以控制超时时间,并设置`setRequestProperty("User-Agent", "...")`模拟浏览器请求以避免被服务器识别为机器人。获取到输入流后,将其转换为字符串,最后...

Global site tag (gtag.js) - Google Analytics