tomcat中的HttpRequest最大允许大小?
Posted
技术标签:
【中文标题】tomcat中的HttpRequest最大允许大小?【英文标题】:HttpRequest maximum allowable size in tomcat? 【发布时间】:2011-02-26 05:19:51 【问题描述】:单个HttpURLConnection
到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 有参数
maxPostSize
将由容器 FORM URL 参数解析处理的 POST 的最大大小(以字节为单位)。可以通过将此属性设置为小于或等于 0 的值来禁用此限制。如果未指定,则此属性设置为 2097152(2 兆字节)。
另一个限制是:
maxHttpHeaderSize 请求和响应 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.xml
或 webapps
下的任何其他文件,就此而言。我怎样才能让它解压应用程序,以便我可以访问配置文件?【参考方案4】:
只是为了补充答案,App Server Apache Geronimo 3.0 使用 Tomcat 7 作为 Web 服务器,在该环境中,文件 server.xml 位于
<%GERONIMO_HOME%>/var/catalina/server.xml
.
即使Application Server->WebServer->TomcatWebConnector->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-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
中,因此在以后的更新过程中不会覆盖对原始文件的任何修改。
【讨论】:
以上是关于tomcat中的HttpRequest最大允许大小?的主要内容,如果未能解决你的问题,请参考以下文章