2016-10-11 1 views
0

Ich konnte keine positive oder negative Antwort auf diese Frage in der offiziellen Tomcat-Dokumentation finden.Kann Apache Tomcat HTTP POST-Anfragen> 2 GB verarbeiten?

+0

Welche Art von Anfrage ist es. Ist es ein Datei-Upload oder der eigentliche POST Körper ist von 2 GB –

+0

Der eigentliche Fall, der zu dieser Frage führte, war ein Datei-Upload, bei dem das Limit 2 GB schien. In der Theorie sollte es beim Zugriff auf die Eingabeströme jedoch nicht darauf ankommen, wie der Körperinhalt strukturiert ist. Diese Frage betrifft also den häufigeren Fall. – aventurin

+0

Oh es ist. Wenn Sie den Datei-Upload durchführen, wird die Multipart-Anfrage und der Server kann die Daten effizienter streamen, da die meisten davon binär sind. Bei normalem POST, bei dem es sich nicht um einen Datei-Upload handelt (angenommen 2 GB JSON-Text), benötigen Sie sowohl auf Client- als auch auf Serverseite viel Speicherplatz, um diese Anfrage zu bearbeiten. Datei-Uploads funktionieren mit Streaming-Verhalten effizienter. Ich habe ein Projekt gemacht, bei dem der Datei-Upload mehr als 8 GB betrug (Imagine Virtual Machine Uploads), –

Antwort

1

Ja

Vom Tomcat Configuration Reference, die Sie sicherlich schon gelesen:

maxPostSize
Die maximale Größe in Bytes des POST, die durch den Behälter FORM URL-Parameter-Analyse behandelt werden. Das Limit kann deaktiviert werden, indem dieses Attribut auf einen Wert kleiner oder gleich 0 gesetzt wird. Wenn nicht angegeben, wird dieses Attribut auf 2097152 (2 Megabyte) festgelegt.

Es bedeutet, dass Sie ein Limit für Ihre Anwendung angeben können, und diese Grenze unbegrenzt sein kann. In der Theorie hat Tomcat keine Begrenzung, solange Sie die notwendige Hardware haben.

+0

Die 'maxPostSize' scheint in einer Tomcat 8.0 oder 8.5 Standardinstallation nicht zu funktionieren. Nach dem Beispiel des nicht blockierenden E/A-Byte-Zählers scheinen Uploads mit weniger als 2 GB überhaupt kein Problem zu sein. Inzwischen hatte ich mehrere Maschinen (physisch, dockered und virtualisiert), wo ich Dateien mit 3.0 GiB Größe hochladen konnte, aber einige scheiterten mit etwas größeren Nutzlasten. Dies ist überraschend, da ich erwarten würde, dass Streaming I/O in der Lage sein sollte, fast beliebige Größen zu handhaben, wenn es> 2 GiB verarbeiten kann. Ich versuche es jedoch, wenn "maxPostSize" einen Effekt hat. – aventurin

0

Tests haben ergeben, dass Apache Tomcat mindestens seit Version 6.0 Anfragen beliebiger Größe verarbeiten kann.

Die Konfiguration der Standardinstallation muss nicht geändert werden, um große synchrone Abfragen verarbeiten zu können.

Für asynchrone Anforderungen (nicht blockierende E/A) gibt es jedoch ein Standard-Zeitlimit von 30 Sekunden, das je nach Netzwerkbandbreite die Datenmenge begrenzt, die mit einer einzigen Anforderung hochgeladen werden kann. Dieser Grenzwert kann geändert werden, indem die Connectoreigenschaft asyncTimeout auf einen geeigneten Wert gesetzt wird.

Seit Tomcat 8.0 mit Servlet API 3.1 gibt es auch die Methode getContentLengthLong() zur Ermittlung von Inhaltslängen> 2GB von Servlet-Anfragen direkt. In früheren Versionen musste der HTTP-Header Content-Length in solchen Fällen explizit geparst werden.

Verwandte Themen