gpt4 book ai didi

Jetty 和最大内容大小

转载 作者:行者123 更新时间:2023-12-02 03:39:09 26 4
gpt4 key购买 nike

我使用 Jetty 9.4.8,我想限制可以发布到服务器的数据量。为此,我添加到 jetty.xml:

<Call name="setAttribute">
<Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg>
<Arg>10000</Arg>
</Call>

我测试了 jetty ,例如(request-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

服务器处理了请求

已编辑

当 Content-Type: application/x-www-form-urlencoded 时,服务器返回 413。

但是,如果我希望它是一个 Web 服务,并且我想处理 Content-Type: application/soap + xml - 那么 maxFormContentSize 参数不起作用。

如何限制网络服务正文的大小?

最佳答案

Jetty 可以根据特定的 Content-Type 对请求正文内容施加 3 个限制值。

内容类型: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) 作为适用于所有已部署 Web 应用程序的服务器属性

Server.setAttribute("org.eclipse.jetty.server.Request.maxFormContentSize", 100000)

2) 作为适用于所有已部署 Web 应用程序的系统属性

$ 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值、servlet 规范和 Jetty 不参与解析或限制大小。

如果您正在使用库来处理您的请求(REST、SOAP 等),请检查该库,看看它是否具有根据大小或其他原因拒绝请求的机制(例如:格式不正确、缺少预期/所需数据等)。

一如既往,如果您想要某个功能,请随时在 Eclipse Jetty 问题跟踪器上请求,网址为 https://github.com/eclipse/jetty.project/issues

关于Jetty 和最大内容大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49228950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com