400 Request Header Or Cookie Too Large错误

nginx by Xudong Zhang @ 2016-10-01 12:25:44

访问页面报400 Request Header Or Cookie Too Large错误,如果不通过nginx转发,直接访问后端服务器没有这个错误,怎么回事?


首先说下,这样的问题既可能是proxy server的问题也可能是backend的问题,也可能都有问题,最好是先直接测试backend server。

如果是nginx的问题可以通过下面的方式解决:

nginx有关于http header大小的一个配置,如下(官网链接)

Syntax:    large_client_header_buffers number size;
Default:   
large_client_header_buffers 4 8k;
Context:    http, server

默认的配置是最大8k(单个field),如果超过了这个就会报400 Request Header Or Cookie Too Large.

那么对应的将这个设置改大一些就可以避免这个问题了,比如

server {
  server_name example.com;
  large_client_header_buffers 32k;
  location / {
  ...
  }
}

最后说下个人在实际项目中的一点体会:

各个子站得注意设置好cookie的domain,比如A小组开发a.example.com,B小组开发b.example.com, 如果cookie都在.example.com域里,既容易出现命名冲突,也可能发生这种header过大互相干扰的问题.

by Xudong Zhang @2016-12-18 22:30:37.812 +0800 CST


我来回答

Markdown格式技巧

  • 行尾添加2个空格或者添加一个空行就能换行
  • 斜体: *hello* 或者 _world_
  • 加粗: **hello** 或者 __world__
  • 代码块: 添加空行,然后代码缩进4个空格
  • 特殊字符: 用\避免转义;\*就是*本身
  • python: `__name__`可以以代码形式输出__name__
  • 一个简单的例子

切换到移动版