Cos'è la richiesta multipart http?


300

Scrivo applicazioni iPhone da qualche tempo, invio di dati al server, ricezione di dati (tramite protocollo HTTP), senza pensarci troppo. Principalmente ho teoricamente familiarità con il processo, ma la parte che non conosco è la richiesta multipart HTTP. Conosco la sua struttura di base, ma il suo nucleo mi sfugge.

Sembra che ogni volta che invio qualcosa di diverso dal semplice testo (come foto, musica), devo usare una richiesta multipart. Qualcuno può spiegarmi brevemente perché viene utilizzato e quali sono i suoi vantaggi?

Se lo uso, perché è il modo migliore per inviare foto in quel modo?


1
Per informazioni consultare il seguente link: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Risposte:


286

Una richiesta multipart HTTP è una richiesta HTTP che i client HTTP costruiscono per inviare file e dati a un server HTTP. È comunemente utilizzato da browser e client HTTP per caricare file sul server.


4
Volevo solo aggiungere che i campi di dati del modulo multipart vengono inviati in ordine . Questo non è qualcosa che è immediatamente ovvio-- Ho aggiunto un elenco di collegamenti qui: github.com/balderdashy/skipper/blob/master/… Se avrò un po 'di tempo per mettere insieme un caso di prova usando PhantomJS / webkit, aggiungerò il link anche lì. I browser obbediscono a questa parte delle specifiche, anche fino a IE6.
mikermcneil,

88
La parte difficile è capire perché si chiama richiesta multipart , invece di qualcosa di più ovvio, come la richiesta di caricamento di file .
Rafael Eyng,

28
L'OP voleva un approccio e una risposta filosofici. Questa risposta non spiega la parte "perché". Si tratta più di "cosa" parte. Non sono un grande fan del downvoting, ma sostengo che questa risposta non è ciò che OP ha voluto e ho cercato.
Saeed Neamati,

6
Il tipo di contenuto "application / x-www-form-urlencoded" non è efficace per l'invio di grandi quantità di dati binari o testo contenente caratteri non ASCII. Il tipo di contenuto "multipart / form-data" deve essere utilizzato per l'invio di moduli che contengono file, dati non ASCII e dati binari. FONTE ORIGINALE - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal

2
Maggiori dettagli con gli screenshot di firebug qui: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia

22

Come afferma la specifica ufficiale ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ), " uno o più insiemi di dati diversi sono combinati in un unico corpo ". Quindi, quando le foto e la musica vengono gestite come messaggi multipart come menzionato nella domanda, probabilmente ci sono anche alcuni metadati in testo normale associati, facendo così la richiesta contenente diversi tipi di dati (binario, testo), il che implica l'uso di multipart.


2
Non penso sia così. Quando si carica un'immagine, l'intera immagine (inclusi i metadati) sarà una serie di dati nel corpo della richiesta. È ancora una richiesta multipart, anche se c'è solo una parte nel corpo. Puoi anche creare una richiesta per caricare più file contemporaneamente.
Dario Seidl

1
@DarioSeidl lo standard presuppone che potresti inviare un caricamento di file da un modulo web, che può includere altri campi di dati oltre al caricamento del file stesso. Ad esempio, oltre al nome del file originale, l'utente potrebbe includere una descrizione. Multipart gestisce anche BLOB binari generici che sono disconnessi dal concetto di un particolare "file" di origine.
Ionoclast Brigham,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.