Sự khác biệt giữa văn bản / xml so với ứng dụng / xml đối với phản hồi của dịch vụ web


495

Đây là nhiều hơn một câu hỏi chung về sự khác biệt giữa text/xmlapplication/xml. Tôi còn khá mới để viết dịch vụ web (REST - Jersey). Tôi đã sản xuất application/xmlvì đó là những gì xuất hiện trong hầu hết các hướng dẫn / ví dụ mã mà tôi đang sử dụng để tìm hiểu, nhưng gần đây tôi đã phát hiện ra text/xmlvà tự hỏi có gì khác về nó và khi nào bạn sẽ sử dụng nó application/xml?


Như đã lưu ý trong câu trả lời của DaveV và trong tiêu đề tại tools.ietf.org/html/rfc3023 , RFC 3023 (được trích dẫn bởi câu trả lời của Oded, hiện được chấp nhận) đã lỗi thời. RFC 7303 mới hơn thực sự mang lại một câu trả lời khác biệt đáng kể cho câu hỏi này so với RFC 3023 được sử dụng. Tôi nghĩ do đó sẽ hữu ích cho những độc giả tương lai nếu bạn chấp nhận câu trả lời của DaveV, để thông tin cập nhật nhất được giữ ở đầu danh sách câu trả lời.
Mark Amery

Dựa trên Dave V bên dưới và Marián erný, có vẻ như ứng dụng / xml được ưa thích ngay bây giờ nếu bạn đang làm một cái gì đó mới.
Sql Surfer

text/có nghĩa là cho con người. application/có nghĩa là cho máy tính
Ian Boyd

Câu trả lời:


108

Đây là một câu hỏi cũ, nhưng một câu hỏi thường xuyên được truy cập và các khuyến nghị rõ ràng hiện có sẵn từ RFC 7303 , điều này đã làm lỗi RFC3023. Tóm lại (phần 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
Đoạn trích dẫn đề cập đến thông tin đăng ký IANA, mà (bằng cách kiểm tra Mục 9.1) cũng liên quan đến mã hóa, do đó, không nên có thêm bất kỳ sự khác biệt nào trong việc xử lý bộ ký tự giữa application/xmltext/xml. Ngoài ra, tôi coi phần này của bản tóm tắt: "Đặc tả này chuẩn hóa ... application / xml ... trong khi xác định văn bản / xml ... là bí danh ..." có nghĩa là application/xmltext/xmltương đương và không có ưu tiên nào cái này về cái kia
Marián erný

427

Từ RFC ( 3023 ), trong phần 3, Các loại phương tiện XML:

Nếu một tài liệu XML - nghĩa là, tài liệu XML nguồn chưa được xử lý - có thể đọc được bởi người dùng thông thường, văn bản / xml thích hợp hơn cho ứng dụng / xml. Các tác nhân người dùng MIME (và các tác nhân người dùng web) không có hỗ trợ rõ ràng cho văn bản / xml sẽ coi nó là văn bản / thuần túy, ví dụ, bằng cách hiển thị thực thể MIME XML dưới dạng văn bản thuần túy. Ứng dụng / xml thích hợp hơn khi người dùng thông thường không thể đọc được thực thể MIME XML .

(nhấn mạnh của tôi)


6
@drachenstern - Tôi nghĩ các yếu tố và thuộc tính không mô tả nhiều khả năng ( <a1 d="" g="">ví dụ như người dùng thông thường không thể đọc được ).
Oded

3
@Mike Tất nhiên rồi. Một số tệp XML về cơ bản là một danh sách các bản ghi, như thế này: msdn.microsoft.com/en-us/l Library / ms762271% 28v = vs85% 29.aspx Điều này có khả năng được đọc và xử lý bởi một ứng dụng. Những người khác về cơ bản là văn bản với đánh dấu, như một trang HTML. Sử dụng văn bản / xml cho chúng nghe có vẻ phù hợp hơn.
biziclop

5
Vui lòng cho một ví dụ về không thể đọc được và có thể đọc được. Chúng tôi sử dụng các tệp hầu hết có thể đọc được nhưng có các nút được mã hóa base64, v.v.
Joe Phillips

5
@JoePhilllips - Có bạn đi. Base64 không thể đọc được bởi con người. Nếu toàn bộ tài liệu có thể được đọc và có ý nghĩa đối với con người mà không có công cụ hoặc xem hướng dẫn sử dụng ( xgsfthẻ đó có nghĩa là gì?), Thì nó có thể đọc được.
Oded

8
@CommaToast Một máy chủ web có thể trả về XML được định dạng và thụt lề nếu "text / xml" là Chấp nhận, trong khi ứng dụng / xml có thể trả về tất cả các khoảng trắng không đáng kể được loại bỏ. Trong ASP.NET MVC chẳng hạn, bạn có thể chỉ định các trình xử lý khác nhau cho các mô hình khác nhau.
Novaterata 20/07/2015

33

Theo bài viết này ứng dụng / xml được ưa thích.


BIÊN TẬP

Tôi đã làm một chút theo dõi trên bài viết.

Tác giả tuyên bố rằng mã hóa được khai báo trong hướng dẫn xử lý XML, như:

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

có thể bỏ qua khi text/xmlloại phương tiện được sử dụng.

Họ ủng hộ luận điểm với định nghĩa về text/*đặc tả họ loại MIME trong RFC 2046 , cụ thể là đoạn sau:

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.

Theo họ, những khó khăn như vậy có thể tránh được khi sử dụng application/xmlloại MIME. Cho dù đó là sự thật hay không, tôi sẽ không đi xa để tránh text/xml. IMHO, tốt nhất chỉ là tuân theo ngữ nghĩa về khả năng đọc của con người (không đọc được) và luôn nhớ chỉ định bộ ký tự.


1
+1 cho liên kết. Theo cách nói của bạn, kết luận cơ bản đạt được trong bài viết là gì? Có lẽ "bài viết nói rằng mã hóa tệp bị bỏ qua, điều đó có nghĩa là bạn không thể gửi utf-8 và dữ liệu nhị phân trong một tệp có tiêu đề văn bản / xml" cũng được xác minh?
Shanimal

Tôi đồng ý với @Shanimal, câu trả lời nên bao gồm ý chính của bài viết vì liên kết có thể không tồn tại mãi mãi. Sự biến mất của nó sẽ khiến câu trả lời khá vô dụng. Bất cứ ai cũng có thể xác nhận tuyên bố về việc bỏ qua các hướng dẫn xử lý XML liên quan đến mã hóa?
toniedzwiedz

1
Theo tác giả ban đầu, điều này đã được sửa trong các lần quay lại sau của thông số kỹ thuậtUpdate: 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 20/03/2015

Nếu tôi tải một tệp XML bằng ajax thì đó là một "tài liệu" loại application/xmlnhưng nếu tôi sử dụng một phần tử biểu mẫu đầu vào thì đó là một "tệp" loại text/xmlkhông xử lý đúng với mã của tôi. Làm thế nào tôi có thể chuyển đổi nó sang định dạng khác?
Người ủng hộ của quỷ

5

application/xmlđược xem svnnhư là loại nhị phân trong khi đó text/xmllà tệp văn bản có thể hiển thị một khác biệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.