Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解“;408请求超时”;用PHP实现Apache_Php_Apache2_Http Error_Http Status Code 408 - Fatal编程技术网

理解“;408请求超时”;用PHP实现Apache

理解“;408请求超时”;用PHP实现Apache,php,apache2,http-error,http-status-code-408,Php,Apache2,Http Error,Http Status Code 408,问题描述-Apache日志 我在Apache日志文件中找到了与此类似的项目: 166.147.68.243[24/Feb/2013:06:06:25-0500]19 web-site.com“-“408-” 我有自定义的日志格式,408这里代表状态。日志格式为: 日志格式“%h%t%D%V\%r\”%>s%b\“%{User agent}i\”详细信息 通常,日志文件中的行如下所示 184.73.232.108[26/Feb/2013:08:38:16-0500]30677 www.site

问题描述-Apache日志

我在Apache日志文件中找到了与此类似的项目:

166.147.68.243[24/Feb/2013:06:06:25-0500]19 web-site.com“-“408-”
我有自定义的日志格式,
408
这里代表状态。日志格式为:

日志格式“%h%t%D%V\%r\”%>s%b\“%{User agent}i\”详细信息
通常,日志文件中的行如下所示

184.73.232.108[26/Feb/2013:08:38:16-0500]30677 www.site.com“GET/api/search…HTTP/1.1”200 205“Zend_HTTP_Client”
这就是为什么408条错误行对我来说很奇怪。没有记录任何请求,我也不知道应该优化什么

问题

如何解决这个问题? 我应该收集哪些其他信息或日志? 什么可能导致问题?服务器上有什么问题吗?或者这绝对是一个网络连接问题

我之所以这么说,是因为我们的客户抱怨他的手机出现了408个错误。我在日志文件中找到了很多记录,但我不得不承认我不知道该怎么处理


我自己的研究

关于这个问题,这里已经有几个问题了。但人们更具体。就像他们讨论一些特定客户端软件和脚本的问题一样。在这里,我刚刚在iPhone上打开某个页面时出错

例如,在中,建议在POST之前执行GET请求。如果我有自定义客户端,我可以这样做。但我无法控制用户浏览器的行为

猜测#1

当我搜索互联网并思考我发现的问题时

建议将config参数更新回其默认值

#
#超时:接收和发送超时之前的秒数。
#
超时300
我先尝试了值30,因为我认为30秒应该足够了但即使使用300秒的默认值,我仍然会在日志中获取错误。我在写这篇文章时做了
tail-f
,在几分钟内获得了超过10行


在我看来,这并不是一个完整的解决方案。

在对这个问题进行了一些研究之后,我得出了以下答案。它是由我们的首席开发人员提供的,我认为它很好地解释了这个主题

这些错误是完全正常的。它们并不是一个更大问题的迹象,而是正常的连接使Apache的开放时间超过了允许的时间

例如,反复运行它们的客户端查询使Apache保持打开状态。阿帕奇的回应是适当地关闭了他

如果没有的话,就会有少数人接管我们的服务器,不允许任何人连接

这些错误通常来自于寻找漏洞的系统,您可以通过打开telnet会话并保持其打开状态来重新创建它

同时,tail-f访问日志,在X时间内(KeepAliveTimeout),您将看到带有相同错误代码的IP弹出窗口

在Apache1.3时代,这个错误很常见,但后来2.2出现了,他们将其删除,直到我们中有足够多人要求返回它,因为它让我们知道有多少人只打开端口,而没有请求实际的资源,等等


我认为除了确保将超时设置为我在原始问题中描述的某个合理值之外,不应该在这里做任何其他事情。

实际上,apache日志中的许多408条消息都是现代浏览器中的结果预取机制。
从过去3年的apache日志来看,对于相同的流量,408个错误的数量增加了一倍多。

如果apache中设置了代理,并且后端由于某种原因没有及时响应,那么相同的408个错误将出现在日志中。代理超时是单独配置的,这就是为什么更改Apache默认超时似乎对这些请求没有任何作用。

所有http请求都支持username和pw。No username=“-”,No password=“-”,password=“*”

我刚刚发现一个问题,我们的超时设置为5,而不是默认的30。我已将其更改回默认值30。如果日志文件中仍然存在这些错误,我将很快进行更新。因此,请给出一个答案,解释为什么serverfault上的另一个问题是相同的,然后稍后接受。@mliebelt什么意思?您提出了一个问题,没有答案,您的问题将保持开放状态。因此,回答你自己的问题是一个好习惯,并在以后接受它作为正确的答案。请参阅。我认为
KeepAliveTimeout
与此无关-该设置用于控制在发送响应后保持连接打开的功能。这里的关键设置(如您所见)是
Timeout
(总体请求/响应超时),但您可能会发现
mod_reqtimeout
已启用并配置为更快地超时空请求(通过
RequestReadTimeout
)。实际上,KeepAliveTimeout是相关的。如果KeepAlive处于启用状态,并且HTTP请求未在KeepAliveTimeout时间内完成,则将导致408错误。如果KeepAlive处于关闭状态,则超时指令优先。我一直在用Apache服务器的慢速嵌入式设备测试这一点。你能链接到关于预取如何导致408个错误的信息吗?@Jon Eric虽然很老,但下面提供了Chrome预取的解释。还有一篇来自HAProxy的后续文章:请描述更多这个答案。