Qual é a diferença entre text / xml x application / xml para resposta do serviço da web

495

Essa é uma pergunta mais geral sobre a diferença entre text/xmle application/xml. Sou relativamente novo em escrever serviços da Web (REST - Jersey). Eu tenho produzido application/xmldesde que é o que aparece na maioria dos tutoriais / exemplos de código que eu tenho usado para aprender, mas descobri recentemente e fiquei text/xmlimaginando o que há de diferente nele e quando você o utilizaria application/xml.

Mike
fonte
Como observado na resposta de DaveV, e no cabeçalho em tools.ietf.org/html/rfc3023 , a RFC 3023 (citada pela resposta de Oded, atualmente aceita) é obsoleta. O RFC 7303 mais recente, na verdade, fornece uma resposta significativamente diferente a essa pergunta do que o RFC 3023 costumava fazer. Acho que, portanto, seria útil para futuros leitores se você aceitasse a resposta de DaveV, para que as informações mais atualizadas sejam mantidas no topo da lista de respostas.
Mark Amery
Com base em Dave V abaixo e Marián Černý, parece que o aplicativo / xml é preferido agora se você estiver fazendo algo novo.
Sql Surfer
text/é destinado a humanos. application/é destinado a computadores
Ian Boyd

Respostas:

108

Essa é uma pergunta antiga, mas que é frequentemente visitada e recomendações claras estão agora disponíveis no RFC 7303, que obsoleta o RFC3023. Em poucas palavras (seção 9.2):

The registration information for text/xml is in all respects the same
as that given for application/xml above (Section 9.1), except that
the "Type name" is "text".
DaveV
fonte
6
O parágrafo citado menciona informações de registro da IANA, que (verificando a Seção 9.1) também tratam da codificação, portanto, não deve haver mais diferenças no manuseio do conjunto de caracteres entre application/xmle text/xml. Além disso, considero essa parte do resumo: "Esta especificação padroniza ... application / xml ... ao definir text / xml ... como apelido ..." para significar que application/xmle text/xmlsão equivalentes e não há preferência de um sobre o outro.
Marián Černý
427

No RFC ( 3023 ), na seção 3, Tipos de mídia XML:

Se um documento XML - ou seja, o documento XML de origem não processado - for legível por usuários casuais, text / xml é preferível a application / xml. Os agentes de usuário MIME (e agentes de usuário da web) que não possuem suporte explícito para text / xml tratam-no como texto / sem formatação, por exemplo, exibindo a entidade XML MIME como texto sem formatação. Application / xml é preferível quando a entidade XML MIME é ilegível por usuários casuais.

(ênfase minha)

Oded
fonte
6
@drachenstern - acho que elementos e atributos não descritivos são mais prováveis ​​( <a1 d="" g="">por exemplo, ilegíveis por usuários casuais ).
Oded
3
@ Mike Claro. Alguns arquivos XML são basicamente uma lista de registros, como este: msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx É mais provável que seja lido e processado por um aplicativo. Outros são basicamente textos com marcação, como uma página HTML. Usar text / xml para eles parece mais apropriado.
precisa saber é
5
Por favor, dê um exemplo de ilegível vs legível. Usamos arquivos que são na sua maioria legível, mas têm base64 nós codificados, etc ..
Joe Phillips
5
@JoePhilllips - Lá vai você. base64 não é legível por humanos. Se o documento inteiro puder ser lido e fazer sentido para um ser humano sem ferramentas ou olhar para um manual (o que essa xgsftag significa?), Ele estará legível.
Oded
8
@CommaToast Um servidor da Web pode retornar XML formatado e recuado se "text / xml" for o Accept, enquanto application / xml pode retornar todo o espaço em branco insignificante removido. No ASP.NET MVC, por exemplo, você pode especificar diferentes manipuladores para diferentes tipos de mimet.
Novaterata
33

De acordo com este artigo, application / xml é o preferido.


EDITAR

Eu fiz um pequeno acompanhamento no artigo.

O autor afirma que a codificação declarada nas instruções de processamento XML, como:

<?xml version="1.0" encoding="UTF-8"?>

pode ser ignorado quando text/xmlo tipo de mídia é usado.

Eles apóiam a tese com a definição da text/*especificação da família de tipo MIME na RFC 2046 , especificamente o seguinte fragmento:

4.1.2.  Charset Parameter

   A critical parameter that may be specified in the Content-Type field
   for "text/plain" data is the character set.  This is specified with a
   "charset" parameter, as in:

     Content-type: text/plain; charset=iso-8859-1

   Unlike some other parameter values, the values of the charset
   parameter are NOT case sensitive.  The default character set, which
   must be assumed in the absence of a charset parameter, is US-ASCII.

   The specification for any future subtypes of "text" must specify
   whether or not they will also utilize a "charset" parameter, and may
   possibly restrict its values as well.  For other subtypes of "text"
   than "text/plain", the semantics of the "charset" parameter should be
   defined to be identical to those specified here for "text/plain",
   i.e., the body consists entirely of characters in the given charset.
   In particular, definers of future "text" subtypes should pay close
   attention to the implications of multioctet character sets for their
   subtype definitions.

Segundo eles, essas dificuldades podem ser evitadas ao usar o application/xmltipo MIME. Seja verdade ou não, eu não iria tão longe quanto evitar text/xml. IMHO, é melhor seguir a semântica da legibilidade humana (não legibilidade) e sempre lembrar de especificar o conjunto de caracteres.

hardywang
fonte
1
+1 para o link. Em suas próprias palavras, qual é a conclusão básica alcançada no artigo? Talvez "o artigo declare que a codificação de arquivo é ignorada, o que significa que você não pode enviar utf-8 e dados binários em um arquivo com um cabeçalho de texto / xml" também é verificado?
Shanimal
Concordo com @ Shanimal, a resposta deve incluir a essência do artigo, pois o link pode não durar para sempre. Seu desaparecimento tornará a resposta praticamente inútil. Alguém poderia confirmar a declaração sobre como ignorar as instruções de processamento XML relativas à codificação?
toniedzwiedz
1
Segundo o autor original, isso foi corrigido em versões posteriores das especificaçõesUpdate: The situation has changed in the new HTTP/1.1 RFC: The default charset of ISO-8859-1 for text media types has been removed; the default is now whatever the media type definition says.
TheNorthWes
Se eu carregar um arquivo XML com ajax, é um "documento" do tipo, application/xmlmas se eu usar um elemento de formulário de entrada, é um "arquivo" do tipo text/xmlque não processa corretamente com o meu código. Como posso convertê-lo para outro formato?
Advogado do diabo
5

application/xmlé visto svncomo um tipo binário, enquanto text/xmlcomo um arquivo de texto para o qual um diff pode ser exibido.

Michał Kawiecki
fonte