HttpRequest在tomcat中允许的最大大小?

时间:2010-06-01 06:30:18

标签: java tomcat

我可以将HttpURLConnection发送到Tomcat的最大数据量是多少?请求大小是否有任何限制?

5 个答案:

答案 0 :(得分:57)

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

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>

答案 1 :(得分:48)

connector section有参数

maxPostSize

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

另一个限制是:

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

您可以在

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

答案 2 :(得分:2)

只是为了添加答案,App Server Apache Geronimo 3.0使用Tomcat 7作为Web服务器,在该环境中,文件server.xml位于 <%GERONIMO_HOME%>/var/catalina/server.xml

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

答案 3 :(得分:2)

完整答案

1。默认值(重新安装tomcat)

当您从其官方网站(今天的Tomcat版本为9.0.26)下载tomcat时,假设这些应用程序本身可以执行,则您安装到tomcat的所有应用程序都可以处理大小不受限制的HTTP请求。对请求大小没有任何限制。

但是,当您尝试在tomcat的经理应用中上传应用时,该应用的默认战争文件限制为 50MB 。例如,如果您要安装的Jenkins如今已是其他操作系统,那么它的大小为77 MB,那么它将失败。

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

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

要为特定端口添加限制,请为属性设置字节大小。例如,默认的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的Manager应用程序(默认情况下为localhost:8080 / manager)仅是默认Web应用程序。默认情况下,该应用的请求限制为web.xml配置为 50MB 。要通过此管理器应用安装(上传)大小大于50MB的应用,您必须更改限制。从webapps\manager\WEB-INF\web.xml打开管理器应用程序的web.xml文件,并按照上述指南更改大小限制,最后重新启动tomcat。

答案 4 :(得分:0)

尽管其他答案还包括以下一些信息,但这是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)修改的 only 文件是:

/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中,因此对原始文件的任何修改都不会在以后的更新中被覆盖。