Jaka jest różnica między tekstem / xml a aplikacją / xml dla odpowiedzi usługi sieciowej

494

To jest bardziej ogólne pytanie o różnicę między text/xmli application/xml. Jestem całkiem nowy w pisaniu serwisów internetowych (REST - Jersey). Produkuję, application/xmlponieważ to właśnie pojawia się w większości samouczków / przykładów kodu, których używałem do nauki, ale niedawno się dowiedziałem text/xmli zastanawiałem się, co jest w nim innego i kiedy chcesz go użyć application/xml?

Mikrofon
źródło
Jak zauważono w odpowiedzi DaveV oraz w nagłówku na tools.ietf.org/html/rfc3023 , RFC 3023 (cytowany w odpowiedzi Odeda , obecnie akceptowany) jest przestarzały. Nowsza wersja RFC 7303 daje znacznie inną odpowiedź na to pytanie niż wcześniej RFC 3023. Myślę, że byłoby pomocne dla przyszłych czytelników, gdybyś zaakceptował odpowiedź DaveV, aby najbardziej aktualne informacje były na górze listy odpowiedzi.
Mark Amery
Na podstawie Dave V poniżej i Marián Černý wydaje się, że aplikacja / xml jest teraz preferowana, jeśli robisz coś nowego.
Sql Surfer
text/jest przeznaczony dla ludzi. application/jest przeznaczony na komputery
Ian Boyd

Odpowiedzi:

108

To stare pytanie, ale często odwiedzane i jasne zalecenia są teraz dostępne w RFC 7303, który przestaje być zgodny z RFC3023. W skrócie (sekcja 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
źródło
6
W cytowanym akapicie wspomniano o informacjach rejestracyjnych IANA, które (sprawdzając rozdział 9.1) dotyczą również kodowania, więc nie powinno być już żadnych różnic w obsłudze zestawu znaków między application/xmli text/xml. Ponadto uważam, że ta część streszczenie: „Ta specyfikacja ujednolica ... application / xml ... przy definiowaniu text / xml ... jak alias ...” oznacza, że application/xmli text/xmlsą równoważne i nie ma preferencji jedno o drugim.
Marián Černý
427

Z RFC ( 3023 ), w sekcji 3, Typy nośników XML:

Jeśli dokument XML - tzn. Nieprzetworzony, źródłowy dokument XML - jest czytelny dla zwykłych użytkowników, tekst / xml jest lepszy niż application / xml. Agenty użytkownika MIME (i internetowe przeglądarki użytkownika), które nie mają wyraźnego wsparcia dla text / xml, będą traktować go jako tekst / zwykły, na przykład wyświetlając jednostkę XML MIME jako zwykły tekst. Aplikacja / xml jest preferowana, gdy jednostka XML MIME jest nieczytelna dla zwykłych użytkowników.

(moje podkreślenie)

Oded
źródło
6
@drachenstern - Myślę, że bardziej nieopisowe elementy i atrybuty są bardziej prawdopodobne ( <a1 d="" g="">na przykład jako nieczytelne dla zwykłych użytkowników).
Oded
3
@Mike Oczywiście. Niektóre pliki XML są w zasadzie listą rekordów, na przykład: msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx Jest to bardziej prawdopodobne, że zostanie odczytane i przetworzone przez aplikację. Inne są w zasadzie tekstem ze znacznikami, jak strona HTML. Używanie dla nich text / xml brzmi bardziej stosownie.
biziclop
5
Podaj przykład nieczytelnego vs czytelnego. Używamy plików, które są w większości czytelne, ale mają węzły zakodowane w standardzie base64 itp.
Joe Phillips
5
@JoePhilllips - Proszę bardzo. base64 nie jest czytelny dla ludzi. Jeśli cały dokument może być odczytany i ma sens dla człowieka bez narzędzi lub przeglądania podręcznika (co xgsfoznacza ten znacznik?), To jest czytelny.
Oded
8
@CommaToast Serwer WWW może zwrócić sformatowany i wcięty kod XML, jeśli „text / xml” to Accept, podczas gdy application / xml może zwrócić wszystkie nieznaczne białe znaki usunięte. Na przykład w ASP.NET MVC można określić różne moduły obsługi dla różnych typów mimetali.
Novaterata,
33

Zgodnie z tym artykułem preferowana jest aplikacja / xml.


EDYTOWAĆ

Zrobiłem małą kontynuację tego artykułu.

Autor twierdzi, że kodowanie zadeklarowane w instrukcjach przetwarzania XML, takich jak:

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

można zignorować, gdy text/xmlużywany jest typ nośnika.

Wspierają tezę z definicją text/*specyfikacji rodziny typów MIME w RFC 2046 , a konkretnie następujący fragment:

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.

Według nich takich trudności można uniknąć, używając application/xmltypu MIME. Czy to prawda, czy nie, nie posunąłbym się tak daleko, aby tego uniknąć text/xml. IMHO, najlepiej postępować zgodnie z semantyką czytelności dla człowieka (nieczytelności) i zawsze pamiętać o określeniu zestawu znaków.

hardywang
źródło
1
+1 za link. Jakimi podstawowymi wnioskami doszedł do tego artykułu? Może „artykuł stwierdza, że ​​kodowanie plików jest ignorowane, co oznacza, że ​​nie można wysyłać utf-8 i danych binarnych do pliku z nagłówkiem text / xml”, czy to też jest weryfikowane?
Shanimal,
Zgadzam się z @Shanimal, odpowiedź powinna zawierać streszczenie artykułu, ponieważ link może nie trwać wiecznie. Jego zniknięcie uczyni odpowiedź prawie bezużyteczną. Czy ktoś może potwierdzić stwierdzenie o ignorowaniu instrukcji przetwarzania XML dotyczących kodowania?
toniedzwiedz
1
Według pierwotnego autora zostało to naprawione w późniejszych Update: 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.
wersjach
Jeśli załaduję plik XML za pomocą ajax, jest to „dokument” typu, application/xmlale jeśli użyję elementu formularza wejściowego, jest to „plik” typu, text/xmlktóry nie przetwarza poprawnie mojego kodu. Jak mogę przekonwertować go na inny format?
Adwokat diabła,
5

application/xmljest postrzegany svnjako typ binarny, podczas gdy text/xmljako plik tekstowy , dla którego można wyświetlić różnicę.

Michał Kawiecki
źródło