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

Dan*_*ean 2 jetty dropwizard

请求(GET)或(POST):

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

响应:

状态代码:414 Request-URI Too Long Connection:close Content-Length:0

如何增加请求大小?

Joa*_*elt 9

您有一个超过8kb的请求URI!Eeesh!

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

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

警告:你不想这样做

这不适合:

  • 可从Internet访问的WebServer.
  • 由Chrome,Firefox,Safari,MSIE或Opera等浏览器访问的WebServer.
  • 由Android,iOS或Microsoft移动设备访问的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
Run Code Online (Sandbox Code Playgroud)

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

并使用所需的上限更改(或添加)以下属性.

jetty.request.header.size=8192
Run Code Online (Sandbox Code Playgroud)

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

对于每次增加,您都会遇到越来越多的问题.

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

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

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

解决这个问题的正确方法:

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