Dropwizard:如何修复 414 Request-URI 太长

Dropwizard: How to fix 414 Request-URI Too Long

请求 (GET) 或 (POST):

http://localhost:8080/images?name=iVBORw0KGgoAAAANSUhEUgAAAAUA%20AAAFC......

回复:

状态代码:414 请求 URI 太长 连接:关闭 内容长度:0

如何增加请求大小?

您有一个大小超过 8kb 的请求 URI!哎呀!

Request-URI 由于在浏览器、代理和网络硬件中发现了各种漏洞和错误,因此存在限制。

虽然可以增加 Jetty 中的请求 URI 限制检查,但为 Jetty 选择的值代表 public 互联网上各种 http 客户端和中介使用的当前安全最大值。

警告:您不想这样做

这不适合:

  • 可从 Internet 访问的 WebServer。
  • 可通过 Chrome、Firefox、Safari、MSIE 或 Opera 等浏览器访问的 WebServer。
  • 通过 Android、iOS 或 Microsoft mobile 等移动设备访问的 WebServer。
  • 前面有代理的 WebServer。
  • 使用代理访问 WebServer 的客户端。

这仅对直接与 Jetty 服务器对话的自定义 HTTP 客户端之间的有限事务有用。

Jetty 9.2.6.v20141205 说明

如果您还没有 Jetty Base ${jetty.base} 目录,请创建一个并初始化它。

[user]$ mkdir mybase
[user]$ cd mybase
[mybase]$ java -jar /path/to/jetty-distribution-9.2.6.v20141205/start.jar \
            --add-to-start=http,deploy,webapp

编辑${jetty.base}/start.ini

并更改(或添加)以下 属性 为您想要的上限。

jetty.request.header.size=8192

不,没有办法禁用此限制检查。

每增加一次,您就会面临越来越大的问题。

从一些浏览器(最终是所有浏览器)不发送请求开始,更不用说码头接收它了。

与此同时,许多代理服务器处理您的请求的能力开始失效,导致连接或请求终止和失败。有时甚至会截断对 Jetty 的请求。

此外,每次增加都会使您暴露于围绕 headers 中未经检查的限制的各种漏洞,导致各种团体能够执行 CPU 和基于内存的 DOS 攻击,这些攻击只需要很少的网络流量即可执行.

解决此问题的正确方法:

您确实应该切换到基于 POST(或 PUT)的请求数据,而不是在 HTTP 协议的请求 headers 中发送该数量的数据。

一种可能更简单的方法是在您的 yaml 配置文件中设置 requestHeaderSize。这是我们的摘录:

    server:
      applicationConnectors:
      - type: http
        maxRequestHeaderSize: 100KiB

显示了其他可能的设置here