HttpRequest максимально допустимый размер в tomcat?
Какой максимальный размер данных я могу отправить за один раз? HttpURLConnection
в Tomcat
? Есть ли ограничения по размеру запроса?
5 ответов
Раздел разъема имеет параметр
maxPostSize
Максимальный размер в байтах POST, который будет обрабатываться при разборе параметра URL-адреса FORM контейнера. Ограничение можно отключить, установив для этого атрибута значение, меньшее или равное 0. Если не указано, для этого атрибута установлено значение 2097152 (2 мегабайта).
Еще один предел:
maxHttpHeaderSize Максимальный размер HTTP-заголовка запроса и ответа, указанный в байтах. Если не указан, этот атрибут имеет значение 4096 (4 КБ).
Вы найдете их в
$TOMCAT_HOME/conf/server.xml
Вы должны изменить два возможных ограничения:
В 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. По умолчанию (свежая установка tomcat)
Когда вы загружаете tomcat с их официального сайта (сегодня это tomcat версии 9.0.26), все приложения, которые вы установили в tomcat, могут обрабатывать HTTP-запросы неограниченного размера, учитывая, что сами приложения не имеют ограничений на размер запроса.
Однако, когда вы пытаетесь загрузить приложение в приложение менеджера Tomcat, это приложение имеет ограничение по умолчанию для файла войны 50 МБ. Если вы пытаетесь установить Jenkins, например, который на сегодняшний день составляет 77 МБ, это не удастся.
2. Настройте ограничение размера HTTP-запроса на порт для каждого порта Tomcat.
У самого Tomcat есть ограничение на размер для каждого порта, и это определено вconf\server.xml
. Это контролируетсяmaxPostSize
атрибут каждого Connector
(порт). Если этот атрибут не существует, что есть по умолчанию, нет ограничений на размер запроса.
Чтобы добавить ограничение для определенного порта, установите размер в байтах для атрибута. Например, приведенная ниже конфигурация для порта 8080 по умолчанию ограничивает размер запроса до 200 МБ. Это означает, что все приложения, установленные через порт 8080, теперь имеют ограничение на размер 200 МБ.
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxPostSize="209715200" />
3. Настройте ограничение на размер на уровне приложения.
После прохождения ограничения размера уровня порта вы все равно можете настроить ограничение уровня приложения. Это также означает, что предел уровня приложения должен быть меньше ограничения уровня порта. Ограничение можно установить с помощью аннотации внутри каждого сервлета или в файле 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.xml
конфигурация лимита запросов 50 МБ. Чтобы установить (загрузить) приложение размером более 50 МБ через это приложение-менеджер, необходимо изменить лимит. Откройте файл web.xml приложения-менеджера изwebapps\manager\WEB-INF\web.xml
и следуйте приведенному выше руководству, чтобы изменить ограничение размера и, наконец, перезапустить tomcat.
Хотя другие ответы включают в себя некоторые из следующих сведений, это абсолютный минимум, который необходимо изменить в экземплярах EC2, особенно в отношении развертывания больших файлов WAR, и он наименее вероятно может вызвать проблемы при будущих обновлениях. Я сталкивался с этими ограничениями примерно раз в два года из-за постоянно увеличивающегося размера файла WAR Jenkins (сейчас ~72 МБ).
Более конкретно, этот ответ применим, если вы столкнулись с вариантом следующей ошибки в 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
По умолчанию максимальный размер загрузки составляет ровно 50 МБ:
<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
, поэтому любые изменения исходного файла не будут перезаписаны во время будущих обновлений.
Чтобы добавить ответы, сервер приложений Apache Geronimo 3.0 использует Tomcat 7 в качестве веб-сервера, и в этой среде файл server.xml находится по адресу <%GERONIMO_HOME%>/var/catalina/server.xml
,
Конфигурация вступает в силу, даже если консоль Geronimo в Application Server->WebServer->TomcatWebConnector->maxPostSize
по-прежнему отображается 2097152 (значение по умолчанию)
Посмотреть это https://serverfault.com/a/805783/162909
если вы устанавливаете только пакет tomcat7, то менеджер не устанавливается. нужно установить tomcat7-admin
он добавляет webapps\manager\WEB-INF\web.xml
по умолчанию ограничение загрузки 50 МБ