it-swarm.dev

Qual valor de tipo de conteúdo devo enviar para meu sitemap XML?

Eu pensei que deveria enviar "text/xml", mas depois li que deveria enviar "application/xml". Isso importa? Alguém pode explicar a diferença?

119
Kyle

A diferença entre text/xml e application/xml é a codificação de caracteres padrão se o parâmetro charset for omitido:

Text/xml e application/xml se comportam de maneira diferente quando o parâmetro charset Não é especificado explicitamente. Se o conjunto de caracteres padrão (por exemplo, US-ASCII) for text/xml for inconveniente por algum motivo (por exemplo, servidores web ruins ), Application/xml fornecerá uma alternativa (consulte "Opcional parâmetros "do registro application/xml na Seção 3.2).

Para text/xml :

Em conformidade com [RFC2046], se uma entidade text/xml for recebida com O parâmetro charset omitido, os processadores MIME e os processadores XML DEVEM usar o valor charset padrão de "us-ascii" [ASCII] . Nos casos Onde a entidade XML MIME é transmitida via HTTP, o valor padrão de charset Ainda é "us-ascii".

Para application/xml :

Se uma entidade application/xml for recebida onde o parâmetro charset For omitido, nenhuma informação será fornecida sobre o conjunto de caracteres Pelo cabeçalho MIME Content-Type. Processadores XML Em conformidade DEVEM seguir os requisitos da seção 4.3.3 de [XML] Que abordam diretamente essa contingência. No entanto, os processadores MIME Que não são processadores XML NÃO DEVEM assumir um conjunto de caracteres padrão se O parâmetro charset for omitido de uma entidade application/xml.

Portanto, se o parâmetro charset for omitido, a codificação de caracteres de text/xml será US-ASCII, enquanto com application/xml a codificação de caracteres poderá ser especificada no próprio documento.

Agora, uma regra geral na internet é: "Seja rigoroso com a saída, mas seja tolerante com a entrada". Isso significa que você deve atender os padrões o máximo possível ao fornecer dados pela Internet. Mas construa alguns mecanismos para ignorar falhas ou adivinhar quando receber e interpretar dados pela Internet.

Então, no seu caso, basta escolher um dos dois tipos (eu recomendo application/xml) e certifique-se de especificar a codificação de caracteres usada corretamente (eu recomendo usar a respectiva codificação de caracteres padrão para reproduzir, então em caso de application/xml usa UTF-8 ou UTF-16).

150
Gumbo

Como regra geral, a aposta mais segura para que seu documento seja tratado adequadamente por todos os servidores da Web, proxies e navegadores clientes é provavelmente o seguinte:

  1. Use o tipo de conteúdo application/xml
  2. Inclua uma codificação de caracteres no tipo de conteúdo, provavelmente UTF-8
  3. Inclua uma codificação de caractere correspondente no atributo de codificação do próprio documento XML.

Em termos do RFC 3023 spec, que alguns navegadores não implementam corretamente, a principal diferença nos tipos de conteúdo está em como os clientes devem tratar a codificação de caracteres, da seguinte maneira:

Para application/xml, application/xml-dtd, application/xml-external-parsed-entity, ou qualquer um dos subtipos de application/xml como application/atom + xml, application/rss + xml ou application/rdf + xml , a codificação de caracteres é determinada nesta ordem:

  1. a codificação fornecida no parâmetro charset do cabeçalho HTTP Content-Type
  2. a codificação dada no atributo de codificação da declaração XML dentro do documento,
  3. utf-8.

Para text/xml, text/xml-external-parsed-entity ou um subtipo como text/foo + xml, o atributo de codificação da declaração XML dentro do documento é ignorado e a codificação de caracteres é:

  1. a codificação fornecida no parâmetro charset do cabeçalho HTTP Content-Type ou
  2. us-ascii.

A maioria dos analisadores não implementa a especificação; eles ignoram o tipo de contexto HTTP e usam apenas a codificação no documento. Com tantos documentos mal formados por aí, é improvável que isso mude em breve.

24
nas

ambos estão bem.

text/xxx significa que, caso o programa não entenda xxx, faz sentido mostrar o arquivo para o usuário como texto simples. application/xxx significa que é inútil mostrá-lo.

Observe que esses tipos de conteúdo foram originalmente definidos para anexos de E-Mail antes de serem usados ​​posteriormente no mundo da Web.

9
Hendrik Brummermann

text/xml é para documentos que seriam significativos para um humano se apresentados como texto sem processamento adicional, application/xml é para todo o resto

Cada entidade XML é adequada para uso com o tipo application/xml media Sem modificação. Mas isso não explora o fato de que XML pode ser tratado como texto simples em muitos casos. Agentes do usuário MIME (E agentes de usuário da web) que não têm suporte explícito para Application/xml o tratarão como application/octet-stream, por Exemplo, oferecendo salve-o em um arquivo.

Para indicar que uma entidade XML deve ser tratada como texto simples pelo padrão , Use o tipo de mídia text/xml. Isso restringe a codificação Usada na entidade XML àqueles que são compatíveis com os requisitos Para tipos de mídia de texto, conforme descrito em [RFC-2045] e [RFC-2046] , por exemplo, UTF-8, mas não UTF-16 (exceto para HTTP).

- http://www.ietf.org/rfc/rfc2376.txt

6
Quentin

Outras respostas aqui abordam a questão geral de qual é o Content-Type adequado para uma resposta XML e concluem (como com Qual é a diferença entre text/xml vs application/xml para resposta de webservice ) que tanto text/xml quanto application/xml são permissíveis. No entanto, nenhum aborda se existem regras específicas para sitemaps.

Resposta: não há. A especificação do sitemap é https://www.sitemaps.org , e usando as pesquisas do Google site: você pode confirmar que não contém as palavras ou frases mime, mimetype, content -type, application/xml ou text/xml em qualquer lugar. Em outras palavras, é totalmente omisso sobre o que Content-Type deve ser usado para exibir sitemaps.

Na ausência de qualquer comentário na especificação do sitemap abordando diretamente esta questão, podemos seguramente assumir que as mesmas regras se aplicam quando ao escolher o Content-Type de qualquer outro documento XML - ou seja, que pode ser text/xml ou application/xml.

0
Mark Amery