Więcej
Co oznacza enctype='multipart/form-data'?
Co oznacza enctype='multipart/form-data'
w formularzu HTML i kiedy należy go używać?
1281
3
Kiedy wykonujesz żądanie POST, musisz w jakiś sposób zakodować dane, które tworzą ciało żądania.
Formularze HTML udostępniają trzy metody kodowania.
application/x-www-form-urlencoded
(domyślnie)multipart/form-data
(domyślnie)text/plain
.Trwały prace nad dodaniem
application/json
, ale zostały one porzucone.(Inne kodowania są możliwe dla żądań HTTP generowanych przy użyciu innych środków niż formularz HTML).
Specyfika formatów nie ma znaczenia dla większości programistów. Ważne są następujące kwestie:
text/plain
.Kiedy piszesz kod po stronie klienta:
multipart/form-data
gdy twój formularz zawiera jakiekolwiek elementy<input type="file">
.multipart/form-data
lubapplication/x-www-form-urlencoded
aleapplication/x-www-form-urlencoded
będzie bardziej wydajneKiedy piszesz kod po stronie serwera:
Większość z nich (jak na przykład Perl's
CGI->param
lub ta ujawniona przez PHP's$_POST
superglobal) zajmie się różnicami za Ciebie. Nie zawracaj sobie głowy próbami parsowania surowych danych wejściowych otrzymywanych przez serwer.Czasami można znaleźć bibliotekę, która nie radzi sobie z obydwoma formatami. Najpopularniejszą biblioteką Node.js's do obsługi danych z formularzy jest body-parser, która nie radzi sobie z wieloczęściowymi żądaniami (ale ma dokumentację, która poleca kilka alternatyw, które mogą to zrobić).
Jeśli piszesz (lub debugujesz) bibliotekę do parsowania lub generowania surowych danych, wtedy musisz zacząć martwić się o format. Możesz również chcieć wiedzieć o tym dla samego zainteresowania'.
Format
application/x-www-form-urlencoded
jest mniej więcej tym samym, co ciąg zapytania na końcu adresu URL.Opcja
multipart/form-data
jest znacznie bardziej skomplikowana, ale pozwala na dołączanie całych plików do danych. Przykład wyniku można znaleźć w specyfikacji HTML 4.text/plain
jest wprowadzony przez HTML 5 i jest użyteczny tylko do debugowania - z specyfikacji: They are not reliably interpretable by computer - and I'd argue that the others combined with tools (like the Net tab in the developer tools of most browsers) are better for that).enctype='multipart/form-data` jest typem kodowania, który pozwala na wysyłanie plików przez POST. Mówiąc prościej, bez tego kodowania pliki nie mogą być wysyłane przez POST.
Jeśli chcesz pozwolić użytkownikowi na przesłanie pliku przez formularz, musisz użyć tego enctype.
Wysyłając formularz, każesz swojej przeglądarce wysłać, za pomocą protokołu HTTP, wiadomość w sieci, odpowiednio opakowaną w strukturę wiadomości protokołu TCP/IP. Strona HTML posiada sposób na wysyłanie danych do serwera: poprzez użycie ``s.
Kiedy formularz jest wysyłany, tworzone jest żądanie HTTP i wysyłane do serwera, wiadomość ta będzie zawierała nazwy pól formularza i wartości wypełnione przez użytkownika. Ta transmisja może się odbyć za pomocą metod
POST
lubGET
_HTTP.POST
mówi przeglądarce, aby zbudowała wiadomość HTTP i umieściła całą zawartość w treści wiadomości (bardzo użyteczny sposób, bardziej bezpieczny i elastyczny).GET
](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET) przekaże dane z formularza w querystring. Ma pewne ograniczenia co do reprezentacji danych i długości.Określenie jak wysłać formularz do serwera
Atrybut
enctype
ma sens tylko przy użyciu metodyPOST
. Gdy jest określony, instruuje przeglądarkę, aby wysłała formularz kodując jego zawartość w określony sposób. Z MDN - Form enctype:application/x-www-form-urlencoded
: Jest to wartość domyślna. Kiedy formularz jest wysyłany, wszystkie nazwy i wartości są zbierane i URL Encoding jest wykonywane na końcowym łańcuchu.multipart/form-data
: Znaki NIE są kodowane. Jest to ważne, gdy formularz posiada kontrolkę wysyłania plików. Chcesz wysłać plik binarnie i to zapewnia, że strumień bitów nie jest zmieniany.text/plain
: Spacje są konwertowane, ale nie jest wykonywane dalsze kodowanie.Bezpieczeństwo
Podczas wysyłania formularzy mogą pojawić się pewne problemy z bezpieczeństwem, jak podano w RFC 7578 Section 7: Multipart form data - Security considerations:
Dotyczy to deweloperów, których serwer będzie przetwarzał formularze przesłane przez użytkowników, które mogą zawierać poufne informacje.