Jetty 码头和最大内容物尺寸
我使用Jetty 9.4.8,我希望限制可以发布到服务器的数据量。为此,我在jetty.xml中添加了:Jetty 码头和最大内容物尺寸,jetty,jetty-9,Jetty,Jetty 9,我使用Jetty 9.4.8,我希望限制可以发布到服务器的数据量。为此,我在jetty.xml中添加了: <Call name="setAttribute"> <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg> <Arg>10000</Arg> </Call> 结果我得到了 * Trying 127.0.0.1... * Connecte
<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>10000</Arg>
</Call>
结果我得到了
* 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
*正在尝试127.0.0.1。。。
*已连接到本地主机(127.0.0.1)端口8080(#0)
>POST/test HTTP/1.1
>主机:本地主机:8080
>用户代理:curl/7.47.0
>接受:*/*
>内容长度:21232818
>内容类型:application/x-www-form-urlencoded
>预期:100人继续
>
服务器已处理该请求
已编辑
当内容类型为application/x-www-form-urlencoded时,服务器返回413
但是,如果我希望它是一个web服务,并且我希望处理内容类型:application/soap+xml,那么maxFormContentSize参数就不起作用
如何限制web服务主体的大小?不确定您的问题是什么,但我会试一试
理论
Expect:100 continue
头在HTTP 1.1中指定,允许服务器在发送头之后,但在客户端开始发送潜在的大量实际数据(请求主体)之前,立即确认或拒绝POST/PUT请求。因此,在发送数据之前,一致性客户端必须等待HTTP/1.1100 Continue
。此方案有利于较大的POST/PUT请求,因为在拒绝的情况下,客户端和服务器不会将时间浪费在多余的网络通信上。可能的解决方案
curl-H'Expect:'-H'传输编码:…'-H'内容类型:…'\ --数据二进制文件“@mediumfile”example.com/path-v
此处的更多信息:Jetty可以根据特定的
内容类型
值对请求正文内容施加3个限制
内容类型:application/x-www-form-urlencoded
这是标准的html
提交,通过API访问提交的表单
这种请求正文内容可以通过两种不同的方式进行过滤
org.eclipse.jetty.server.Request.maxFormContentSize
-这是对请求正文内容的总大小(以字节为单位)的限制
org.eclipse.jetty.server.Request.maxFormKeys
-这是对提交表单的表单键总数的限制
以上两个键需要整数值,可以使用以下任何技术进行设置
1) 作为应用于所有已部署WebApp的服务器属性
Server.setAttribute(“org.eclipse.jetty.Server.Request.maxFormContentSize”,100000)
2) 作为应用于所有已部署WebApp的系统属性
$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/.xml
中,可以设置这些值
/mycontext
/mycontext.war
100
202020
内容类型:多部分/表单数据
这也是如上所述的标准表单提交,但也可以通过API访问数据
此类数据通过目标Servlet值的配置(或
元素的条目)进行限制
要通过整个请求大小限制此类内容类型,请使用maxRequestSize
配置
所有其他请求内容类型条目
对于所有其他内容类型
值,servlet规范和Jetty不参与解析或限制大小
如果您使用一个库来处理您的请求(REST、SOAP等),那么请检查该库是否具有基于大小或其他原因(例如:格式不正确、缺少预期/所需数据等)拒绝请求的机制
与往常一样,如果您想要一个特性,请随时在Eclipse Jetty问题跟踪器上请求它
请显示正在处理POST请求的servlet。(另外,您在部署的webapp中配置了此限制)@JoakimErdfelt,我的servlet只是resp.getWriter().write(“POST\n”)代码>和我仅在jetty.xml中设置的限制。您的servlet是否至少读取了发送的帖子正文内容?使用request.getParts()
或request.getParameterMap()
?(除非你这么做,否则不会触发限制)我提交了一个增强请求,使它们也可以从WEB-INF/WEB.xml
设置-
* 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