2010-08-10 32 views
78

Theo như tôi biết, chúng hoàn toàn bình đẳng. Tuy nhiên, duyệt một số tài liệu django, tôi đã tìm thấy đoạn mã này:Sự khác biệt của ContentType và MimeType

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

mà ngạc nhiên cho tôi hai việc cùng nhau. Tài liệu chính thức có thể giải quyết vấn đề theo cách thức tỉ mỉ:

content_type là bí danh cho mimetype. Về mặt lịch sử, tham số này chỉ gọi Mimetype, nhưng vì đây là thực sự là giá trị bao gồm trong HTTP Content-Type header, nó cũng có thể bao gồm mã hóa ký tự, mà làm cho nó nhiều hơn chỉ là một kiểu MIME đặc điểm kỹ thuật. Nếu mimetype là được chỉ định (không phải None), giá trị đó là được sử dụng. Nếu không, content_type được sử dụng. Nếu không được cung cấp, cài đặt DEFAULT_CONTENT_TYPE được sử dụng.

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

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

Trả lời

42

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

Sự khác biệt chính giữa mỗi điểm là gì và khi nào thì đúng để gọi thứ gì đó giống hệt như đối tượng loại nội dung? Tôi có bị bực mình và ngữ pháp không?

Lý do không chỉ tương thích ngược, và tôi sợ tài liệu Django thường xuất sắc là một chút lúng túng về nó. MIME (nó thực sự đáng đọc ít nhất là mục nhập Wikipedia) có nguồn gốc của nó trong việc mở rộng thư internet và đặc biệt là SMTP. Từ đó, thiết kế mở rộng lấy cảm hứng từ MIME và MIME đã tìm ra nhiều giao thức khác (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 MIME được sử dụng cho rất 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 một tham chiếu đến bản thân MIME thì không. Gọi đó là phần 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.Nộp mỗi câu hỏi sử dụng theo "ngữ pháp" là một con thú cưng của tôi. Grrrr.]

0

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

Tính tương thích ngược, dựa trên báo giá của bạn từ tài liệu.

+0

Thats ok, tôi đã hiểu lý do pratical để thêm vào django. Tuy nhiên, cốt lõi của câu hỏi là tại sao * tất cả mọi người * sử dụng hai từ để pha trộn, và nếu có thực sự là một sự khác biệt sau khi tất cả. – Frangossauro

4

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

Trích:

Added content_type như một bí danh cho Mimetype đến HttpResponse constructor. Đó là một 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 ngược lại tương thích.

27

Tôi luôn xem contentType là một tập hợp con 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ột bộ mã hóa ký tự tùy chọn thì nó sẽ giống hệt với một mimeType. Nếu không, mimeType là dữ liệu trước trình tự mã hóa bộ ký tự.

E.G. text/html; charset=UTF-8

text/html là MIMETYPE
; là thông số chỉ báo bổ sung
charset=UTF-8 được bộ ký tự mã hóa tham số

V.D. application/msword

application/msword là MIMETYPE
Nó không thể có một mã hóa ký tự đặt vì nó mô tả một cũng được hình thành octet-stream ký tự không bao gồm trực tiếp.

+0

Đây là câu trả lời đúng. Việc đặt mime_type phản hồi (không phải content_type) không ghi đè lên bộ ký tự và nó vẫn là UTF-8. –

+0

Đôi khi được gọi đơn giản là "loại phương tiện", loại MIME là khi 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ữ "loại MIME có thể phân tích cú pháp", bao gồm việc sử dụng các thuộc tính trong tiêu đề 'Nội dung Kiểu '. Cú pháp của 'Content-Type' có thể tìm thấy ở đây: https://tools.ietf.org/html/rfc2045#section-5.1 –

Các vấn đề liên quan