2015-09-01 7 views
5

Ho notato che ci sono (almeno) due modi di caricare un file su un server HTTP tramite un'API.API caricamento file: multipart/form-data rispetto ai contenuti grezzi nel corpo?

È possibile utilizzare multipart/form-data (che è ciò che i browser in modo nativo per gli ingressi di upload di file HTML), ma è anche possibile POST il contenuto del file all'interno del corpo della richiesta (forse con la corretta intestazione della richiesta Content-Type).

Quali sono i pro e i contro di ciascun metodo (in generale, non da un browser)?

Richieste multipart ad esempio - a seconda di quale libreria HTTP o di rete si utilizza nel proprio ambiente di programmazione (utilizzo Node.js sul lato server e Swift sul lato client) - sembra essere un po 'più complesso da creare e quindi analizzare.

+0

Controllare http://stackoverflow.com/questions/29659154/che-è-il-best-way-to-upload-files-in-a-modern-browser/ – vtortola

+0

@vtortola non è davvero una risposta a questa domanda . Non sto chiedendo informazioni su eventuali implementazioni di rete lato client, solo sui metodi http. –

risposta

8

L'unica differenza a livello di protocollo è che le richieste multipart/form-data devono rispettare RFC 2388 mentre un corpo di richiesta personalizzato può essere arbitrario.

La conseguenza pratica è che una richiesta di multipart/form-data è in genere più grande: mentre ai client è tecnicamente consentito utilizzare un numero non a 7 bit content-transfer-encoding, base64 viene utilizzato dalla maggior parte. Le intestazioni MIME generano un sovraccarico aggiuntivo che può diventare un collo di bottiglia se vengono caricati molti piccoli file. Notare che il supporto per i caricamenti di file multipart/form-data nei client/librerie esistenti è molto più diffuso. È necessario fornire sempre una riserva se non si è sufficientemente certi del set di caratteristiche dei client e degli host intermedi (server proxy). In particolare, tieni presente che se stai progettando un'API per terze parti, altri sviluppatori avranno già familiarità con multipart/form-data e avranno a portata di mano le librerie per farlo.

Problemi correlati