¿Cuáles son todos los valores posibles para el encabezado HTTP "Content-Type"?

270

Tengo que validar el Content-Typevalor del encabezado antes de pasarlo a una solicitud HTTP.

¿Existe una lista específica para todos los valores posibles de Content-Type?

De lo contrario, ¿hay alguna forma de validar el tipo de contenido antes de usarlo en una solicitud HTTP?

Increíble
fuente
9
Se supone que los tipos de medios válidos deben estar registrados en la IANA; puede ver una lista actual aquí: iana.org/assignments/media-types/media-types.xhtml, pero tenga en cuenta que esta lista puede actualizarse con el tiempo. No hay una lista permitida fija.
Joe
@Joe: "Se supone que los tipos de medios válidos deben estar registrados en la IANA" - espere, esto significa que los tipos de medios personalizados (solo para usar en una API web específica de la aplicación que solo va a ser llamada por una aplicación cliente personalizada) no permitido en absoluto?
O Mapper el
1
@ORMapper lo leería más como "hay una lista oficial, pero no me sorprendería ver a muchos otros en la naturaleza". En términos de la pregunta del OP, si fuera a intentar validar "todos los tipos", al menos desearía validar todos los tipos registrados. Qué hacer con los adicionales es más abierto. Hasta donde yo sé, no hay ningún requisito para registrar tipos personalizados.
Joe
Acepte la respuesta que más le ayudó a resolver su problema. Ayuda a futuros lectores. Si las respuestas no fueron útiles, deje comentarios debajo de ellas. Entonces el póster puede actualizarlos en consecuencia. Leer ¿Qué debo hacer cuando alguien responde mi pregunta? para saber mas.
Roshana Pitigala

Respuestas:

256

Puede encontrar todos los tipos de contenido aquí: http://www.iana.org/assignments/media-types/media-types.xhtml

Los tipos más comunes son:

  1. Tipo de aplicación

    application/java-archive
    application/EDI-X12   
    application/EDIFACT   
    application/javascript   
    application/octet-stream   
    application/ogg   
    application/pdf  
    application/xhtml+xml   
    application/x-shockwave-flash    
    application/json  
    application/ld+json  
    application/xml   
    application/zip  
    application/x-www-form-urlencoded  
    
  2. Escribe audio

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Escribe imagen

    image/gif   
    image/jpeg   
    image/png   
    image/tiff    
    image/vnd.microsoft.icon    
    image/x-icon   
    image/vnd.djvu   
    image/svg+xml    
    
  4. Tipo multiparte

    multipart/mixed    
    multipart/alternative   
    multipart/related (using by MHTML (HTML mail).)  
    multipart/form-data  
    
  5. Teclee el texto

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Escribe video

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Escriba vnd:

    application/vnd.android.package-archive
    application/vnd.oasis.opendocument.text    
    application/vnd.oasis.opendocument.spreadsheet  
    application/vnd.oasis.opendocument.presentation   
    application/vnd.oasis.opendocument.graphics   
    application/vnd.ms-excel    
    application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   
    application/vnd.ms-powerpoint    
    application/vnd.openxmlformats-officedocument.presentationml.presentation    
    application/msword   
    application/vnd.openxmlformats-officedocument.wordprocessingml.document   
    application/vnd.mozilla.xul+xml   
    
lebarillier
fuente
51

Como se define en RFC 1341 :

En la notación BNF extendida de RFC 822, un valor de campo de encabezado de tipo de contenido se define de la siguiente manera:

Tipo de contenido: = tipo "/" subtipo * [";" parámetro]

tipo: = "aplicación" / "audio" / "imagen" / "mensaje" / "multiparte" / "texto" / "video" / x-token

x-token: = <Los dos caracteres "X-" seguidos, sin espacios en blanco, por ningún token>

subtipo: = token

parámetro: = atributo "=" valor

atributo: = token

valor: = token / cadena citada

ficha: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Debe estar en / "," / ";" / ":" / "\" / <">; cadena entre comillas, /" / "/" ["/"] "/"? "/". "; para usar dentro de /" = "; valores de parámetros

Y una lista de tipos MIME conocidos que pueden seguirlo (o, como señala Joe, la fuente de la IANA ).

Como puede ver, la lista es demasiado grande para que pueda validarla con todos ellos. Lo que puede hacer es validar contra el formato general y el typeatributo para asegurarse de que sea correcto (el conjunto de opciones es pequeño) y simplemente asumir que lo que sigue es correcto (y, por supuesto, detectar cualquier excepción que pueda encontrar al colocarlo) para uso real).

También tenga en cuenta el comentario anterior:

Si se va a utilizar otro tipo primario por algún motivo, se le debe dar un nombre que comience con "X-" para indicar su estado no estándar y evitar cualquier conflicto potencial con un nombre oficial futuro.

Notará que muchas solicitudes / respuestas HTTP incluyen un X-encabezado de algún tipo que se define por sí mismo, tenga esto en cuenta al validar los tipos.

Jeroen Vannevel
fuente
RFC 1341 no es relevante para HTTP.
Julian Reschke
2
RFC 1341 describe encabezados de tipo de contenido que se utilizan en HTTP. ¿Cómo exactamente dirías que no están relacionados?
Jeroen Vannevel
2
Ha sido obsoleto y reemplazado por documentos más nuevos varias veces. Lo relevante es lo que < greenbytes.de/tech/webdav/… > (más los documentos referenciados) tienen que decir.
Julian Reschke
3

Mi objetivo sería cubrir un subconjunto de posibles valores de "tipo de contenido", su pregunta parece centrarse en identificar tipos de contenido conocidos.

@Jeroen RFC 1341 de referencia es grande, pero para una lista bastante exhaustiva IANA mantiene una página web de tipos de medios registrados oficialmente aquí .

Pete Hornsby
fuente
Esos no son tipos de medios "conocidos" (es decir, muestras de lo que se ha observado "en la naturaleza") sino tipos de medios que pasaron por los procedimientos de registro de la IANA. Por lo tanto, están oficialmente registrados.
Me pareció
0

Si está utilizando jaxrs o cualquier otro, habrá una clase llamada mediatype. Interceptor del usuario antes de enviar la solicitud y compárela con esta.

geddamsatish
fuente