อะไรคือข้อแตกต่างระหว่าง text / xml กับ application / xml สำหรับการตอบกลับของเว็บเซอร์


495

นี้มีมากขึ้นของคำถามทั่วไปเกี่ยวกับความแตกต่างระหว่างและtext/xml application/xmlฉันค่อนข้างใหม่ในการเขียน webservices (REST - Jersey) ฉันได้ผลิตapplication/xmlเพราะมันเป็นสิ่งที่ปรากฏในบทเรียนส่วนใหญ่ / ตัวอย่างรหัสที่ฉันได้ใช้ในการเรียนรู้ แต่เมื่อเร็ว ๆ นี้ฉันค้นพบเกี่ยวกับtext/xmlและสงสัยว่าสิ่งที่แตกต่างเกี่ยวกับมันและเมื่อไหร่ที่คุณจะใช้มันapplication/xml?


ดังที่ระบุไว้ในคำตอบของ DaveV และในส่วนหัวที่tools.ietf.org/html/rfc3023 , RFC 3023 (อ้างโดยคำตอบของ Oded ซึ่งเป็นที่ยอมรับในปัจจุบัน) นั้นล้าสมัยแล้ว RFC 7303 ที่ใหม่กว่าให้คำตอบสำหรับคำถามนี้แตกต่างจาก RFC 3023 ฉันคิดว่ามันจะเป็นประโยชน์สำหรับผู้อ่านในอนาคตหากคุณยอมรับคำตอบของ DaveV ดังนั้นข้อมูลที่ทันสมัยที่สุดจะถูกเก็บไว้ที่ด้านบนของรายการคำตอบ
Mark Amery

จาก Dave V ด้านล่างและMariánČernýปรากฏว่าต้องการแอปพลิเคชั่น / xml ตอนนี้หากคุณกำลังทำสิ่งใหม่
Sql Surfer

text/มีไว้สำหรับมนุษย์ application/มีไว้สำหรับคอมพิวเตอร์
Ian Boyd

คำตอบ:


108

นี่เป็นคำถามเก่า แต่มีผู้เยี่ยมชมบ่อยครั้งและมีคำแนะนำที่ชัดเจนจากRFC 7303ซึ่งล้าสมัย RFC3023 สรุป (ส่วน 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".

6
ย่อหน้าอ้างกล่าวถึงข้อมูลการลงทะเบียน IANA ซึ่ง (โดยการตรวจสอบมาตรา 9.1) ที่เกี่ยวข้องยังมีการเข้ารหัสเพื่อให้ไม่ควรมีการเพิ่มเติมใด ๆ ความแตกต่างใด ๆ ในชุดตัวอักษรจัดการระหว่างและapplication/xml text/xmlนอกจากนี้ฉันพิจารณาส่วนนี้ของบทคัดย่อ: "ข้อกำหนดนี้เป็นมาตรฐาน ... application / xml ... ในขณะที่กำหนด text / xml ... เป็น alias ... " เพื่อหมายความว่าapplication/xmlและtext/xmlเทียบเท่าและไม่มีการตั้งค่าของ หนึ่งเกี่ยวกับอื่น ๆ
MariánČerný

427

จาก RFC ( 3023 ) ภายใต้หัวข้อ 3, ประเภทสื่อ XML:

หากเอกสาร XML - นั่นคือเอกสาร XML ต้นทางที่ยังไม่ได้ประมวลผล - สามารถอ่านได้โดยผู้ใช้ทั่วไปข้อความ / xmlจะดีกว่า application / xml ตัวแทนผู้ใช้ MIME (และตัวแทนผู้ใช้เว็บ) ที่ไม่มีการสนับสนุนอย่างชัดเจนสำหรับข้อความ / xml จะถือว่าเป็นข้อความ / ธรรมดาตัวอย่างเช่นโดยการแสดงเอนทิตี XML MIME เป็นข้อความธรรมดา แอปพลิเคชัน / xmlจะดีกว่าเมื่อเอนทิตี XML MIME ไม่สามารถอ่านได้ โดยผู้ใช้ทั่วไป

(เน้นที่เหมือง)


6
@drachenstern - ฉันคิดว่าไม่ใช่องค์ประกอบเชิงพรรณนาและแอตทริบิวต์มีโอกาสมากขึ้น ( <a1 d="" g="">เช่นเป็นไม่สามารถอ่านได้โดยสบาย ๆผู้ใช้)
Oded

3
@ ไมค์แน่นอน ไฟล์ XML บางไฟล์นั้นเป็นรายการของบันทึกเช่นนี้: msdn.microsoft.com/en-us/library/ms762271%28v=vs.85%29.aspxซึ่งมีแนวโน้มที่จะถูกอ่านและประมวลผลโดยแอปพลิเคชัน ส่วนใหญ่เป็นข้อความที่มีมาร์กอัปเช่นหน้า HTML การใช้ข้อความ / xml จะให้เสียงที่เหมาะสมยิ่งขึ้น
biziclop

5
โปรดยกตัวอย่างที่อ่านไม่ได้และอ่านได้ เราใช้ไฟล์ที่ส่วนใหญ่อ่าน แต่มี base64 โหนดเข้ารหัส ฯลฯ ..
โจฟิลลิป

5
@JoePhilllips - ไปแล้ว base64 ไม่สามารถอ่านได้โดยมนุษย์ หากเอกสารทั้งหมดสามารถอ่านและทำความเข้าใจกับมนุษย์โดยไม่ต้องใช้เครื่องมือหรือดูคู่มือ ( xgsfแท็กนั้นมีความหมายว่าอะไร?) แสดงว่าสามารถอ่านได้
Oded

8
@CommaToast เว็บเซิร์ฟเวอร์อาจส่งคืน XML ที่จัดรูปแบบและเยื้องถ้า "text / xml" คือยอมรับในขณะที่ application / xml อาจคืนค่าช่องว่างที่ไม่สำคัญทั้งหมดออก ตัวอย่างเช่นใน ASP.NET MVC คุณสามารถระบุตัวจัดการที่แตกต่างกันสำหรับชนิดแฟ้มต่าง ๆ
Novaterata

33

ตามบทความนี้ขอแนะนำให้ใช้แอปพลิเคชัน / xml


แก้ไข

ฉันติดตามบทความเล็กน้อย

ผู้เขียนอ้างว่าการเข้ารหัสที่ประกาศในคำสั่งการประมวลผล XML เช่น:

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

สามารถถูกละเว้นเมื่อใช้text/xmlชนิดสื่อบันทึก

พวกเขาสนับสนุนการทำวิทยานิพนธ์ด้วยคำจำกัดความของtext/*ข้อมูลจำเพาะตระกูลประเภท MIME ในRFC 2046โดยเฉพาะส่วนต่อไปนี้:

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.

ตามที่พวกเขาสามารถหลีกเลี่ยงปัญหาดังกล่าวเมื่อใช้application/xmlประเภท MIME text/xmlไม่ว่าจะเป็นจริงหรือไม่ฉันจะไม่ไปไกลเท่าที่จะหลีกเลี่ยง IMHO เป็นการดีที่สุดที่จะทำตามความหมายของความสามารถในการอ่านของมนุษย์ (อ่านไม่ได้) และอย่าลืมระบุชุดอักขระ


1
+1 สำหรับลิงก์ ในคำพูดของคุณเองอะไรคือข้อสรุปพื้นฐานในบทความ อาจเป็น "บทความระบุว่าการเข้ารหัสไฟล์ถูกละเว้นซึ่งหมายความว่าคุณไม่สามารถส่ง utf-8 และข้อมูลไบนารีในไฟล์ที่มีส่วนหัวของข้อความ / xml" ได้รับการยืนยันเช่นนี้ด้วยหรือไม่
Shanimal

ฉันเห็นด้วยกับ @Sanimal คำตอบควรมีส่วนสำคัญของบทความเนื่องจากลิงก์อาจไม่คงอยู่ตลอดไป การหายตัวไปของมันจะทำให้คำตอบไร้ประโยชน์ ใครสามารถยืนยันคำสั่งเกี่ยวกับการเพิกเฉยคำแนะนำการประมวลผล XML ที่เกี่ยวข้องกับการเข้ารหัส
toniedzwiedz

1
ตามที่ผู้เขียนต้นฉบับนี้ได้รับการแก้ไขใน revs ของคุณสมบัติในภายหลัง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.
TheNorthWes

ถ้าฉันโหลดไฟล์ XML ด้วย ajax มันเป็น "เอกสาร" ประเภทapplication/xmlแต่ถ้าฉันใช้องค์ประกอบของรูปแบบการป้อนข้อมูลมันเป็น "ไฟล์" ประเภทtext/xmlที่ไม่ทำงานอย่างถูกต้องกับรหัสของฉัน ฉันจะแปลงเป็นรูปแบบอื่นได้อย่างไร?
ผู้สนับสนุนของ Devil

5

application/xmlถูกมองsvnว่าเป็นชนิดไบนารีขณะที่text/xmlเป็นไฟล์ข้อความซึ่ง diff สามารถแสดงได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.