O que é uma solicitação http multipartes?

300

Estou escrevendo aplicativos para iPhone há algum tempo, enviando dados para o servidor, recebendo dados (via protocolo HTTP), sem pensar muito nisso. Teoricamente, estou familiarizado com o processo, mas a parte que não conheço é a solicitação HTTP de várias partes. Eu conheço sua estrutura básica, mas o núcleo dela me escapa.

Parece que sempre que estou enviando algo diferente de texto simples (como fotos, música), tenho que usar uma solicitação de várias partes. Alguém pode me explicar brevemente por que é usado e quais são suas vantagens?

Se eu usá-lo, por que é a melhor maneira de enviar fotos dessa maneira?

MegaManX
fonte
1
Consulte o link a seguir para obter informações: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Respostas:

286

Uma solicitação HTTP com várias partes é uma solicitação HTTP que os clientes HTTP constroem para enviar arquivos e dados para um Servidor HTTP. É comumente usado por navegadores e clientes HTTP para fazer upload de arquivos para o servidor.

Iggy
fonte
4
Só queria adicionar que os campos de dados do formulário com várias partes sejam enviados em ordem . Isso não é algo óbvio imediatamente-- adicionei uma lista de links aqui: github.com/balderdashy/skipper/blob/master/… Se eu tiver algum tempo para montar um caso de teste usando o PhantomJS / webkit, adicionarei o link lá também. Os navegadores obedecem a essa parte das especificações, mesmo no IE6.
Mckmcneil
88
A parte difícil é entender por que é chamada solicitação de várias partes , em vez de algo mais óbvio, como solicitação de upload de arquivo .
Rafael Eyng 19/03/2015
28
O OP queria uma abordagem e resposta filosófica. Esta resposta não está explicando a parte "por que". É mais sobre "o que" parte. Eu não sou um grande fã de voto negativo, mas eu argumento que essa resposta não é o que o OP queria e eu procurei.
Saeed Neamati 19/08/2015
6
O tipo de conteúdo "application / x-www-form-urlencoded" é ineficiente para enviar grandes quantidades de dados binários ou texto contendo caracteres não ASCII. O tipo de conteúdo "dados de várias partes / formulário" deve ser usado para enviar formulários que contêm arquivos, dados não ASCII e dados binários. FONTE ORIGINAL - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal
2
Mais detalhes com imagens Firebug aqui: cubicrace.com/2016/05/upload-files-https-using-java.html
Piyush Chordia
22

Como diz a especificação oficial ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ), " um ou mais conjuntos diferentes de dados são combinados em um único corpo ". Portanto, quando fotos e músicas são tratadas como mensagens de várias partes, como mencionado na pergunta, provavelmente também existem alguns metadados de texto simples, fazendo com que a solicitação contenha diferentes tipos de dados (binário, texto), o que implica o uso de várias partes.

csonti
fonte
2
Eu não acho que é esse o caso. Ao fazer upload de uma imagem, a imagem inteira (incluindo metadados) será um conjunto de dados no corpo da solicitação. Ainda é uma solicitação de várias partes, mesmo se houver apenas uma parte no corpo. Você também pode criar uma solicitação para fazer upload de vários arquivos de uma só vez.
Dario Seidl
1
@DarioSeidl, o padrão pressupõe que você esteja enviando um upload de arquivo de um formulário da web, que pode incluir outros campos de dados, além do próprio upload de arquivo. Por exemplo, além do nome do arquivo original, o usuário pode incluir uma descrição. Multipart também lida com blobs binários genéricos que são desconectados do conceito de um "arquivo" de origem específico.
Ionoclast Brigham