Apa perbedaan antara teks / xml vs aplikasi / xml untuk respons layanan web

495

Ini lebih merupakan pertanyaan umum tentang perbedaan antara text/xmldan application/xml. Saya cukup baru untuk menulis layanan web (REST - Jersey). Saya telah memproduksi application/xmlkarena ini adalah apa yang muncul di sebagian besar tutorial / contoh kode yang telah saya gunakan untuk belajar, tetapi saya baru-baru ini tahu tentang text/xmldan bertanya-tanya apa yang berbeda tentang itu dan kapan Anda akan menggunakannya application/xml?

Mike
sumber
Seperti disebutkan dalam jawaban DaveV, dan di header di tools.ietf.org/html/rfc3023 , RFC 3023 (dikutip dari jawaban Oded, saat ini diterima) sudah usang. RFC 7303 yang lebih baru sebenarnya memberikan jawaban yang sangat berbeda untuk pertanyaan ini daripada RFC 3023. Saya pikir karena itu akan sangat membantu bagi pembaca di masa depan jika Anda menerima jawaban DaveV, sehingga informasi yang paling baru disimpan di bagian atas daftar jawaban.
Mark Amery
Berdasarkan Dave V di bawah ini dan Marián Černý tampaknya aplikasi / xml lebih disukai sekarang jika Anda melakukan sesuatu yang baru.
Sql Surfer
text/dimaksudkan untuk manusia. application/dimaksudkan untuk komputer
Ian Boyd

Jawaban:

108

Ini adalah pertanyaan lama, tetapi yang sering dikunjungi dan rekomendasi yang jelas sekarang tersedia dari RFC 7303 yang usang RFC3023. Singkatnya (bagian 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
sumber
6
Paragraf yang dikutip menyebutkan informasi registrasi IANA, yang (dengan memeriksa Bagian 9.1) juga berkaitan dengan penyandian, sehingga seharusnya tidak ada lagi perbedaan dalam penanganan set karakter antara application/xmldan text/xml. Selain itu, saya menganggap ini bagian dari abstrak: "Spesifikasi ini menstandarkan ... aplikasi / xml ... saat mendefinisikan teks / xml ... sebagai alias ..." berarti application/xmldan text/xmlsetara dan tidak ada preferensi dari satu tentang yang lain.
Marián Černý
427

Dari RFC ( 3023 ), di bawah bagian 3, Jenis Media XML:

Jika dokumen XML - yaitu, dokumen XML sumber yang tidak diproses - dapat dibaca oleh pengguna biasa, teks / xml lebih disukai daripada aplikasi / xml. Agen pengguna MIME (dan agen pengguna web) yang tidak memiliki dukungan eksplisit untuk teks / xml akan memperlakukannya sebagai teks / polos, misalnya, dengan menampilkan entitas MIME XML sebagai teks biasa. Aplikasi / xml lebih disukai ketika entitas XML MIME tidak dapat dibaca oleh pengguna biasa.

(penekanan milikku)

Oded
sumber
6
@drachenstern - Saya pikir elemen dan atribut non deskriptif lebih mungkin ( <a1 d="" g="">, misalnya tidak dapat dibaca oleh pengguna biasa ).
Oded
3
@ Mike Tentu saja. Beberapa file XML pada dasarnya adalah daftar catatan, seperti ini: msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspx Ini lebih mungkin untuk dibaca dan diproses oleh aplikasi. Lainnya pada dasarnya adalah teks dengan markup, seperti halaman HTML. Menggunakan teks / xml untuk mereka terdengar lebih tepat.
biziclop
5
Tolong beri contoh yang tidak dapat dibaca vs yang dapat dibaca. Kami menggunakan file yang sebagian besar dapat dibaca tetapi memiliki node yang disandikan base64, dll.
Joe Phillips
5
@ JoPhilllips - Ini dia. base64 tidak dapat dibaca oleh manusia. Jika seluruh dokumen dapat dibaca dan masuk akal bagi manusia tanpa alat atau melihat manual (apa xgsfartinya tag itu?), Maka itu dapat dibaca.
Oded
8
@CommaToast Server web mungkin mengembalikan XML yang diformat dan indentasi jika "text / xml" adalah Accept, sedangkan aplikasi / xml mungkin mengembalikan semua spasi tidak signifikan yang dihapus. Dalam ASP.NET MVC misalnya, Anda dapat menentukan penangan yang berbeda untuk mimetipe yang berbeda.
Novaterata
33

Menurut artikel ini aplikasi / xml lebih disukai.


EDIT

Saya melakukan sedikit tindak lanjut pada artikel tersebut.

Penulis mengklaim bahwa pengkodean dideklarasikan dalam instruksi pemrosesan XML, seperti:

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

dapat diabaikan ketika text/xmljenis media digunakan.

Mereka mendukung tesis dengan definisi text/*spesifikasi keluarga tipe MIME dalam RFC 2046 , khususnya fragmen berikut:

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.

Menurut mereka, kesulitan tersebut dapat dihindari ketika menggunakan application/xmltipe MIME. Apakah itu benar atau tidak, saya tidak akan menghindar text/xml. IMHO, yang terbaik hanya mengikuti semantik keterbacaan manusia (non-readability) dan selalu ingat untuk menentukan charset.

hardywang
sumber
1
+1 untuk tautan. Dengan kata-kata Anda sendiri, apa kesimpulan dasar yang dicapai dalam artikel? Mungkin "artikel tersebut menyatakan bahwa pengkodean file diabaikan, yang berarti Anda tidak dapat mengirim data utf-8 dan biner dalam file dengan header teks / xml" juga apakah ini diverifikasi?
Shanimal
Saya setuju dengan @Simalimal, jawabannya harus menyertakan inti artikel karena tautannya mungkin tidak bertahan selamanya. Hilangnya itu akan membuat jawaban itu tidak berguna. Adakah yang bisa mengkonfirmasi pernyataan tentang mengabaikan instruksi pemrosesan XML tentang pengkodean?
toniedzwiedz
1
Menurut penulis asli, ini telah diperbaiki dalam spesifikasi nantiUpdate: 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
Jika saya memuat file XML dengan ajax itu adalah "dokumen" jenis application/xmltetapi jika saya menggunakan elemen formulir input itu adalah "file" jenis text/xmlyang tidak diproses dengan baik dengan kode saya. Bagaimana saya bisa mengubahnya ke format lain?
Pengacara Setan
5

application/xmldilihat svnsebagai jenis biner sedangkan text/xmlsebagai file teks yang diff dapat ditampilkan.

Michał Kawiecki
sumber