我用码头9.4.8,我想限制数据的可以发布到服务器的数量。 对于我加入的jetty.xml:
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>10000</Arg>
</Call>
我测试了码头像(请求xxlarge.xml - 文本文件(20MB)):
curl -X POST --data @request-xxlarge.xml http://localhost:8080/test -v
其结果是我得到
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> POST /test HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Length: 21232818
> Content-Type: application/x-www-form-urlencoded
> Expect: 100-continue
>
< HTTP/1.1 200 OK
< Content-Length: 4
< Connection: close
< Server: Jetty(9.4.8.v20171121)
<
* Closing connection 0
POST
服务器处理该请求
EDITED
服务器返回413当内容类型:应用/ X WWW的窗体-urlencoded。
但是,如果我希望它是一个Web服务,我要处理的内容类型:应用程序/肥皂+ XML - 那么maxFormContentSize参数不起作用。
如何限制身体对Web服务的大小?
有迹象表明,码头可以根据特定的请求主体的内容施以3度的限制Content-Type
的值。
内容类型: application/x-www-form-urlencoded
这是标准的HTML <form>
提交,其中,所述提交的形式经由访问HttpServletRequest.getParameter(String key)
API。
这种要求主体内容可以在2种不同的方式进行过滤。
org.eclipse.jetty.server.Request.maxFormContentSize
-这是对请求主体内容的整体尺寸(以字节为单位)的限制。
org.eclipse.jetty.server.Request.maxFormKeys
-这是被提交的表单的形式,按键的整体数量的限制。
上述2个键期望的整数值,并且可以在下列任一技术来设定...
1)作为一个适用于所有已部署web应用服务器属性
Server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", 100000)
2)作为系统属性适用于所有已部署的webapps
$ java -Dorg.eclipse.jetty.server.Request.maxFormContentSize=100000 \
-jar /path/to/jetty-home/start.jar
要么
System.setProperty("org.eclipse.jetty.server.Request.maxFormContentSize", "1000000")
3)在已部署的上下文参数WebAppContext
在你的${jetty.base}/webapps/<context>.xml
可以设置这些值
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
"http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war"><Property name="jetty.webapps"/>/mycontext.war</Set>
<Set name="maxFormKeys">100</Set>
<Set name="maxFormContentSize">202020</Set>
</Configure>
内容类型: multipart/form-data
这也是一个标准的表单提交如上,但数据还可以经由访问HttpServletRequest.getPart(String name)
的API。
这种数据是通过本针对目的地Servlet的配置限制@MultipartConfig
值(或WEB-INF/web.xml
的条目<servlet><multipart-config>
元素)
为了限制这种内容类型通过整个请求尺寸的,可使用maxRequestSize
配置。
所有其他请求的Content-Type项
对于所有其他Content-Type
值,servlet规范,和Jetty不涉及解析或限制大小。
如果您使用的是库来处理您的请求(REST,SOAP等),然后与该库检查,看它是否有一个机制,根据规模来拒绝请求,或其他原因(例如:没有很好地形成,缺少预期/所需的数据,等等)。
与往常一样,如果你想有一个特征,随时要求它在Eclipse码头问题跟踪https://github.com/eclipse/jetty.project/issues
不知道你的问题,但我给它一个镜头。
理论
的Expect: 100-continue
报头在指定的HTTP 1.1
,并允许服务器以确认或立即拒绝POST / PUT请求中的头被发送之后,但在客户机开始发送潜在大量实际数据(请求的主体)。 因此,符合标准的客户端必须再等待一HTTP/1.1 100 Continue
发送数据之前。 该方案是因为拒绝在客户端和服务器不要浪费他们与多余的网络通信时间的情况下,较大的POST / PUT请求有利。
可能的解决方案
禁用期待逻辑
卷曲-H '期待:' -H '传输编码:...' -H '的Content-Type:...' \ --data二进制 '@mediumfile' example.com/path -v
发送下一个数据包与第一响应报文后,如预期的大文件。
更多资讯: https://tools.ietf.org/html/rfc7231#section-5.1.1