我有一个非常基本的python脚本,可以进行HTTP连接。
import socket
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "192.168.56.21"
s.connect((host, 80))
msg = """GET /lol /HTTP1.1
Content-Length: 10
%s""" % ("*" * 9)
s.send(msg)
print msg
print s.recv(1000)
if __name__ == "__main__":
main()
如您所见,Content-Length标头超出实际内容长度。当我运行这个脚本时,它会冻结5分钟,之后我在apache日志中记录了请求需要5分钟才能执行并获得HTTP 400响应。
192.168.56.21 - - [01/Apr/2011:15:07:52 +0300] "GET /lol /HTTP1.1" 400 358 "-" "-" 47 531 300011809
我对此感到满意,但我不明白为什么apache冻结5分钟并在此期间保持连接打开。
apache2 3947 www-data 19u IPv6 17165 TCP 192.168.56.21:www->192.168.56.21:53112 (ESTABLISHED)
python2.6 4636 meuser 3u IPv4 17164 TCP 192.168.56.21:53112->192.168.56.21:www (ESTABLISHED)
我假设apache等待Content-Length中指定的字节数,直到发生一些超时并且它抛出400 Bad Request。
我对生产网站进行了尝试,显然我立即做出了回应。
有人可以解释TCP级别上发生了什么,以及我缺少什么apache配置 - 我想摆脱这样的5分钟等待。
答案 0 :(得分:1)
好的,它是apache conf中的Timeout指令。 http://httpd.apache.org/docs/2.2/mod/core.html#timeout