Sự khác biệt của ContentType và MimeType là gì


103

Theo như tôi biết thì chúng bình đẳng tuyệt đối. Tuy nhiên, khi duyệt qua một số tài liệu django, tôi đã tìm thấy đoạn mã này:

HttpResponse.__init__(content='', mimetype=None, status=200, content_type='text/html')

Điều đó làm tôi ngạc nhiên khi cả hai hòa hợp với nhau. Các tài liệu chính thức đã có thể giải quyết vấn đề theo cách thực tế:

content_type là một bí danh cho mimetype. Trước đây, tham số này chỉ được gọi là mimetype, nhưng vì đây thực sự là giá trị được bao gồm trong tiêu đề Loại nội dung HTTP, nên nó cũng có thể bao gồm mã hóa bộ ký tự, khiến nó không chỉ là một đặc tả kiểu MIME. Nếu mimetype được chỉ định (không phải Không có), giá trị đó sẽ được sử dụng. Nếu không, content_type được sử dụng. Nếu không có thì cài đặt DEFAULT_CONTENT_TYPE sẽ được sử dụng.

Tuy nhiên, tôi thấy nó không đủ sáng tỏ. Tại sao chúng ta sử dụng 2 cách đặt tên khác nhau cho (gần như giống nhau)? Có phải "Content-Type" chỉ là tên được sử dụng trong các yêu cầu của trình duyệt và rất ít được sử dụng bên ngoài nó không?

Sự khác biệt chính giữa mỗi cái mimetypelà gì và khi nào là đúng để gọi một cái gì đó trái ngược với content-type? Tôi có phải là người xấu và ngữ pháp nazi không?

Câu trả lời:


54

Tại sao chúng ta sử dụng 2 cách đặt tên khác nhau cho (gần như giống nhau)? Có phải "Content-Type" chỉ là tên được sử dụng trong các yêu cầu của trình duyệt và rất ít được sử dụng bên ngoài nó không?

Sự khác biệt chính giữa mỗi cái là gì và khi nào là đúng để gọi một cái gì đó là mimetype trái ngược với content-type? Tôi có phải là người xấu và ngữ pháp nazi không?

Lý do không chỉ là khả năng tương thích ngược, và tôi e rằng tài liệu Django thường xuất sắc có một chút lăn tăn về nó. MIME (nó thực sự đáng đọc ít nhất là mục nhập Wikipedia) có nguồn gốc trong việc mở rộng thư internet, và cụ thể là SMTP. Từ đó, thiết kế mở rộng lấy cảm hứng từ MIME và MIME đã tìm thấy đường vào rất nhiều giao thức khác (chẳng hạn như HTTP ở đây) và vẫn đang được sử dụng khi các loại siêu dữ liệu hoặc dữ liệu mới cần được truyền trong một giao thức hiện có. Có hàng tá RFC thảo luận về MIME được sử dụng cho nhiều mục đích.

Cụ thể, Content-Type:là một trong số nhiều tiêu đề MIME. "Mimetype" thực sự nghe có vẻ lỗi thời, nhưng bản thân tham chiếu đến MIME thì không. Gọi phần đó là tương thích ngược, nếu bạn muốn.

[BTW, đây hoàn toàn là một vấn đề về thuật ngữ không liên quan gì đến ngữ pháp. Việc điền mọi câu hỏi về cách sử dụng theo "ngữ pháp" là một điều thú vị của tôi. Grrrr.]


49

Tôi luôn xem contentType là một tập hợp siêu của mimeType. Sự khác biệt duy nhất là mã hóa bộ ký tự tùy chọn. Nếu contentType không bao gồm mã hóa bộ ký tự tùy chọn thì nó sẽ giống với mimeType. Nếu không, mimeType là dữ liệu trước chuỗi mã hóa bộ ký tự.

VÍ DỤ text/html; charset=UTF-8

text/htmllà mimeType
;là chỉ báo tham số bổ sung
charset=UTF-8là tham số mã hóa bộ ký tự

VÍ DỤ application/msword

application/mswordlà mimeType
Nó không thể có mã hóa tập hợp ký tự vì nó mô tả một định dạng tốt octet-streamkhông bao gồm các ký tự trực tiếp.


1
Đây là câu trả lời chính xác. Đặt mime_type phản hồi (không phải content_type) không ghi đè bộ mã và nó vẫn ở dạng UTF-8.
Mikko Ohtamaa

Đôi khi được gọi đơn giản là "loại phương tiện", loại MIME giống như bạn nói loại phương tiện. Trong các thông số kỹ thuật nhất định, chúng ta sẽ thấy thuật ngữ "kiểu MIME có thể phân tích Content-Typecú pháp ", bao gồm việc sử dụng các thuộc tính trong tiêu đề. Cú pháp của Content-Typecó thể được tìm thấy tại đây: tools.ietf.org/html/rfc2045#section-5.1
Josh Habdas

Tuy nhiên, theo quan điểm của tôi, mime-type là một thuật ngữ rất hẹp giới hạn chính nó trong thư, trong khi content-type là tiếng Anh thuần túy cho "loại nội dung". Vì vậy, theo quan điểm của tôi text/htmlcũng là một loại nội dung, ngay cả khi mọi người có xu hướng gọi đó là MIME. Ngoài ra, cái tên mới hơn, media-typethậm chí còn mờ hơn, vì phương tiện truyền thông là 100 thứ khác nhau. BBC là một phương tiện truyền thông! DVD là một phương tiện truyền thông! Và người ta sẽ tranh luận rằng một luồng dữ liệu không phải là "phương tiện", mà là "phương tiện".
user2173353

4

Nếu bạn muốn biết chi tiết xem vé 3526 .

Trích dẫn:

Đã thêm content_type làm bí danh cho mimetype vào hàm tạo HttpResponse. Đó là một cái tên chính xác hơn một chút. Dựa trên một bản vá từ Simon Willison. Hoàn toàn tương thích ngược.


0

Tại sao chúng ta sử dụng 2 cách đặt tên khác nhau cho (gần như giống nhau)?

Khả năng tương thích ngược, dựa trên trích dẫn của bạn từ tài liệu.


Được rồi, tôi hiểu lý do thực tế để thêm điều đó vào django. Tuy nhiên, cốt lõi của câu hỏi là tại sao mọi người lại sử dụng hai từ lẫn lộn như vậy, và nếu thực sự có sự khác biệt.
Frangossauro
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.