【问题标题】:HttpRequest maximum allowable size in tomcat?tomcat中的HttpRequest最大允许大小?
【发布时间】:2011-02-26 05:19:51
【问题描述】:

单个HttpURLConnectionTomcat 可以发送的最大数据大小是多少?请求大小有限制吗?

【问题讨论】:

    标签: java tomcat


    【解决方案1】:

    您必须修改两个可能的限制:

    conf\server.xml

    <Connector port="80" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
                    maxPostSize="67589953" />
    

    webapps\manager\WEB-INF\web.xml

    <multipart-config>
      <!-- 52MB max -->
      <max-file-size>52428800</max-file-size>
      <max-request-size>52428800</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
    

    【讨论】:

    • 如果我的 web xml 中没有 multipart-config 标签怎么办,是否有默认值?
    • 我的 web xml 中也没有 multipart-config 标签。单独编辑 server.xml 没有任何区别。你能告诉我我需要做哪些其他更改才能接收表单参数值大于 2MB 的 POST 请求吗?
    • 我认为默认大小是无限的。 docs.oracle.com/javaee/6/tutorial/doc/gmhal.html
    • 仅供参考 - 52428800 是 50MB,而不是 52MB。
    【解决方案2】:

    connector section 有参数

    ma​​xPostSize

    将由容器 FORM URL 参数解析处理的 POST 的最大大小(以字节为单位)。可以通过将此属性设置为小于或等于 0 的值来禁用此限制。如果未指定,则此属性设置为 2097152(2 兆字节)。

    另一个限制是:

    ma​​xHttpHeaderSize 请求和响应 HTTP 标头的最大大小,以字节为单位。如果未指定,则此属性设置为 4096 (4 KB)。

    您可以在

    中找到它们
    $TOMCAT_HOME/conf/server.xml
    

    【讨论】:

    • 所以要设置请求大小的限制,我应该将“maxPostSize”设置为最大允许值......对吗?
    • 将 maxPostSize 的值设置为 0 导致 0 POST 大小限制。对于无限大小,值必须小于 0。
    • 这不会影响允许的最大 POST 大小,只是 Tomcat 将尝试解析为 www-form-urlencoded 的最大大小。
    【解决方案3】:

    完整答案

    1。默认(全新安装tomcat)

    当你从他们的官方网站下载tomcat(今天是tomcat 9.0.26版)时,你安装到tomcat的所有应用程序都可以处理无限大小的HTTP请求,因为应用程序本身可以对请求大小没有任何限制。

    但是,当您尝试在 tomcat 的管理器应用中上传应用时,该应用的默认战争文件限制为 50MB。例如,如果您尝试安装 Jenkins,它现在是 77 MB,它将失败。

    2。配置tomcat的每端口http请求大小限制

    Tomcat 本身对每个端口都有大小限制,这在conf\server.xml 中定义。这由每个Connector(端口)的maxPostSize 属性控制。如果此属性不存在(默认情况下),则请求大小没有限制

    要为特定端口添加限制,请为属性设置字节大小。例如,默认 8080 端口的以下配置将请求大小限制为 200 MB。这意味着安装在 8080 端口下的所有应用现在的大小限制为 200MB

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxPostSize="209715200" />
    

    3。配置应用级大小限制

    通过端口级别大小限制后,您仍然可以配置应用级别限制。这也意味着应用程序级别限制应小于端口级别限制。可以通过每个 servlet 中的注释或 web.xml 文件中的注释来完成限制。同样,如果根本没有设置,则请求大小没有限制

    通过java注解设置限制

    @WebServlet("/uploadFiles")
    @MultipartConfig( fileSizeThreshold = 0, maxFileSize = 209715200, maxRequestSize = 209715200)
    public class FileUploadServlet extends HttpServlet {
    
        public void doPost(HttpServletRequest request, HttpServletResponse response) {
            // ...
        }
    }
    

    通过 web.xml 设置限制

    <web-app>
      ...
      <servlet>
        ...
        <multipart-config>
          <file-size-threshold>0</file-size-threshold>
          <max-file-size>209715200</max-file-size>
          <max-request-size>209715200</max-request-size>
        </multipart-config>
        ...
      </servlet>
      ...
    </web-app>
    

    4。附录 - 如果您在尝试通过 Tomcat 的 Manager 应用程序安装应用程序时看到文件上传大小错误

    Tomcat 的管理器应用程序(默认为 localhost:8080/manager)只不过是一个默认的 Web 应用程序。默认情况下,该应用的web.xml 配置请求限制为 50MB。要通过此管理器应用程序安装(上传)大小大于 50MB 的应用程序,您必须更改限制。从webapps\manager\WEB-INF\web.xml打开manager app的web.xml文件,按照上面的指导修改大小限制,最后重启tomcat。

    【讨论】:

    • 至少在 debian 10 中,默认的 tomcat 安装没有附带用于管理器应用程序的 web.xmlwebapps 下的任何其他文件,就此而言。我怎样才能让它解压应用程序,以便我可以访问配置文件?
    【解决方案4】:

    只是为了补充答案,App Server Apache Geronimo 3.0 使用 Tomcat 7 作为 Web 服务器,在该环境中,文件 server.xml 位于 &lt;%GERONIMO_HOME%&gt;/var/catalina/server.xml.

    即使Application Server-&gt;WebServer-&gt;TomcatWebConnector-&gt;maxPostSize 处的 Geronimo 控制台仍显示 2097152(默认值),配置也会生效

    【讨论】:

      【解决方案5】:

      虽然其他答案包括以下一些信息,但这是在 EC2 实例上需要更改的绝对最小值,特别是关于大型 WAR 文件的部署,并且最不可能引起问题在以后的更新中。由于 Jenkins WAR 文件的大小不断增加(现在约为 72MB),我每隔一年就会遇到这些限制。

      更具体地说,如果您在catalina.out 中遇到以下错误的变体,则此答案适用:

      SEVERE [https-jsse-nio-8443-exec-17] org.apache.catalina.core.ApplicationContext.log HTMLManager:
      FAIL - Deploy Upload Failed, Exception:
      [org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException:
      the request was rejected because its size (75333656) exceeds the configured maximum (52428800)]
      

      在 Amazon EC2 Linux 实例上,唯一需要从 Tomcat 的默认安装 (sudo yum install tomcat8) 修改的文件是:

      /usr/share/tomcat8/webapps/manager/WEB-INF/web.xml
      

      默认情况下,最大上传大小正好是 50MB:

      <multipart-config>
        <!-- 50MB max -->
        <max-file-size>52428800</max-file-size>
        <max-request-size>52428800</max-request-size>
        <file-size-threshold>0</file-size-threshold>
      </multipart-config>
      

      只有两个值需要修改(max-file-sizemax-request-size):

      <multipart-config>
        <!-- 100MB max -->
        <max-file-size>104857600</max-file-size>
        <max-request-size>104857600</max-request-size>
        <file-size-threshold>0</file-size-threshold>
      </multipart-config>
      

      当在这些实例上升级 Tomcat 时,新版本的管理器 web.xml 将放在 web.xml.rpmnew 中,因此在以后的更新过程中不会覆盖对原始文件的任何修改。

      【讨论】:

        猜你喜欢
        • 2022-10-12
        • 1970-01-01
        • 2011-01-23
        • 1970-01-01
        • 2014-09-02
        • 2015-06-23
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        相关资源
        最近更新 更多