我可以将HttpURLConnection
发送到Tomcat
的最大数据量是多少?请求大小是否有任何限制?
答案 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)
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)
当您从其官方网站(今天的Tomcat版本为9.0.26)下载tomcat时,假设这些应用程序本身可以执行,则您安装到tomcat的所有应用程序都可以处理大小不受限制的HTTP请求。对请求大小没有任何限制。
但是,当您尝试在tomcat的经理应用中上传应用时,该应用的默认战争文件限制为 50MB 。例如,如果您要安装的Jenkins如今已是其他操作系统,那么它的大小为77 MB,那么它将失败。
Tomcat本身对每个端口都有大小限制 ,这在conf\server.xml
中定义。这由每个maxPostSize
(端口)的Connector
属性控制。如果该属性不存在(默认情况下为默认值),则请求大小无限制。
要为特定端口添加限制,请为属性设置字节大小。例如,默认的8080端口的以下配置将请求大小限制为200 MB。这意味着现在安装在端口8080下的所有应用程序的大小限制都为200MB
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="209715200" />
在通过端口级别大小限制后,您仍然可以配置应用程序级别限制。这也意味着应用程序级别限制应小于端口级别限制。可以通过每个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>
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-size
和max-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
中,因此对原始文件的任何修改都不会在以后的更新中被覆盖。