Diferença entre os cabeçalhos HTTP Accept e Content-Type

119

Portanto, o Acceptcabeçalho informa ao servidor o tipo MIME do recurso que o navegador está procurando. Por exemplo, o servidor pode enviar texto sem formatação, HTML, JSON etc.

OK, isso faz sentido, mas quando olho para o Content-Typecabeçalho e parece estar fazendo a mesma coisa. Por exemplo, ele diz ao servidor que deseja texto ou JSON.

Então, qual é a diferença entre os cabeçalhos HTTP Accepte Content-Type?

JohnMerlino
fonte

Respostas:

155

Como você observou corretamente, o cabeçalho Accept é usado pelos clientes HTTP para informar ao servidor quais tipos de conteúdo eles aceitarão. O servidor enviará de volta uma resposta, que incluirá um cabeçalho de tipo de conteúdo informando ao cliente qual é o tipo de conteúdo realmente retornado.

No entanto, como você deve ter notado, as solicitações HTTP também podem conter cabeçalhos de tipo de conteúdo. Por quê? Bem, pense em solicitações POST ou PUT . Com esses tipos de solicitação, o cliente está realmente enviando um monte de dados para o servidor como parte da solicitação, e o cabeçalho Content-Type informa ao servidor quais são realmente os dados (e, portanto, determina como o servidor os analisará).

Em particular, para uma solicitação POST resultante de um envio de formulário HTML, o Tipo de Conteúdo da solicitação (normalmente) será um dos tipos de conteúdo padrão abaixo, conforme especificado pelo enctypeatributo na <form>tag:

  • application/x-www-form-urlencoded (padrão, mais antigo, mais simples, um pouco menos caro para pequenas quantidades de texto ASCII simples, sem suporte para upload de arquivos)
  • multipart/form-data (mais recente, adiciona suporte para upload de arquivos, mais eficiente para grandes quantidades de dados binários ou texto não ASCII)
Ilmari Karonen
fonte
22
  • Aceitar : é o que o navegador é capaz de digerir, por exemplo, todos os idiomas que alguém pode entender.
  • Tipo de conteúdo : é o formato dos dados reais, por exemplo, em qual idioma alguém está falando. Como os computadores não podem (bem, agora eles podem) reconhecer outros tipos, como as pessoas podem dizer "oh, ele é alemão!" ou "ela está falando chinês!"
ionFish
fonte
11
Não necessariamente um navegador, mas qualquer cliente http.
Jim Aho
20

Aceitar é como

Aqui está o meu pedido e eu gostaria (para aceitar) este formato de resposta

O tipo de conteúdo é como

Aqui está a minha solicitação (ou resposta) e este (Tipo de Conteúdo) é o formato do conteúdo que estou enviando na minha solicitação (ou resposta)

JRomio
fonte
Sei que estou atrasado aqui, mas estou curioso, o que aconteceria se o formato de resposta não fosse enviado no formato "Aceito" pelo servidor?
Grito #
11
Cabe ao cliente decidir @shriek. Eu acho que a maioria dos clientes http (ou navegadores) "inteligentemente" examinará os dados reais e verá o que realmente é. Talvez um cliente também possa desconsiderar a resposta se for JSON, mas a análise falha porque parece ser outra coisa.
Jim Aho
5

É uma conversa de solicitação-resposta, para que o cliente

  • envia uma solicitação de "Tipo de conteúdo" e
  • espera receber a resposta do tipo de mídia "Aceitar".
Waldemar
fonte
Incorreta. Accept é um cabeçalho de solicitação. Veja a resposta aceita.
darron
2
@ Darron Não, esta resposta está correta. Ele não está dizendo que não é um cabeçalho de solicitação, está dizendo que seu objetivo é informar ao servidor que tipo de resposta ele espera receber de volta. Meio redundante com as outras respostas, mas acho que é a mais concisa. +1.
Todd Menier 29/09
0

Aceitar

O cabeçalho HTTP da solicitação de aceitação anuncia quais tipos de conteúdo, expressos como tipos MIME, o cliente pode entender. Usando a negociação de conteúdo, o servidor seleciona uma das propostas, a usa e informa o cliente de sua escolha com o cabeçalho de resposta Tipo de Conteúdo. Os navegadores definem valores adequados para esse cabeçalho, dependendo do contexto em que a solicitação é feita: ao buscar uma folha de estilo CSS, um valor diferente é definido para a solicitação do que na busca de uma imagem, vídeo ou script.

( fonte: developer.mozilla.org )

Tipo de conteúdo

O cabeçalho da entidade Content-Type é usado para indicar o tipo de mídia do recurso.

Em respostas, um cabeçalho de tipo de conteúdo informa ao cliente qual é o tipo de conteúdo retornado. Os navegadores farão o cheque MIME em alguns casos e não seguirão necessariamente o valor desse cabeçalho; para evitar esse comportamento, o cabeçalho X-Content-Type-Options pode ser definido como nosniff.

Em solicitações (como POST ou PUT), o cliente informa ao servidor que tipo de dados é realmente enviado.

( fonte: developer.mozilla.org )

Wlad
fonte