O que significa enctype='multipart/form-data'
em um formulário HTML e quando devemos utilizá-lo?
Quando você faz um pedido POST, você tem que codificar os dados que formam o corpo do pedido de alguma forma.
Os formulários HTML fornecem três métodos de codificação.
O trabalho estava sendo feito para adicionar application/json
, mas isso foi abandonado.
(Outras codificações são possíveis com pedidos HTTP gerados usando outros meios que não o envio de um formulário HTML).
As especificidades dos formatos não são importantes para a maioria dos desenvolvedores. Os pontos importantes são:
texto/plaina
.Quando você está escrevendo código do lado do cliente:
multipart/form-data
quando o seu formulário incluir qualquer <input type="file">
elementosmultipart/form-data' ou
application/x-www-form-urlencoded', mas `application/x-www-form-urlencoded' será mais eficienteQuando você está escrevendo código do lado do servidor:
A maioria (como o CGI->param
de Perl ou o exposto pelo superglobal $_POST
do PHP) irá cuidar das diferenças para você. Não se preocupe em tentar analisar o input bruto recebido pelo servidor.
Às vezes você encontrará uma biblioteca que não consegue lidar com os dois formatos. A biblioteca mais popular do Node.js para lidar com dados de formulários é a body-parser, que não pode lidar com pedidos de várias partes (mas tem documentação que recomenda algumas alternativas que podem).
Se você está escrevendo (ou depurando) uma biblioteca para analisar ou gerar os dados brutos, então você precisa começar a se preocupar com o formato. Você também pode querer saber sobre ele por interesse.
A "aplicação/x-www-form-urlencoded" é mais ou menos o mesmo que uma cadeia de consulta no final da URL.
O multipart/form-data
é significativamente mais complicado, mas permite que arquivos inteiros sejam incluídos nos dados. Um exemplo do resultado pode ser encontrado na especificação HTML 4.
O 'texto/plano' é introduzido pelo HTML 5 e é útil apenas para depuração - a partir de the spec: Não são interpretáveis de forma confiável pelo computador - e eu argumentaria que os outros combinados com ferramentas (como a aba Net nas ferramentas de desenvolvimento da maioria dos navegadores) são melhores para isso).
`enctype='multipart/form-data' é um tipo de codificação que permite que arquivos sejam enviados através de um POST. Muito simplesmente, sem esta codificação os arquivos não podem ser enviados através do POST.
Se você quiser permitir que um usuário carregue um arquivo através de um formulário, você deve usar este enctype.
Ao enviar um formulário, você diz ao seu navegador para enviar, através do protocolo HTTP, uma mensagem na rede, devidamente envolvida em uma estrutura de mensagens do protocolo TCP/IP. Uma página HTML tem uma forma de enviar dados para o servidor: utilizando <form>
s.
Quando um formulário é submetido, um Pedido HTTP se criado e enviado para o servidor, a mensagem conterá os nomes dos campos no formulário e os valores preenchidos pelo usuário. Esta transmissão pode acontecer com POST
ou GET
HTTP métodos.
POST
diz ao seu navegador para construir uma mensagem HTTP e colocar todo o conteúdo no corpo da mensagem (uma forma muito útil de fazer as coisas, mais segura e também flexível).GET
irá submeter os dados do formulário no querystring. Ele tem algumas restrições sobre a representação e comprimento dos dados.O atributo enctype
só tem sentido quando se utiliza o método POST
. Quando especificado, ele instrui o navegador a enviar o formulário codificando seu conteúdo de uma forma específica. De MDN - Form enctype:
Quando o valor do atributo método é post, enctype é o MIME tipo de conteúdo que é usado para enviar o formulário para o servidor.
aplicação/x-www-form-urlencoded
: Este é o padrão. Quando o formulário é enviado, todos os nomes e valores são coletados e URL Encoding é executado na string final.text/plain
: Os espaços são convertidos, mas não é feita mais nenhuma codificação.Ao enviar os formulários, podem surgir algumas preocupações de segurança, como indicado no RFC 7578 Secção 7: Dados de formulários multipartes - Considerações de segurança:
Todo o software de processamento de formulários deve tratar os dados fornecidos pelo usuário com sensibilidade, pois muitas vezes contém informações confidenciais ou pessoais informações de identificação. Há uma utilização generalizada do formulário "auto-preenchimento". recursos em navegadores da web; estes podem ser usados para enganar os usuários para enviar sem conhecimento de causa informações confidenciais ao completar de outra forma tarefas inócuas. dados multipartes/formato não fornecem nenhuma característica para verificar a integridade, garantindo a confidencialidade, evitando o utilizador confusão, ou outras características de segurança; essas preocupações devem ser abordados pelo preenchimento de formulários e aplicações de interpretação de dados de formulários.
As solicitações que recebem formulários e os processam devem ser cuidadosas não fornecer dados de volta ao site de processamento de formulários solicitantes que não se destinava a ser enviado.
É importante ao interpretar o nome do conteúdo... Campo de cabeçalho de disposição para não sobrescrever inadvertidamente arquivos no espaço de arquivo do destinatário.
Isto preocupa-o se é um programador e o seu servidor irá processar formulários enviados por utilizadores que podem acabar por conter informação sensível.