日期:2014-05-17 浏览次数:20946 次
前言
要理解浏览器和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。
打开浏览器访问apache。使用netstat命令查看连接状态。
#netstat –nt|grep –i ’80′
可以看到四个连接,因为本地访问速度很快,只能抓取到TIME_WAIT得状态。那一个test.html网页为什么会有四个连接呢?
看test.html的内容可以知道有:
1,main.css 文件
2,mian.js?? 文件
3,main.jpg 图片
4,本身的test.html文件
所以有四个连接。
再看看关闭apache的keep-alive支持后的连接状态。
重启服务器,浏览器访问test.html,在查看连接。
#service httpd restart
#netstat –nt|grep –i ’80′
可以看到只有一个连接。而且这个连接状态是ESTABLISHED。我们在httpd.conf中设置了keepAlliveTimeout=15,所以连接建立后15秒后才关闭连接。
测试得到的结论
如果关闭apache的keep-alive属性,访问的页面中的(上例中