首页/网络/协议速查/414 URI Too Long URI 过长
HTTP 方法与状态码91 条

414 URI Too Long URI 过长

请求的 URL(含查询串)超过服务器可处理长度;大量参数塞进 GET 查询串时常见。

协议速查网络更新于 2026-10-13

414 是什么

414 URI Too Long 表示请求的地址(含查询串)超过了服务端能够处理的上限。最常见的情形是把大量参数塞进 GET 查询串:几百上千个编号拼在地址里,或者把整个表单当成查询参数提交。规范定义在 RFC 9110 第 15.5.15 节。它与 431 要区分开:414 说的是地址太长,431 说的是请求头太大。

基本信息

状态码414 URI Too Long
语义请求地址超出服务端限制
规范RFC 9110 §15.5.15
常见触发GET 查询串过长、地址里塞数据
与 431 区别431 指请求头字段过大
与 400 区别400 指地址含非法字符或格式错误

各层限制参考

组件限制项说明
Nginxlarge_client_header_buffers默认 4 8k,请求行包含在内
ApacheLimitRequestLine默认 8190 字节
TomcatmaxHttpHeaderSize默认约 8k,请求行同样受限
浏览器地址栏长度通常 2000 到 8000 字符,各家不同
HTTP/2协议本身不限长度由服务端实现自行限制请求路径长度

复现与改进写法

复现与改进写法
# 复现:把上千个编号拼进查询串
curl -si "https://api.example.com/items?ids=$(seq -s, 1 2000 | head -c 9000)" | head -3
# HTTP/1.1 414 URI Too Long
# 改进:改用 POST 批量查询接口
curl -s -X POST https://api.example.com/items/batch-query \
  -H 'Content-Type: application/json' -d '{"ids":[1,2,3]}'

典型使用场景

  • 批量接口设计评审:判断该用 GET 查询串还是 POST 请求体
  • 接入第三方回调:对方把大量参数拼在地址里,触发自身服务端限制
  • 爬虫与压测脚本调优:发现超长地址导致请求被拒,改为分批提交
  • 网关策略核查:确认上游与下游对地址长度的限制是否一致
  • 排障区分:确认是地址过长、请求头过大还是字符非法
按 HTTP 语义,GET 请求不应该带请求体,虽然多数实现能接受,但网关与缓存的处理并不一致。需要提交大量标识时,正确做法是设计一个批量查询接口用 POST 承载,或把请求拆成多批,而不是一味调大服务端的地址长度上限。另一个常见来源是跳转时不断追加参数,地址随重定向链条越接越长,排查时应当一并检查跳转规则。

易错点

  • 只顾调大服务端上限:客户端与中间代理的限制仍在,问题只是从一端挪到另一端
  • GET 请求硬塞请求体:部分网关会丢弃请求体,表现为参数莫名丢失
  • 把 414 与 431 混为一谈,改错配置方向
  • 地址里带长令牌或签名导致偶发超限,只在特定参数组合下复现,难排查

数据来源与参考

  • RFC 9110 §15.5.15 414 URI Too Long

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌