Diferencia entre los encabezados HTTP Accept y Content-Type

119

Entonces, el Acceptencabezado le dice al servidor el tipo MIME del recurso que está buscando el navegador. Por ejemplo, el servidor puede enviar texto sin formato, HTML, JSON, etc.

OK, eso tiene sentido, pero cuando miro el Content-Typeencabezado y parece estar haciendo lo mismo. Por ejemplo, le dice al servidor que quiere texto o JSON.

Entonces, ¿cuál es la diferencia entre Accepty los Content-Typeencabezados HTTP?

JohnMerlino
fuente

Respuestas:

155

Como observa correctamente, los clientes HTTP utilizan el encabezado Aceptar para decirle al servidor qué tipos de contenido aceptarán. El servidor luego enviará una respuesta, que incluirá un encabezado de tipo de contenido que le indica al cliente cuál es el tipo de contenido del contenido devuelto.

Sin embargo, como habrá notado, las solicitudes HTTP también pueden contener encabezados de tipo de contenido. ¿Por qué? Bueno, piense en las solicitudes POST o PUT . Con esos tipos de solicitud, el cliente está enviando un montón de datos al servidor como parte de la solicitud, y el encabezado Content-Type le dice al servidor cuáles son los datos en realidad (y, por lo tanto, determina cómo el servidor los analizará).

En particular, para una solicitud POST resultante de un envío de formulario HTML, el Tipo de contenido de la solicitud (normalmente) será uno de los tipos de contenido de formulario estándar a continuación, según lo especificado por el enctypeatributo en la <form>etiqueta:

  • application/x-www-form-urlencoded (predeterminado, más antiguo, más simple, un poco menos sobrecarga para pequeñas cantidades de texto ASCII simple, sin soporte de carga de archivos)
  • multipart/form-data (más nuevo, agrega soporte para la carga de archivos, más eficiente para grandes cantidades de datos binarios o texto no ASCII)
Ilmari Karonen
fuente
22
  • Aceptar : es lo que el navegador puede digerir, por ejemplo, todos los idiomas que alguien puede entender.
  • Tipo de contenido : es en qué formato están los datos reales, por ejemplo, en qué idioma está hablando alguien. Dado que las computadoras no pueden (bueno, ahora pueden) reconocer otros tipos como las personas pueden decir "¡oh, él es alemán!" o "ella habla chino!"
ionFish
fuente
1
No necesariamente un navegador, sino cualquier cliente http.
Jim Aho
20

Aceptar es como

Aquí está mi solicitud y me gustaría (Aceptar) este formato de respuesta

Content-Type es como

Aquí está mi solicitud (o respuesta) y este (Tipo de contenido) es el formato del contenido que envío en mi solicitud (o respuesta)

JRomio
fuente
Sé que llego tarde aquí, pero tengo curiosidad, ¿qué pasaría si el servidor no envía el formato de respuesta en el formato de "Aceptar"?
chillido
1
Eso dependería del cliente para decidir @shriek. Supongo que la mayoría de los clientes http (o navegadores) verán "inteligentemente" los datos reales y verán qué es realmente. Tal vez un cliente también podría ignorar la respuesta si se supone que es JSON, pero el análisis falla porque parece ser otra cosa.
Jim Aho
5

Es una conversación de solicitud-respuesta, por lo que el cliente

  • envía una solicitud de "Content-Type" y
  • espera recibir la respuesta del tipo de medio "Aceptar".
Waldemar
fuente
Incorrecto. Aceptar es un encabezado de solicitud. Ver la respuesta aceptada.
darron
2
@darron No, esta respuesta es correcta. No está diciendo que no es un encabezado de solicitud, está diciendo que su propósito es decirle al servidor qué tipo de respuesta espera recibir. Un poco redundante con las otras respuestas, pero creo que es la más concisa. +1.
Todd Menier
0

Aceptar

El encabezado HTTP Solicitud de aceptación anuncia qué tipos de contenido, expresados ​​como tipos MIME, puede entender el cliente. Mediante la negociación de contenido, el servidor selecciona una de las propuestas, la usa e informa al cliente de su elección con el encabezado de respuesta de tipo de contenido. Los navegadores establecen valores adecuados para este encabezado según el contexto en el que se realiza la solicitud: cuando se obtiene una hoja de estilo CSS, se establece un valor diferente para la solicitud que cuando se obtiene una imagen, video o secuencia de comandos.

( fuente: developer.mozilla.org )

Tipo de contenido

El encabezado de entidad Content-Type se usa para indicar el tipo de medio del recurso.

En las respuestas, un encabezado Content-Type le dice al cliente cuál es realmente el tipo de contenido del contenido devuelto. Los navegadores buscarán MIME en algunos casos y no necesariamente seguirán el valor de este encabezado; Para evitar este comportamiento, el encabezado X-Content-Type-Options se puede establecer en nosniff.

En las solicitudes (como POST o PUT), el cliente le dice al servidor qué tipo de datos se envían realmente.

( fuente: developer.mozilla.org )

Wlad
fuente