Quais são todos os valores possíveis para o cabeçalho HTTP "Content-Type"?

270

Eu tenho que validar o Content-Typevalor do cabeçalho antes de passá-lo para uma solicitação HTTP.

Existe uma lista específica para todos os valores possíveis de Content-Type?

Caso contrário, existe uma maneira de validar o tipo de conteúdo antes de usá-lo em uma solicitação HTTP?

Impressionante
fonte
9
Os tipos de mídia válidos devem estar registrados na IANA - você pode ver uma lista atual aqui: iana.org/assignments/media-types/media-types.xhtml, mas observe que essa lista pode ser atualizada com o tempo. Não há uma lista permitida fixa.
21414 Joe
@ Joe: "Tipos de mídia válidos devem ser registrados na IANA" - espere, isso significa que tipos de mídia personalizados (apenas para uso em uma API da Web específica de aplicativo que será chamada apenas por um aplicativo cliente personalizado) são não é permitido?
OR Mapper
1
@ORMapper eu lia mais como "existe uma lista oficial, mas não ficaria surpreso ao ver muitas outras na natureza". Em termos da pergunta do OP, se você tentaria validar "todos os tipos", pelo menos desejaria validar todos os tipos registrados. O que fazer com os adicionais é mais aberto. Tanto quanto sei, não há necessidade de registrar tipos personalizados.
5118 Joe
Aceite a resposta que mais o ajudou a resolver seu problema. Ajuda futuros leitores. Se as respostas não foram úteis, deixe um comentário abaixo delas. Portanto, o pôster pode atualizá-los de acordo. Leia O que devo fazer quando alguém responder à minha pergunta? Para saber mais.
Roshana Pitigala 04/04/19

Respostas:

255

Você pode encontrar todos os tipos de conteúdo aqui: http://www.iana.org/assignments/media-types/media-types.xhtml

O tipo mais comum é:

  1. Digite aplicativo

    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. Digite áudio

    audio/mpeg   
    audio/x-ms-wma   
    audio/vnd.rn-realaudio   
    audio/x-wav   
    
  3. Digitar imagem

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

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

    text/css    
    text/csv    
    text/html    
    text/javascript (obsolete)    
    text/plain    
    text/xml    
    
  6. Digite vídeo

    video/mpeg    
    video/mp4    
    video/quicktime    
    video/x-ms-wmv    
    video/x-msvideo    
    video/x-flv   
    video/webm   
    
  7. Digite 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
fonte
51

Conforme definido na RFC 1341 :

Na notação BNF estendida do RFC 822, um valor do campo de cabeçalho Content-Type é definido da seguinte maneira:

Tipo de conteúdo: = tipo "/" subtipo * [";" parâmetro]

tipo: = "aplicativo" / "áudio" / "imagem" / "mensagem" / "multipart" / "texto" / "vídeo" / x-token

x-token: = <Os dois caracteres "X-" seguiram, sem espaço em branco, por nenhum token>

subtipo: = token

parâmetro: = atributo "=" valor

attribute: = token

valor: = token / string entre aspas

token: = 1 *

tspecials: = "(" / ")" / "<" / ">" / "@"; Deve estar em / "," / ";" / ":" / "\" / <">; cadeia de caracteres entre aspas, /" / "/" ["/"] "/"? "/". "; para usar dentro de /" = "; valores dos parâmetros

E uma lista de tipos MIME conhecidos que podem segui-lo (ou, como Joe comenta, a fonte da IANA ).

Como você pode ver, a lista é muito grande para você validar com todos eles. O que você pode fazer é validar com relação ao formato geral e aotype atributo para garantir que esteja correto (o conjunto de opções é pequeno) e apenas assumir que o que se segue está correto (e, é claro, capturar quaisquer exceções que você possa encontrar ao colocá-lo uso real).

Observe também o comentário acima:

Se outro tipo principal for utilizado por qualquer motivo, deve ser atribuído um nome que comece com "X-" para indicar seu status fora do padrão e evitar qualquer conflito potencial com um futuro nome oficial.

Você notará que muitas solicitações / respostas HTTP incluem um X-cabeçalho de algum tipo que é auto-definido. Lembre-se disso ao validar os tipos.

Jeroen Vannevel
fonte
O RFC 1341 não é relevante para o HTTP.
Julian Reschke
2
O RFC 1341 descreve os cabeçalhos de tipo de conteúdo usados ​​no HTTP. Como exatamente você diria que eles não têm relação?
Jeroen Vannevel
2
Foi obsoleto e substituído por documentos mais recentes várias vezes. O que é relevante é o que < greenbytes.de/tech/webdav/… > (mais os documentos referenciados) têm a dizer.
Julian Reschke
3

Eu pretendia cobrir um subconjunto de possíveis valores "Tipo de conteúdo", sua pergunta parece se concentrar na identificação de tipos de conteúdo conhecidos.

@Jeroen RFC 1341 de referência é grande, mas para uma lista bastante exaustiva IANA mantém uma página web de tipos de mídia oficialmente registadas aqui .

Pete Hornsby
fonte
Esses não são tipos de mídia "conhecidos" (ou seja, amostras do que foi observado "em estado selvagem"), mas tipos de mídia que passaram pelos procedimentos de registro da IANA. Portanto, eles são registrados oficialmente. Achou importante apontar isso :)
DaSourcerer
0

Se você estiver usando jaxrs ou qualquer outro, haverá uma classe chamada mediatype.User interceptor antes de enviar a solicitação e compará-la com isso.

geddamsatish
fonte