Невідомий тип файлу MIME?


Відповіді:


184

Ви можете використовувати application/octet-streamдля невідомих типів.

У розділі 4.5.1 RFC 2046 зазначено:

Підтип "октет-потік" використовується для вказівки, що тіло містить довільні двійкові дані.


3
Насправді, за RFC ви не повинні надсилати інформацію про тип з невідомими даними. RFC-2046 визначає лише відомі типи, але RFC-7231 розповідає, як поводитися з невідомими типами.
Сампо Саррала - codidact.org

@SampoSarrala Я читав RFC-7231 дещо інакше: "Якщо не існує поля заголовка типу" Вміст ", одержувач МОЖЕ приймати тип носія" application / octet-stream "([RFC2046], Розділ 4.5.1) або вивчити дані, щоб визначити її тип ". Я тлумачу, що так, як ми повинні надсилати NO Content-Type, або ми безпечно надсилаємо додаток / octet-stream як за замовчуванням, якщо ми не хочемо, щоб клієнти грали в ігри вгадування з експертизою вмісту.
Jpnh

1
@Jpnh Так, саме так. Заголовок типу вмісту не повинен бути присутнім, коли він невідомий. Можна також надіслати додаток / oktet-stream, який в основному каже клієнту, що " ви не хочете його відображати просто зараз, але продовжуйте і зберігайте ці байти замість файлу ". Завдяки цьому веб-клієнти пропонують зберегти файл. Варіант 1 == Не знаю нічого про цей файл. Варіант 2 == Вміст файлу неможливо описати за допомогою mime або його потрібно зберегти лише на диску. На практиці будь-який варіант був би правильним. Я мав би обрати краще формулювання, щоб уникнути плутанини.
Сампо Саррала - codidact.org

4
"Довільні двійкові дані" не є "невідомими". Використовуючи додаток / oktet-stream, ви повідомляєте браузеру, що тип вмісту відомий, це не текст, а не зображення, а довільні двійкові дані, і в результаті його слід завантажити у файл і, можливо, виконати. На додаток до помилки, це безпека, особливо якщо врахувати ледь помітні сучасні менеджери завантажень. Правильна відповідь - не заголовок типу вмісту. Якщо ви не знаєте, що це за файл, браузер може його знати, тому нехай він здогадається, особливо коли йому відомий контекст використання (зображення, документ, сценарій, ...)
FF_Dev

@FF_Dev Я впевнений, що це нісенітниця. "Довільні двійкові дані" не означають "виконуваних"; немає причини, що браузер (або менеджер завантажень) повинен вважати, що application/octet-streamфайл виконується. І навіть якщо браузер буде свідомо завантажити виконуваний файл, то він не «можливо виконати» без користувача з проханням; просто завантаження виконуваного файлу не означає, що я хочу, щоб він виконувався прямо зараз. Якщо дійсно є браузер, який може application/octet-streamавтоматично виконувати файли при завантаженні, скажіть нам, що та як відтворити поведінку. Зараз я вам не вірю.
Марк Амері

38

Ресурси RFC:

Ми повинні використовувати RFC-7231 (HTTP / 1.1 Semantics and Content) в якості посилання замість RFC-2046 (Media Media), оскільки питання було чітко про тип HTTP Content Content.

Також RFC-2046 не чітко визначає невідомі типи, але RFC-7231 робить.

Коротка відповідь:

Не надсилайте тип MIME для невідомих даних.
Щоб було зрозуміліше: взагалі не використовуйте заголовок Content-Type.

Список літератури:

RFC-7231
протокол передачі гіпертексту (HTTP / 1.1): семантика та зміст
3.1.1.5. Тип вмісту

Відправник, який генерує повідомлення, що містить тіло корисної навантаження, ДОБРЕ
генерувати поле заголовка типу Вміст у цьому повідомленні, якщо
призначений тип носія доданого подання невідомий
відправника.

Цей розділ чітко говорить про те, щоб не залишати його, якщо ви точно не знаєте. Це також говорить про те, що приймач може припустити, що тип - це application / octet-stream, але річ у тому, що це може бути щось інше.

Що тоді відрізняється?

RFC-2046
4.5.1. Підтип Октет-Потік

Рекомендована дія для реалізації, яка отримує об'єкт
"application / octet-stream", полягає у тому, щоб просто запропонувати ввести дані
у файл із будь-яким скасованим контент-переносом-кодуванням або, можливо,
використовувати його як вхід до вказаного користувачем. процес.

І, як уже було сказано вище:

RFC-7231
3.1.1.5. Тип вмісту

Якщо не існує поля заголовка типу вмісту, одержувач МОЖЕ або припустити тип медіа "додаток / октет-потік"
([RFC2046], розділ 4.5.1), або вивчити дані, щоб визначити його тип.

Висновок:

Якщо ви визначите це як "application / octet-stream", то ви говорите, що знаєте, що це "application / octet-stream".

Якщо ви цього не визначите, ви говорите, що не знаєте, що це таке, і рішення залиште одержувачу та одержувачу, а потім зможете перевірити, чи ходить він як качка і ...


1
Ця відповідь заслуговує на підтримку, оскільки є єдиною правдою. Крім того, використовуючи "application / octet-stream" за замовчуванням, більшість завантажувачів тригера завантажуються, що є діркою безпеки, враховуючи майже невидимі сучасні менеджери завантажень.
FF_Dev

1
Це правильно для HTTP, але питання стосується MIME взагалі, а не про HTTP. Наприклад, в електронній пошті правила абсолютно різні. Дивіться також обговорення в пропонованому дубліката stackoverflow.com/questions/12539058 / ...
tripleee

Я дав нагоду з тієї ж причини, проте я згоден з FF_Dev. Якщо наміром є "application / octet-stream" та запускати завантаження, існує потреба у "application / unknown". Було б непогано, якби браузери не намагалися завантажити файл, якщо не встановлено "Контент-диспозиція", але занадто багато веб-сайтів випадково завантажують файли, не встановлюючи їх ім'я файлу. Особливо банки.
justdan23

14

Я вважаю за краще application/unknown, але результат буде точно такий же, якapplication/octet-stream


17
Чи існує стандарт, який дозволяє використовувати application / unknown замість application / octet-stream?
Гендрік Браммерман

3
Дякую! додаток / невідомо відмінно працює, октет-потік призводить до помилки в хромі на моєму зразку png-файлу!
fnkr

10
Навіщо обслуговувати .png файл як application/octet-streamабо application/unknown? Є причина, яку вони вигадали image/png.
Айдіакапі

10
@ jenson-button-event Це не має нічого спільного з винаходом колеса. Тип MIME визначає ваш намір. Якщо ви знаєте, що те, що ви надсилаєте, має бути зображенням PNG, передайте цю інформацію. Якщо байти випадково являють собою jpeg, ваша програма може попередити вас, що це неправдивий png та що ви маєте помилку десь в іншому місці. Крім того, не всі програми настільки надійні та відмовлені, як і браузер. Вони розроблені для виправлення помилок програміста, але це ніде не є єдиною метою. Браузер - не єдине додаток, що використовує типи MIME.
Айдіакапі

2
Яка ваша довідка? невідомий тип не вносить ніякої інформації щодо вмісту або стану файлу, або навіть якщо він є бінарним чи текстовим, це занадто незрозуміло для виробничого коду, це може бути нормально для невеликого проекту, оскільки якщо в файлі mimetype немає обробник в ОС, він по суті є бінарним файлом для завантаження, а невідомий тип - відома ручка в ОС Windows, якій ви можете призначити дію (наприклад, відкриття невідомих файлів за допомогою блокнота). Хоча погана практика, ви можете використовувати невідомий тип у поєднанні з цим, щоб пропустити будь-яке виконання: /
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.