Jetty 码头和最大内容物尺寸

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

我使用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...
* 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