tomcat中的HttpRequest最大允许大小?

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 中,因此在以后的更新过程中不会覆盖对原始文件的任何修改。

【讨论】:

以上是关于tomcat中的HttpRequest最大允许大小?的主要内容,如果未能解决你的问题,请参考以下文章

限制 Tomcat 中的最大请求大小

如何通过 HttpRequest 从连接的 Android 设备访问本地 tomcat

如何限制 Spring Web 服务中的最大大小请求?

tomcat连接数设置

tomcat 内存大小配置

tomcat下jvm设置的最大值