Co to jest wieloczęściowe żądanie HTTP?

300

Od jakiegoś czasu piszę aplikacje na iPhone'a, wysyłam dane do serwera, odbieram dane (przez protokół HTTP), nie myśląc o tym zbyt wiele. W większości jestem teoretycznie zaznajomiony z procesem, ale nie jestem tak zaznajomiony z żądaniem wieloczęściowym HTTP. Znam jego podstawową strukturę, ale jej rdzeń mi umyka.

Wygląda na to, że ilekroć wysyłam coś innego niż zwykły tekst (np. Zdjęcia, muzyka), muszę użyć żądania wieloczęściowego. Czy ktoś może mi krótko wyjaśnić, dlaczego jest używany i jakie są jego zalety?

Jeśli go używam, dlaczego lepiej przesyłać zdjęcia w ten sposób?

MegaManX
źródło
1
Aby uzyskać informacje, zobacz następujący link: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Odpowiedzi:

286

Wieloczęściowe żądanie HTTP to żądanie HTTP konstruowane przez klientów HTTP w celu przesłania plików i danych do serwera HTTP. Jest powszechnie używany przez przeglądarki i klientów HTTP do przesyłania plików na serwer.

Iggy
źródło
4
Chciałem tylko dodać, że pola danych formularza wieloczęściowego są wysyłane w kolejności . To nie jest coś, co od razu jest oczywiste - dodałem tutaj listę linków: github.com/balderdashy/skipper/blob/master/… Jeśli mam trochę czasu, aby przygotować testowy przypadek za pomocą PhantomJS / webkit, dodam link tam również. Przeglądarki przestrzegają tej części specyfikacji, nawet już w IE6.
mikermcneil
88
Trudność polega na zrozumieniu, dlaczego nazywa się to żądaniem wieloczęściowym , a nie czymś bardziej oczywistym, na przykład żądaniem przesłania pliku .
Rafael Eyng
28
OP chciał filozoficznego podejścia i odpowiedzi. Ta odpowiedź nie wyjaśnia części „dlaczego”. Chodzi bardziej o część „jaka”. Nie jestem wielkim fanem downvotingu, ale twierdzę, że ta odpowiedź nie jest tym, czego chciał OP i szukałem.
Saeed Neamati,
6
Typ zawartości „application / x-www-form-urlencoded” jest nieefektywny w przypadku wysyłania dużych ilości danych binarnych lub tekstu zawierającego znaki spoza ASCII. Do przesyłania formularzy zawierających pliki, dane inne niż ASCII i dane binarne należy używać typu treści „multipart / form-data”. ŹRÓDŁO ORYGINALNE - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal
2
Więcej szczegółów z zrzutami ekranu Firebug
Piyush Chordia
22

Jak podaje oficjalna specyfikacja ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ), „ jeden lub więcej różnych zestawów danych jest połączonych w jedną całość ”. Tak więc, gdy zdjęcia i muzyka są traktowane jako wiadomości wieloczęściowe, jak wspomniano w pytaniu, prawdopodobnie istnieją również metadane w postaci zwykłego tekstu, co powoduje, że żądanie zawiera różne typy danych (binarne, tekstowe), co oznacza użycie wieloczęściowe.

csonti
źródło
2
Nie sądzę, że tak jest. Podczas przesyłania obrazu cały obraz (w tym metadane) będzie stanowić jeden zestaw danych w treści żądania. To wciąż prośba wieloczęściowa, nawet jeśli w ciele jest tylko jedna część. Możesz także utworzyć prośbę o przesłanie wielu plików jednocześnie.
Dario Seidl
1
@DarioSeidl standard zakłada, że ​​możesz przesłać plik z formularza internetowego, który może zawierać inne pola danych oprócz samego pliku. Na przykład oprócz oryginalnej nazwy pliku użytkownik może dołączyć opis. Multipart obsługuje również ogólne binarne obiekty blob, które są odłączone od koncepcji określonego „pliku” pochodzącego.
Ionoclast Brigham