it-swarm.dev

Quale valore del tipo di contenuto dovrei inviare per la mia sitemap XML?

Pensavo di dover inviare "text/xml", ma poi ho letto che avrei dovuto inviare "application/xml". Importa? Qualcuno può spiegare la differenza?

119
Kyle

La differenza tra text/xml e application/xml è la codifica dei caratteri di default se il parametro charset è omesso:

Testo/xml e applicazione/xml si comportano diversamente quando il set di caratteri parametro non è specificato esplicitamente. Se il set di caratteri predefinito (es., US-ASCII) per testo/xml è scomodo per qualche motivo (ad esempio server web Non validi), application/xml fornisce un'alternativa (vedere "Parametri facoltativi .__" di registrazione application/xml nella Sezione 3.2).

Per text/xml :

Conforme a [RFC2046], se un'entità text/xml è ricevuta con il parametro charset omesso, processori MIME e processori XML DEVE usare il valore del set di caratteri predefinito di "us-ascii" [ASCII]. In casi dove l'entità XML MIME è trasmessa via HTTP, il default il valore del set di caratteri è ancora "us-ascii".

Per application/xml :

Se viene ricevuta un'entità application/xml dove il set di caratteri parametro omesso, nessuna informazione viene fornita su set di caratteri dall'intestazione Content-Type MIME. XML conforme i processori DEVONO seguire i requisiti nella sezione 4.3.3 di [XML] che affronta direttamente questa contingenza. Tuttavia, processori MIME che non sono processori XML NON DEVE assumere un set di caratteri predefinito se il parametro charset è omesso da un'entità application/xml.

Quindi, se il parametro charset è omesso, la codifica dei caratteri di text/xml è US-ASCII mentre con application/xml la codifica dei caratteri può essere specificata nel documento stesso.

Ora una regola empirica su Internet è: "Sii severo con l'output, ma sii tollerante con l'input." Ciò significa che assicurati di soddisfare gli standard il più possibile quando fornisci dati su Internet. Ma incorporare alcuni meccanismi per trascurare i guasti o per indovinare quando si ricevono e interpretano i dati su Internet.

Quindi nel tuo caso scegli solo uno dei due tipi (consiglio application/xml) e assicurati di specificare correttamente la codifica dei caratteri usati (ti consiglio di usare la rispettiva codifica dei caratteri predefinita per giocare in sicurezza, quindi in caso di application/xml usa UTF-8 o UTF-16).

150
Gumbo

Come regola generale, la scommessa più sicura per il corretto trattamento del documento da parte di tutti i server Web, i proxy e i browser client è probabilmente la seguente:

  1. Usa il tipo di contenuto applicazione/xml
  2. Includere una codifica di caratteri nel tipo di contenuto, probabilmente UTF-8
  3. Includere una codifica di caratteri corrispondenti nell'attributo di codifica del documento XML stesso.

In termini di RFC 3023 spec, che alcuni browser non riescono a implementare correttamente, la principale differenza nei tipi di contenuto riguarda il modo in cui i client devono trattare la codifica dei caratteri, come segue:

Per application/xml, application/xml-dtd, application/xml-external-parsed-entity, o uno qualsiasi dei sottotipi di application/xml come application/atom + xml, application/rss + xml o application/rdf + xml , la codifica dei caratteri è determinata in questo ordine:

  1. la codifica fornita nel parametro charset dell'intestazione HTTP Content-Type
  2. la codifica fornita nell'attributo di codifica della dichiarazione XML all'interno del documento,
  3. utf-8.

Per testo/xml, testo/xml-external-parsed-entity o sottotipo come text/foo + xml, l'attributo di codifica della dichiarazione XML all'interno del documento viene ignorato e la codifica dei caratteri è:

  1. la codifica fornita nel parametro charset dell'intestazione HTTP Content-Type, o
  2. uS-ASCII.

La maggior parte dei parser non implementa le specifiche; ignorano il tipo di contesto HTTP e usano semplicemente la codifica nel documento. Con così tanti documenti mal formati là fuori, è improbabile che cambi presto.

24
nas

entrambi stanno bene.

text/xxx significa che nel caso in cui il programma non capisca xxx ha senso mostrare il file all'utente come testo normale. application/xxx significa che non ha senso mostrarlo.

Si noti che questi tipi di contenuto erano originariamente definiti per l'allegato di posta elettronica prima che venissero utilizzati in un secondo momento nel mondo Web.

9

text/xml è per documenti che sarebbero significativi per un essere umano se presentato come testo senza ulteriore elaborazione, application/xml è per tutto il resto

Ogni entità XML è adatta per l'uso con i media application/xml digita senza modifiche. Ma questo non sfrutta il fatto che XML può essere trattato come testo normale in molti casi. Agenti utente MIME (e gli agenti utente web) che non hanno il supporto esplicito per application/xml lo tratterà come application/octet-stream, per esempio, offrendo di salvarlo in un file.

Per indicare che un'entità XML deve essere trattata come testo semplice da predefinito, utilizzare il tipo di supporto text/xml. Ciò limita la codifica utilizzato nell'entità XML con quelli compatibili con requisiti per i tipi di supporto di testo come descritto in [RFC-2045] e [RFC-2046], ad esempio UTF-8, ma non UTF-16 (tranne HTTP).

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

6
Quentin

Altre risposte qui affrontano la domanda generale su quale sia il Content-Type corretto per una risposta XML e concludono (come con Qual è la differenza tra testo/xml vs application/xml per la risposta del webservice ) che sia text/xml che application/xml sono consentiti. Tuttavia, nessuno indica se esistono regole specifiche per sitemaps.

Risposta: non ci sono. La specifica della sitemap è https://www.sitemaps.org , e usando le ricerche di Google site: puoi confermare che non contiene le parole o le frasi mime, mimetype, content -tipo, application/xml o text/xml ovunque. In altre parole, è completamente silenzioso sull'argomento di ciò che Content-Type dovrebbe essere usato per servire le sitemap.

In assenza di commenti nelle specifiche della sitemap che riguardano direttamente questa domanda, possiamo tranquillamente presumere che si applichino le stesse regole di quando si sceglie il Content-Type di qualsiasi altro documento XML, vale a dire che può essere text/xml o application/xml.

0
Mark Amery