Was bedeutet enctype='multipart/form-data'
in einem HTML-Formular und wann sollte man es verwenden?
Wenn Sie eine POST-Anfrage stellen, müssen Sie die Daten, die den Hauptteil der Anfrage bilden, auf irgendeine Weise kodieren.
HTML-Formulare bieten drei Methoden der Kodierung.
text/plain
Es wurde daran gearbeitet, [application/json
] (http://www.w3.org/TR/html-json-forms/) hinzuzufügen, aber das wurde aufgegeben.
(Andere Kodierungen sind mit HTTP-Anfragen möglich, die mit anderen Mitteln als einer HTML-Formularübermittlung erzeugt werden).
Die Besonderheiten der Formate sind für die meisten Entwickler nicht von Bedeutung. Wichtig sind die folgenden Punkte:
Wenn Sie clientseitigen Code schreiben:
multipart/form-data
, wenn Ihr Formular irgendwelche <input type="file">
Elemente enthält.multipart/form-data
oder application/x-www-form-urlencoded
verwenden, aber application/x-www-form-urlencoded
ist effizienterWenn Sie serverseitigen Code schreiben:
Die meisten (wie z.B. Perls CGI->param
oder die von PHP's $_POST
superglobal) werden sich um die Unterschiede für Sie kümmern. Machen Sie sich nicht die Mühe, die vom Server empfangenen Eingaben zu parsen.
Manchmal werden Sie eine Bibliothek finden, die nicht mit beiden Formaten umgehen kann. Die beliebteste Bibliothek von Node.js für die Verarbeitung von Formulardaten ist body-parser, die nicht mit mehrteiligen Anfragen umgehen kann (aber eine Dokumentation hat, die einige Alternativen empfiehlt, die das können).
Wenn Sie eine Bibliothek zum Parsen oder Generieren der Rohdaten schreiben (oder debuggen), dann müssen Sie sich um das Format kümmern. Vielleicht möchten Sie es aber auch nur aus Interesse wissen.
application/x-www-form-urlencoded" ist mehr oder weniger dasselbe wie ein Query-String am Ende der URL.
multipart/form-data" ist wesentlich komplizierter, aber es ermöglicht die Einbeziehung ganzer Dateien in die Daten. Ein Beispiel für das Ergebnis finden Sie in der [HTML 4-Spezifikation] (http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4).
text/plain" wurde mit HTML 5 eingeführt und ist nur zur Fehlersuche nützlich - aus der Spezifikation: Sie sind nicht zuverlässig vom Computer interpretierbar - und ich würde argumentieren, dass die anderen in Kombination mit Werkzeugen (wie der Registerkarte "Netz" in den Entwicklerwerkzeugen der meisten Browser) dafür besser geeignet sind).
enctype='multipart/form-data' ist ein Kodierungstyp, der es ermöglicht, Dateien über eine POST zu senden. Ganz einfach, ohne diese Kodierung können die Dateien nicht über POST gesendet werden.
Wenn Sie einem Benutzer erlauben wollen, eine Datei über ein Formular hochzuladen, müssen Sie diesen enctype verwenden.
Wenn Sie ein Formular abschicken, weisen Sie Ihren Browser an, über das HTTP-Protokoll eine Nachricht über das Netz zu senden, die ordnungsgemäß in eine TCP/IP-Protokoll-Nachrichtenstruktur verpackt ist. Eine HTML-Seite hat eine Möglichkeit, Daten an den Server zu senden: durch die Verwendung von <form>
.
Wenn ein Formular abgeschickt wird, wird eine HTTP-Anfrage erstellt und an den Server gesendet. Die Nachricht enthält die Feldnamen im Formular und die vom Benutzer eingegebenen Werte. Diese Übertragung kann mit den _HTTP-Methoden POST
oder GET
erfolgen.
POST
weist Ihren Browser an, eine HTTP-Nachricht zu erstellen und den gesamten Inhalt in den Body der Nachricht zu packen (eine sehr nützliche Methode, die sicherer und flexibler ist).GET
übermittelt die Formulardaten im Querystring. Es gibt einige Einschränkungen bezüglich der Datendarstellung und der Länge.Das Attribut enctype
hat nur Sinn, wenn die Methode POST
verwendet wird. Wenn es angegeben wird, weist es den Browser an, das Formular mit einer bestimmten Kodierung des Inhalts zu senden. Aus MDN - Form enctype:
Wenn der Wert des method-Attributs post ist, ist enctype der MIME Typ des Inhalts, der verwendet wird, um das Formular an den Server zu senden.
Bei der Übermittlung von Formularen können einige Sicherheitsbedenken auftreten, wie in RFC 7578 Section 7: Multipart form data - Security considerations dargelegt:
Jede formularverarbeitende Software sollte die vom Benutzer eingegebenen Formulardaten mit Sensibilität behandeln, da sie oft vertrauliche oder persönlich identifizierende Informationen enthalten. In Webbrowsern sind "Auto-Fill"-Funktionen für Formulare weit verbreitet. Funktionen in Webbrowsern; diese können dazu benutzt werden, Benutzer dazu zu bringen unwissentlich vertrauliche Informationen zu senden, wenn sie ansonsten harmlosen Aufgaben. multipart/form-data bietet keine Funktionen Integrität zu prüfen, Vertraulichkeit zu gewährleisten, Benutzerverwirrung zu vermeiden Verwirrung der Benutzer oder andere Sicherheitsmerkmale; diese Belange müssen Diese Belange müssen von den formularausfüllenden und formulardateninterpretierenden Anwendungen berücksichtigt werden.
Anwendungen, die Formulare empfangen und verarbeiten, müssen darauf achten, dass müssen darauf achten, dass sie keine Daten an die anfordernde formularverarbeitende Seite zurücksenden, die nicht gesendet werden sollten.
Bei der Interpretation des Dateinamens des Content- > Disposition-Header-Feldes ist es wichtig, dass Kopfzeilenfeldes ist es wichtig, dass nicht versehentlich Dateien im Dateispeicher des > Empfängers zu überschreiben.
Dies betrifft Sie, wenn Sie Entwickler sind und Ihr Server Formulare verarbeitet, die von Benutzern eingereicht werden und sensible Informationen enthalten könnten.