Должен ли я указывать тип MIME, если загруженный файл не имеет расширения? Другими словами, существует ли общий тип MIME по умолчанию?
Должен ли я указывать тип MIME, если загруженный файл не имеет расширения? Другими словами, существует ли общий тип MIME по умолчанию?
Ответы:
Можно использовать application/octet-stream
для неизвестных типов.
RFC 2046 утверждает в разделе 4.5.1:
Подтип «поток октетов» используется для обозначения того, что тело содержит произвольные двоичные данные.
application/octet-stream
файл исполняемым. И даже если браузер будет сознательно загрузить исполняемый файл, он не «возможно выполнить» без пользователя с просьбой; простая загрузка исполняемого файла не означает, что я хочу, чтобы он был запущен прямо сейчас. Если действительно есть браузер, который может application/octet-stream
автоматически запускать файлы при загрузке, сообщите нам, какой и как воспроизвести это поведение. Прямо сейчас я тебе не верю.
Мы должны использовать RFC-7231 (семантика и контент HTTP / 1.1) в качестве ссылки вместо RFC-2046 (типы мультимедиа), потому что вопрос явно касался HTTP Content-Type.
Также RFC-2046 не дает четкого определения неизвестных типов, но RFC-7231 определяет.
Не отправляйте MIME-тип для неизвестных данных.
Чтобы быть более ясным: вообще не используйте заголовок Content-Type.
RFC-7231
Протокол передачи гипертекста (HTTP / 1.1): семантика и контент
3.1.1.5. Тип содержимогоОтправителю, который генерирует сообщение, содержащее тело полезной нагрузки, СЛЕДУЕТ
сгенерировать поле заголовка Content-Type в этом сообщении, если только
предполагаемый тип мультимедиа вложенного представления неизвестен
отправителю.
В этом разделе ясно сказано, что вы можете не указывать его, если вы этого не знаете наверняка. Он также сообщает, что получатель мог предположить, что тип - это приложение / октет-поток, но дело в том, что это также может быть что-то еще.
RFC-2046
4.5.1. Подтип октетного потокаРекомендуемое действие для реализации, которая получает объект
"application / octet-stream", - просто предложить поместить данные
в файл с отменой любого Content-Transfer-Encoding или, возможно,
использовать его в качестве ввода для указанного пользователем процесс.
И, как уже было сказано выше:
RFC-7231
3.1.1.5. Тип содержимогоЕсли поле заголовка Content-Type отсутствует, получатель МОЖЕТ либо принять тип мультимедиа «приложение / октет-поток»
([RFC2046], раздел 4.5.1), либо проверить данные, чтобы определить их тип.
Если вы определяете его как «application / octet-stream», вы говорите, что знаете, что это «application / octet-stream».
Если вы не определяете его, вы говорите, что не знаете, что это такое, и оставляете решение на усмотрение получателя, и получатель может затем проверить, ходит ли он как утка и ...
Я предпочитаю application/unknown
, но результат будет точно такой же, какapplication/octet-stream
application/octet-stream
или application/unknown
? Есть причина, по которой они изобрели image/png
.