十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

400 Bad Request

上一篇 / 下一篇  2011-06-19 12:21:35 / 个人分类:其它

这是一个专业的术语,也是一个专业的问题。
首先,当客户端浏览器提交的数据,
'~M+S9X%}4Q7h U1X(Im&v0如果很大的话,服务器就很可能抛出这样的错误。
可是遇到错误并不可怕,可怕的是客户端不接受我们的处理。它依旧我行我速。
像Opera这样的浏览器是好样的,它能够处理这样的问题,并能够给客户以良好的反应形式。
当然这需要在服务器端编码。
而IE默认不对此问题理采,它直接采用 DNS 错误,找不到该页的信息抛给用户,
,A9dHb!C5Fu j0这正是我们搜索此错误时候,为什么好多都解释是 DNS 的错误。
显然这是不道德的,也是不负责任的。
然而,如果客户想看到这些错误时,它就必须设置浏览器中的选项,
将《显示友好错误信息》的选项去掉
另外一个相关问题的解决列子:51Testing软件测试网*ET-I8Y*]M{
51Testing软件测试网[rI[9A.`wGXa
最近遇到用火狐3浏览网页出现400 BAD REQUEST的标语,51Testing软件测试网"Ri$d/v+Es
到网上看了一下,有些网友说是DNS错误之类的
wf&L(]+j8NH'm4e0尽管不知道具体的原因,但却有一个非常简单的解决的方法就是:51Testing软件测试网*a#lPsUB,u|Q
1、用火狐浏览器。在点击工具栏上的工具。在下拉菜单中,点击选项。
,LYW(^[`~0在隐私选项中点击清除隐私选项,弹出对话框。将COOKIE和私有数据清楚一下就可以了。51Testing软件测试网0b Ad*] zOlm)h
就是这么简单。
l8f+Mi!q j2Z02、在IE中类似。
4}d i xj&M Pp;U,}051Testing软件测试网4Us6@4].ek
贴此问题,当时是在nginx服务器遇到400错误的提示。今天终于找到了根本原因。51Testing软件测试网"|iJ!P L\0g.e%@%fw

g Rdz'nnW9a0

nginx的400错误比较难查找原因,因为此错误并不是每次都会出现的,另外,出现错误的时候,通常在浏览器和日志里看不到任何有关提示。51Testing软件测试网/S.W'E/]4^.e1k

经长时间观察和大量试验查明,此乃request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。(我的问题就在此)

w6?,m C\'I0

所幸在nginx中是有办法解决这个问题:

3j-A R3g ` Z yr0

nginx.conf中,将 client_header_buffer_size  large_client_header_buffers 都调大,可缓解此问题。51Testing软件测试网lp(L4v$j

其中主要配置是client_header_buffer_size这一项,默认是1k,所以header小于1k的话是不会出现问题的。51Testing软件测试网U.E#u%x-g

按我现在配置是:51Testing软件测试网} tA0u e5cL

client_header_buffer_size 64k;
.yRKq_ z+I0large_client_header_buffers 464k;

T)J!F6nWH ?9C+^4i0

这个配置可接收64k以下的header,在浏览器中cookie的字节数上限会非常大,所以实在是不好去使用那最大值。51Testing软件测试网m,|dwt#j4AR

最好的解决办法当然是不要往cookie里写入太多的东西,不过如果是一个很大的网站,那么在一个二级域名写入了顶级域名下的cookie似乎是不好控制的,这需要制定一个规范来控制顶级域名的cookie写入量才可以解决得了。

WA3CDH\Rv v8z0

这个可能也是nginx的一个bug,因为buffer这个词义上说为缓冲,也就是说,如果没取完的话,是会循环取直至取完的,但是nginx并没有进行循环的动作直接返回了400错误。nginx的下一个版本可能会修正这个问题。51Testing软件测试网"o)w4D#Gs7}v7J-c;c


TAG: 400

 

评分:0

我来说两句

Open Toolbar