码头和最大内容大小
Jetty and max content size
我使用 Jetty 9.4.8,我想限制可以 post 服务器的数据量。为此,我添加到 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
服务器处理了请求
已编辑
服务器 returns 413 当 Content-Type:application / x-www-form-urlencoded。
但是如果我希望它是一个 Web 服务并且我想处理 Content-Type: application / soap + xml - 那么 maxFormContentSize 参数不起作用。
如何限制 Web 服务正文的大小?
不确定你的问题是什么,但我会试一试。
###理论###
Expect: 100-continue
header 在 HTTP 1.1
中指定并允许服务器在发送 header 之后但在客户端启动之前立即确认或拒绝 POST/PUT 请求发送可能大量的实际数据(请求的 body)。因此,符合要求的客户端必须在发送数据之前等待 HTTP/1.1 100 Continue
。此方案对于较大的 POST/PUT 请求是有利的,因为在拒绝的情况下,客户端和服务器不会将时间浪费在多余的网络通信上。
###可能的解决方案###
禁用期望逻辑
curl -H 'Expect:' -H 'Transfer-Encoding: ...' -H 'Content-Type: ...'
--data-binary '@mediumfile' 例子。com/path -v
在第一个响应数据包之后发送下一个包含大文件的数据包。
更多信息在这里:https://www.rfc-editor.org/rfc/rfc7231#section-5.1.1
Jetty 可以根据特定 Content-Type
值对请求正文内容施加 3 个限制。
Content-Type: application/x-www-form-urlencoded
这是标准的 html <form>
提交,通过 HttpServletRequest.getParameter(String key)
API.
访问提交的表单
这种请求正文内容可以通过两种不同的方式进行过滤。
org.eclipse.jetty.server.Request.maxFormContentSize
- 这是对请求正文内容的总大小(以字节为单位)的限制。
org.eclipse.jetty.server.Request.maxFormKeys
- 这是对所提交表单的表单键总数的限制。
以上 2 个键需要整数值,并且可以使用以下任何技术设置...
1) 作为适用于所有部署的 webapps 的服务器属性
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>
Content-Type: multipart/form-data
这也是上面的标准表单提交,但数据也可以通过 HttpServletRequest.getPart(String name)
APIs 访问。
此类数据通过目标 Servlet 的 @MultipartConfig
值(或 <servlet><multipart-config>
元素的 WEB-INF/web.xml
条目)存在的配置受到限制
要通过整个请求大小限制此类内容类型,请使用 maxRequestSize
配置。
所有其他请求 Content-Type 个条目
对于所有其他 Content-Type
值,servlet 规范和 Jetty 不参与解析或限制大小。
如果您正在使用一个库来处理您的请求(REST、SOAP 等),请检查该库以查看它是否具有基于大小或其他原因拒绝请求的机制(例如:不是 well-formed,缺少 expected/required 数据等)。
一如既往,如果您需要某个功能,请随时在 Eclipse Jetty 问题跟踪器上请求它,网址为
https://github.com/eclipse/jetty.project/issues
我使用 Jetty 9.4.8,我想限制可以 post 服务器的数据量。为此,我添加到 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
服务器处理了请求
已编辑
服务器 returns 413 当 Content-Type:application / x-www-form-urlencoded。
但是如果我希望它是一个 Web 服务并且我想处理 Content-Type: application / soap + xml - 那么 maxFormContentSize 参数不起作用。
如何限制 Web 服务正文的大小?
不确定你的问题是什么,但我会试一试。
###理论###
Expect: 100-continue
header 在 HTTP 1.1
中指定并允许服务器在发送 header 之后但在客户端启动之前立即确认或拒绝 POST/PUT 请求发送可能大量的实际数据(请求的 body)。因此,符合要求的客户端必须在发送数据之前等待 HTTP/1.1 100 Continue
。此方案对于较大的 POST/PUT 请求是有利的,因为在拒绝的情况下,客户端和服务器不会将时间浪费在多余的网络通信上。
###可能的解决方案###
禁用期望逻辑
curl -H 'Expect:' -H 'Transfer-Encoding: ...' -H 'Content-Type: ...'
--data-binary '@mediumfile' 例子。com/path -v在第一个响应数据包之后发送下一个包含大文件的数据包。
更多信息在这里:https://www.rfc-editor.org/rfc/rfc7231#section-5.1.1
Jetty 可以根据特定 Content-Type
值对请求正文内容施加 3 个限制。
Content-Type: application/x-www-form-urlencoded
这是标准的 html <form>
提交,通过 HttpServletRequest.getParameter(String key)
API.
这种请求正文内容可以通过两种不同的方式进行过滤。
org.eclipse.jetty.server.Request.maxFormContentSize
- 这是对请求正文内容的总大小(以字节为单位)的限制。
org.eclipse.jetty.server.Request.maxFormKeys
- 这是对所提交表单的表单键总数的限制。
以上 2 个键需要整数值,并且可以使用以下任何技术设置...
1) 作为适用于所有部署的 webapps 的服务器属性
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>
Content-Type: multipart/form-data
这也是上面的标准表单提交,但数据也可以通过 HttpServletRequest.getPart(String name)
APIs 访问。
此类数据通过目标 Servlet 的 @MultipartConfig
值(或 <servlet><multipart-config>
元素的 WEB-INF/web.xml
条目)存在的配置受到限制
要通过整个请求大小限制此类内容类型,请使用 maxRequestSize
配置。
所有其他请求 Content-Type 个条目
对于所有其他 Content-Type
值,servlet 规范和 Jetty 不参与解析或限制大小。
如果您正在使用一个库来处理您的请求(REST、SOAP 等),请检查该库以查看它是否具有基于大小或其他原因拒绝请求的机制(例如:不是 well-formed,缺少 expected/required 数据等)。
一如既往,如果您需要某个功能,请随时在 Eclipse Jetty 问题跟踪器上请求它,网址为 https://github.com/eclipse/jetty.project/issues