Ich möchte eine Frage zum stellen multipart/form-data
. Im HTTP-Header finde ich, dass die Content-Type: multipart/form-data; boundary=???
.
Soll das ???
freie vom Benutzer definiert werden? Oder wird es aus dem HTML generiert? Kann ich das definieren ??? = abcdefg
?
Antworten:
Ja.
Nr HTML hat nichts damit zu tun. Lesen Sie unten.
Ja.
Wenn Sie die folgenden Daten an den Webserver senden möchten:
Verwenden
application/x-www-form-urlencoded
wäre wie folgt:Wie Sie sehen können, weiß der Server, dass die Parameter durch ein kaufmännisches Und getrennt sind
&
. Wenn&
ein Parameterwert erforderlich ist, muss er codiert werden.Woher weiß der Server, wo ein Parameterwert beginnt und endet, wenn er eine HTTP-Anforderung mit empfängt
multipart/form-data
?Verwenden der Grenze , ähnlich wie
&
.Zum Beispiel:
In diesem Fall ist der Grenzwert
XXX
. Sie geben es imContent-Type
Header an, damit der Server weiß, wie die empfangenen Daten aufgeteilt werden.Sie müssen also:
Verwenden Sie einen Wert, der in den an den Server gesendeten HTTP-Daten nicht angezeigt wird.
Seien Sie konsistent und verwenden Sie überall in der Anforderungsnachricht denselben Wert.
quelle
Die genaue Antwort auf die Frage lautet: Ja, Sie können einen beliebigen Wert für den
boundary
Parameter verwenden , da dieser nicht länger als 70 Byte ist und nur aus 7 Bit bestehtUS-ASCII
Zeichen (druckbar) besteht.Wenn Sie eines verwenden
multipart/*
Inhaltstypen, sind Sie tatsächlich erforderlich , die angeben ,boundary
Parameter in derContent-Type
Kopfzeile, da sonst der Server (im Fall einer HTTP - Anforderung) nicht in der Lage sein , um die Nutzlast zu analysieren.Sie möchten den
charset
Parameter wahrscheinlich auchUTF-8
in IhremContent-Type
Header auf setzen, es sei denn, Sie können absolut sicher sein, dass nur diesUS-ASCII
Zeichensatz in den Nutzdaten verwendet wird.Einige relevante Auszüge aus dem RFC2046 :
4.1.2. Zeichensatzparameter:
5.1. Mehrteiliger Medientyp
Hier ist ein Beispiel mit einer beliebigen Grenze:
quelle
Multipart / Formulardaten enthalten Grenzen zu getrennten Name / Wert-Paaren. Die Grenze fungiert als Markierung für jeden Teil der Namen / Wert-Paare, die beim Senden eines Formulars übergeben werden. Die Grenze wird automatisch zu einem Inhaltstyp eines Anforderungsheaders hinzugefügt.
Das Formular mit dem Attribut enctype = "multipart / form-data" hat einen Anforderungsheader. Inhaltstyp: multipart / form-data; Grenze --- WebKit193844043-h ( Browser generiert vaue ).
Die übergebene Nutzlast sieht ungefähr so aus:
Auf der Webservice-Seite wird es in Form von @Consumes ("Multipart / Formulardaten") verwendet.
Beachten Sie, dass Sie beim Testen Ihres Webservices mit Chrome Postman die Option Formulardaten (Optionsfeld) und das Menü Datei im Dropdown-Feld aktivieren müssen, um den Anhang zu senden. Die explizite Angabe des Inhaltstyps als mehrteilige / Formulardaten löst einen Fehler aus. Da die Grenze fehlt, wird die Curl-Anforderung von Postman an den Server mit Inhaltstyp überschrieben, indem die Grenze angehängt wird, die einwandfrei funktioniert.
Siehe RFC1341, Abschnitt 7.2. Der mehrteilige Inhaltstyp
quelle