Was ist eine mehrteilige http-Anfrage?

300

Ich schreibe seit einiger Zeit iPhone-Anwendungen, sende Daten an den Server, empfange Daten (über das HTTP-Protokoll), ohne zu viel darüber nachzudenken. Meistens bin ich theoretisch mit dem Prozess vertraut, aber der Teil, den ich nicht so gut kenne, ist eine mehrteilige HTTP-Anfrage. Ich kenne seine Grundstruktur, aber der Kern davon entzieht sich mir.

Es scheint, dass ich immer dann, wenn ich etwas anderes als einfachen Text (wie Fotos, Musik) sende, eine mehrteilige Anfrage verwenden muss. Kann mir jemand kurz erklären, warum es verwendet wird und was seine Vorteile sind?

Wenn ich es benutze, warum ist es dann besser, Fotos auf diese Weise zu senden?

MegaManX
quelle
1
Weitere Informationen finden Sie unter folgendem Link: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Antworten:

286

Eine mehrteilige HTTP-Anforderung ist eine HTTP-Anforderung, die HTTP-Clients erstellen, um Dateien und Daten an einen HTTP-Server zu senden. Es wird häufig von Browsern und HTTP-Clients verwendet, um Dateien auf den Server hochzuladen.

Iggy
quelle
4
Ich wollte nur hinzufügen, dass mehrteilige Formulardatenfelder der Reihe nach gesendet werden . Dies ist nicht sofort offensichtlich. Ich habe hier eine Liste mit Links hinzugefügt: github.com/balderdashy/skipper/blob/master/… Wenn ich etwas Zeit habe, um einen Testfall mit PhantomJS / Webkit zusammenzustellen, werde ich hinzufügen der Link dort auch. Browser befolgen diesen Teil der Spezifikation bereits im IE6.
Mikermcneil
88
Der schwierige Teil ist zu verstehen, warum es als mehrteilige Anforderung bezeichnet wird , anstatt als etwas offensichtlicheres, wie z . B. eine Anforderung zum Hochladen von Dateien .
Rafael Eyng
28
Das OP wollte einen philosophischen Ansatz und eine Antwort. Diese Antwort erklärt nicht den "Warum" -Teil. Es geht mehr um "was" Teil. Ich bin kein großer Fan von Downvoting, aber ich behaupte, dass diese Antwort nicht das ist, was OP wollte, und ich habe danach gesucht.
Saeed Neamati
6
Der Inhaltstyp "application / x-www-form-urlencoded" ist ineffizient, um große Mengen von Binärdaten oder Text mit Nicht-ASCII-Zeichen zu senden. Der Inhaltstyp "Multipart / Formulardaten" sollte zum Senden von Formularen verwendet werden, die Dateien, Nicht-ASCII-Daten und Binärdaten enthalten. ORIGINALQUELLE - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal
2
Weitere Details mit Firebug-Screenshots hier: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia
22

In der offiziellen Spezifikation ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ) heißt es: " Ein oder mehrere verschiedene Datensätze werden in einem einzigen Körper zusammengefasst. " Wenn also Fotos und Musik wie in der Frage erwähnt als mehrteilige Nachrichten behandelt werden, sind wahrscheinlich auch einige Nur-Text-Metadaten zugeordnet, sodass die Anforderung verschiedene Datentypen (Binär, Text) enthält, was die Verwendung von mehrteiligen Nachrichten impliziert.

csonti
quelle
2
Ich glaube nicht, dass das der Fall ist. Beim Hochladen eines Bildes ist das gesamte Bild (einschließlich Metadaten) ein Datensatz im Anforderungshauptteil. Es ist immer noch eine mehrteilige Anfrage, auch wenn es nur einen Teil im Körper gibt. Sie können auch eine Anforderung zum gleichzeitigen Hochladen mehrerer Dateien erstellen.
Dario Seidl
1
@DarioSeidl Der Standard geht davon aus, dass Sie möglicherweise einen Datei-Upload von einem Webformular senden, der neben dem Datei-Upload selbst auch andere Datenfelder enthalten kann. Beispielsweise kann der Benutzer zusätzlich zum ursprünglichen Dateinamen eine Beschreibung hinzufügen. Multipart verarbeitet auch generische binäre Blobs, die vom Konzept einer bestimmten ursprünglichen "Datei" getrennt sind.
Ionoclast Brigham