Loại tệp không xác định MIME?


140

Tôi có phải chỉ định loại MIME nếu tệp đã tải lên không có phần mở rộng không? Nói cách khác là có loại MIME chung mặc định?

Câu trả lời:


184

Bạn có thể sử dụng application/octet-streamcho các loại chưa biết.

RFC 2046 nêu trong mục 4.5.1:

Kiểu con "octet-stream" được sử dụng để chỉ ra rằng một cơ thể chứa dữ liệu nhị phân tùy ý.


3
Trên thực tế, trên mỗi RFC, bạn không nên gửi bất kỳ thông tin loại nào với dữ liệu không xác định. RFC-2046 chỉ định nghĩa các loại đã biết nhưng RFC-7231 cho bạn biết cách xử lý các loại không xác định.
Sampo Sarrala - codidact.org

@SampoSarrala Tôi đọc RFC-7231 một chút khác biệt: "Nếu không có trường tiêu đề Kiểu nội dung, người nhận có thể giả sử loại phương tiện" application / octet-stream "([RFC2046], Mục 4.5.1) hoặc kiểm tra dữ liệu để xác định loại của nó. " Tôi giải thích rằng vì chúng tôi nên gửi loại Nội dung KHÔNG hoặc chúng tôi an toàn để gửi ứng dụng / octet-stream làm mặc định nếu chúng tôi không muốn khách hàng chơi trò chơi đoán bằng kiểm tra nội dung.
Jpnh 19/03/2015

1
@Jpnh Vâng, đúng vậy. Tiêu đề Kiểu nội dung không nên có mặt bất cứ khi nào không xác định. Người ta cũng có thể gửi ứng dụng / octet-stream về cơ bản cho khách hàng biết rằng " bạn không muốn hiển thị nó ngay bây giờ, nhưng hãy tiếp tục và lưu các byte này vào tệp ". Điều này làm cho khách hàng web cung cấp tập tin tiết kiệm. Tùy chọn 1 == Không biết gì về tệp này. Tùy chọn 2 == Nội dung tệp không thể được mô tả bằng mime hoặc chỉ nên lưu vào đĩa. Trong thực tế, một trong hai lựa chọn sẽ đúng. Tôi nên chọn từ ngữ tốt hơn để tránh nhầm lẫn.
Sampo Sarrala - codidact.org 20/03/2015

4
"Dữ liệu nhị phân tùy ý" không phải là "không xác định". Bằng cách sử dụng application / octet-stream, bạn nói với trình duyệt rằng loại nội dung được biết đến, không phải là văn bản cũng không phải là hình ảnh mà là dữ liệu nhị phân tùy ý và do đó sẽ được tải xuống tệp và có thể được thực thi. Trên hết là sai, đây là một lỗ hổng bảo mật, đặc biệt là xem xét các trình quản lý tải xuống hiện đại hầu như không nhìn thấy được. Câu trả lời đúng là không có tiêu đề kiểu nội dung. Nếu bạn không biết đó là loại tệp nào, trình duyệt có thể biết nó vì vậy hãy để nó đoán, đặc biệt là khi nó biết bối cảnh sử dụng (hình ảnh, tài liệu, tập lệnh, ...)
FF_Dev

@FF_Dev Tôi chắc chắn điều đó là vô nghĩa. "Dữ liệu nhị phân tùy ý" không ngụ ý "thực thi"; không có lý do gì trình duyệt (hoặc trình quản lý tải xuống) cho rằng một application/octet-streamtệp có thể thực thi được. Và ngay cả khi một trình duyệt đang cố tình tải xuống một tệp thực thi, nó không "có thể thực thi" nó mà không cần người dùng yêu cầu; chỉ tải xuống một tệp thực thi không có nghĩa là tôi muốn nó được thực thi ngay bây giờ. Nếu thực sự có một trình duyệt có thể thực thi application/octet-streamcác tệp tự động khi tải xuống, hãy cho chúng tôi biết và cách tái tạo hành vi. Ngay bây giờ tôi không tin bạn.
Đánh dấu Amery

38

Tài nguyên RFC:

Chúng ta nên sử dụng RFC-7231 (HTTP / 1.1 Semantics and Content) làm tài liệu tham khảo thay vì RFC-2046 (Loại phương tiện) vì câu hỏi rõ ràng về Loại nội dung HTTP.

Ngoài ra RFC-2046 không xác định rõ các loại chưa biết nhưng RFC-7231 thì có.

Câu trả lời ngắn:

Không gửi loại MIME cho dữ liệu không xác định.
Để rõ ràng hơn: Hoàn toàn không sử dụng tiêu đề Kiểu nội dung.

Người giới thiệu:


Giao thức truyền siêu văn bản RFC-7231 (HTTP / 1.1): Ngữ nghĩa và nội dung
3.1.1.5. Loại nội dung

Người gửi tạo thư có chứa
nội dung tải trọng NÊN tạo trường tiêu đề Kiểu nội dung trong thư đó trừ khi
loại phương tiện dự định của đại diện kèm theo không xác định đối với
người gửi.

Phần đó rõ ràng bảo bạn bỏ nó đi nếu bạn không biết chắc chắn. Nó cũng cho biết rằng người nhận có thể cho rằng loại đó là ứng dụng / octet-stream nhưng điều đó cũng có thể là một thứ khác.

Vậy thì có gì khác nhau?

RFC-2046
4.5.1. Tiểu loại Octet-Stream

Hành động được đề xuất cho việc triển khai nhận thực thể
"application / octet-stream" chỉ đơn giản là đề nghị đưa dữ liệu
vào một tệp, với bất kỳ Mã hóa chuyển nội dung nào được hoàn tác hoặc có thể
sử dụng nó làm đầu vào cho người dùng chỉ định quá trình.

Và, như đã nêu ở trên:

RFC-7231
3.1.1.5. Loại nội dung

Nếu không có trường tiêu đề Kiểu nội dung, người nhận có thể giả sử loại phương tiện "ứng dụng / octet-stream"
([RFC2046], Mục 4.5.1) hoặc kiểm tra dữ liệu để xác định loại.

Phần kết luận:

Nếu bạn định nghĩa nó là "application / octet-stream" thì bạn đang nói rằng bạn biết rằng đó là "application / octet-stream".

Nếu bạn không xác định nó thì bạn đang nói rằng bạn không biết nó là gì và để lại quyết định cho người nhận và người nhận sau đó có thể kiểm tra xem nó có đi như vịt không và ...


1
Câu trả lời này xứng đáng được upvote vì nó là duy nhất trong sự thật. Ngoài ra, việc sử dụng "application / octet-stream" theo mặc định làm cho hầu hết tải xuống trình duyệt kích hoạt, đây là một lỗ hổng bảo mật khi xem xét các trình quản lý tải xuống hiện đại gần như vô hình.
FF_Dev

1
Điều này đúng với HTTP, nhưng câu hỏi là về MIME nói chung, không phải về HTTP. Trong email, ví dụ, các quy tắc là hoàn toàn khác nhau. Xem thêm thảo luận tại đề xuất stackoverflow.com/questions/12539058/ trên
tripleee

Tôi đã đưa ra một sự tăng trưởng vì lý do tương tự, tuy nhiên tôi đồng ý với FF_Dev. Trừ khi có ý định là "application / octet-stream" và để kích hoạt tải xuống, cần có "application / unknown". Sẽ thật tuyệt nếu các trình duyệt không cố tải xuống tệp nếu "Bố trí nội dung" không được đặt, nhưng có quá nhiều trang web tải xuống các tệp một cách ngớ ngẩn mà không đặt tên tệp của chúng để sử dụng. Đặc biệt là ngân hàng.
justdan23

14

Tôi thích application/unknown, nhưng kết quả chắc chắn sẽ giống nhưapplication/octet-stream


17
Có một tiêu chuẩn nào cho phép sử dụng application / unknown thay vì application / octet-stream không?
Hendrik Brummermann

3
Cảm ơn! application / unknown đang hoạt động rất tốt, octet-stream dẫn đến lỗi chrome trong tệp png mẫu của tôi!
fnkr

10
Tại sao phục vụ tệp .png dưới dạng application/octet-streamhoặc application/unknown? Có một lý do họ đã phát minh ra image/png.
Aidiakapi

10
@ jenson-button-event Không liên quan gì đến việc phát minh lại bánh xe. Loại MIME chỉ định ý định của bạn. Nếu bạn biết rằng những gì bạn đang gửi được cho là hình ảnh png, hãy chuyển thông tin đó cùng. Nếu các byte vô tình đại diện cho một jpeg, ứng dụng của bạn có thể cảnh báo bạn rằng đó không phải là một png hợp lệ và bạn có một lỗi ở một nơi khác. Ngoài ra, không phải tất cả các ứng dụng đều mạnh mẽ và có khả năng chịu lỗi như trình duyệt. Chúng được thiết kế để sửa lỗi của lập trình viên, nhưng đó không phải là mục đích duy nhất. Trình duyệt không phải là ứng dụng duy nhất sử dụng các loại MIME.
Aidiakapi

2
Tài liệu tham khảo của bạn là gì? loại không xác định không đóng góp bất kỳ thông tin nào liên quan đến nội dung hoặc trạng thái của tệp hoặc ngay cả khi nó là nhị phân hoặc dựa trên văn bản, nó quá mơ hồ đối với mã sản xuất, có thể được chấp nhận cho một dự án nhỏ, vì nếu một mô hình tệp không có trình xử lý trong HĐH, về cơ bản nó là một tệp nhị phân có thể tải xuống - và loại không xác định là một trình xử lý đã biết trong hệ điều hành windows, bạn có thể chỉ định một hành động (ví dụ: mở các tệp không xác định bằng notepad). Mặc dù thực hành xấu, bạn có thể sử dụng loại không xác định kết hợp với loại này để bỏ qua mọi thao tác thực thi: /
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.