nginx 414 Request-URI Too Large
症状
1 | nginx 414 Request - URI Too Large |
#客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区,
#请求头总长度大于128k时使用large_client_header_buffers设置的缓存区
client_header_buffer_size 128k;
#large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。申请4个128k。
large_client_header_buffers 4 128k;
当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误。
可能原因
场景1.cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据
场景2.请求参数太长,比如发布一个文章正文,用urlencode后,使用get方式传到后台。
1 2 3 4 5 6 7 8 9 10 11 | GET http: / / www. 264.cn / HTTP / 1.1 Host: www. 264.cn Connection: keep - alive Cache - Control: max - age = 0 Accept: text / html,application / xhtml + xml,application / xml;q = 0.9 , * / * ;q = 0.8 User - Agent: Mozilla / 5.0 (Windows NT 6.1 ) AppleWebKit / 537.31 Accept - Encoding: gzip,deflate,sdch Accept - Language: zh - CN,zh;q = 0.8 Accept - Charset: GBK,utf - 8 ;q = 0.7 , * ;q = 0.3 Cookie: bdshare_firstime = 1363517175366 ; If - Modified - Since: Mon, 13 May 2013 13 : 40 : 02 GMT |
当请求头过大时,超过large_client_header_buffer时,nginx可能返回"Request URI too large" (414)或者"Bad-request"(400)错误。
如上例HTTP请求头由多行构成,其中"GET http://www.264.cn/ HTTP/1.1"表示Request line
当Request line的长度大于large_client_header_buffer的一个buffer(128k)时,nginx会返回"Request URI too large" (414)错误,对应上面的场景2。
请求投中最长的一行也要小于large_client_header_buffer,当不是Request line的最长行大于一个buffer(128k)时,会返回"Bad-request"(400)错误,对应上面的场景1。
解决办法
这时可以调大上述两个值:
client_header_buffer_size 512k; large_client_header_buffers 4 512k;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端