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

时间:2015-01-14 18:48:06

标签: jetty dropwizard

请求(GET)或(POST):

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

响应:

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

如何增加请求大小?

2 个答案:

答案 0 :(得分:9)

您的请求URI大小超过8kb! Eeesh!

由于浏览器,代理和网络硬件中存在各种漏洞和错误,因此存在请求URI限制。

虽然可以在Jetty中增加Request URI限制检查,但为Jetty选择的值代表了公共互联网上各种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接收它了。

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

此外,每次增加都会使您遇到各种漏洞,这些漏洞与标头中未经检查的限制有关,从而导致各个组执行基于CPU和内存的DOS攻击,只需要很少的网络流量即可执行。

解决此问题的正确方法:

你真的应该切换到基于POST(或PUT)的请求数据,而不是在HTTP协议的请求头中发送那么多的数据。

答案 1 :(得分:1)

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

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

其他可能的设置显示为here