由于许多If-None-Match值,请求标头字段的大小超过了服务器限制


8

这是一个有趣的案例,客户端出现“ 400 Bad Request”错误,并且似乎无法使用Apache / 2.2.22查看Ubuntu 12.04.3 LTS上托管的drupal主页:

错误的请求
您的浏览器发送了此服务器无法理解的请求。
请求标头字段的大小超过服务器限制。

数据包嗅探输出:

...
T 2013/09/02 15:23:10.458167 ###.###.###.###:40027 -> ###.###.###.###:80 [A]
GET / HTTP/1.0.
If-None-Match: "1363160742-0", "1363165573-1", "1363175854-1", "1363175854-0", "1363179616-0", "1363181811-0", "1363239319-1", "1363255903-0", "1363259282-0", "1363263398-1", "1363274564-0", "1363329642-0", "1363332613-1", "1363333851-0", "1363599826-0", "1363678909-0", "1363684227-1", "1363699732-0", "1363755181-0", "1363765691-1", "1363767178-0", "1363780208-0", "1363787589-0", "1363795259-1", "1363852409-1", "1363863225-1", "1363928115-0", "1363951793-0", "1363951793-1", "1364133610-1", "1364187608-1", "1364187608-0", "1364203083-0", "1364208174-0", "1364214930-0", "1364219815-0", "1364274441-1", "1364280930-0", "1364280930-1", "1364286055-1", "1364298840-0", "1364298840-1", "1364360674-0", "1364364356-1", "1364381508-0", "1364385520-1", "1364460734-0", "1364882595-1", "1364903271-0", "1364967946-0", "1364967946-1", "1364981713-0", "1364985142-1", "1364992835-1", "1365061578-0", "1365065290-1", "1365076128-0", "1365141088-1", "1365167701-0", "1365171024-0", "1365402404-1", "1365402404-0", "1365411731-1", "1365416882-0", "1365476715-0", "1365487578-0", "1365488880-1", "1365503922-1", "1365514224-1", "1365579101-0", "1365580320-0", "1365582817-0", "1365584926-0", "1365589524-0", "1365608307-0", "1365649987-0", "1365682295-0", "1365685083-0", "1365770532-1", "1365770532-0", "1365844566-0", "1365996619-1", "1366093719-1", "1366093719-0", "1366115408-0", "1366180275-1", "1366186431-0", "1366196476-0", "13662669
...

在此阶段,我不确定100%是否仅限于特定的客户端,但是错误是由用户使用以下用户代理字符串报告的:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/534.57.7 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.7

现在的问题仍然是怎么办,是服务器问题还是客户端行为不正常?


这不是Ubuntu问题。看一下Apache日志,并用它来获取专业社区的帮助。
路易斯·德·索萨

我的想法是这可能是Ubuntu默认问题。
inetpro 2013年

1
我们正在谈论的是在Ubuntu上运行的网络服务器-因此,它本身并不是话题。如@LuísdeSousa所建议,请查看/var/log/apache2/error.log,以查找违反了什么限制。
guntbert

@LuísdeSousa我们在这里支持Ubuntu Server的所有部分。为什么这不是Ubuntu问题?
伊利亚·卡根

@guntbert有趣的部分是apache日志中既没有记录请求也没有实际错误。它登录在鱿鱼反向代理中,我猜测代理实际上是原因
inetpro 2013年

Answers:


11

您已经找到问题了。对于Web服务器默认值,某些用户代理和某些请求变得太大。似乎遇到了一个愚蠢的问题,但是我一直在发生nginx。通常,当有愚蠢的Cookie名称和上载发生时...无论如何...

解决方案是仅提高请求限制。您可以为您的网站在全球或只是这样做LimitRequestFieldSize指令

LimitRequestFieldSize 32768

上限为32KB(高于默认值8KB)。


这就是我的想法,但不确定建议的尺寸。谢谢!
inetpro 2013年

1
增加LimitRequestFieldSize32768没有帮助。
inetpro

@inetpro您是否重新启动了Apache?它是否处于足够高的环境中?这在.htaccess文件中不起作用。
奥利(Oli)

1
您是否将条目放在定义的基于名字的虚拟主机中,还是放在另一个主机中?该文档说:“使用基于名称的虚拟主机时,此指令的值取自连接映射到的NameVirtualHost的默认(优先列出)虚拟主机。” 看起来最好在全局配置中执行此操作。在虚拟主机中执行此操作的问题在于,它是请求标头本身包含所需虚拟主机的名称。
罗比·巴萨克

2
LimitRequestFieldSize 65536LimitRequestLine 65536LimitXMLRequestBody 0⓸??? ⓹ℙℛṎℱỈᎢ☕
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.