Application octet stream чем открыть

Обновлено: 04.07.2024

Если этот заголовок [Content-Disposition: attachment] используется в ответе с типом содержимого application / octet-stream, подразумевается, что пользовательский агент не должен отображать ответ, а непосредственно вводит `save response как .. Диалог.

Я читаю это как

Но я бы подумал , что Content-Type было бы application/pdf , image/png и т.д.

Должен ли я иметь, Content-Type: application/octet-stream если я хочу, чтобы браузеры загружали файл?

Тип контента должен быть таким, каким он известен, если вы это знаете. application/octet-stream определяется как «произвольные двоичные данные» в RFC 2046, и здесь есть определенное совпадение того, что они подходят для сущностей, единственной целью которых является сохранение на диск, и с этого момента они должны находиться вне чего-либо «webby». Или посмотреть на это с другой стороны; единственное, что можно безопасно сделать с помощью application / octet-stream, - это сохранить его в файл и надеяться, что кто-то еще знает, для чего он нужен.

Вы можете комбинировать использование Content-Disposition с другими типами контента, такими как image/png или даже, text/html чтобы указать, что вы хотите сохранить, а не отобразить. Раньше было так, что некоторые браузеры игнорировали бы это в случае, text/html но я думаю, что это было довольно давно в этот момент (и я скоро ложусь спать, поэтому я не собираюсь начинать тестировать целую кучу браузеры прямо сейчас, может быть позже).

RFC 2616 также упоминает о возможности маркеров расширения, и в настоящее время большинство браузеров признают, inline что вы хотите, чтобы сущность отображалась, если это возможно (то есть, если это тип, который браузер знает, как отображать, в противном случае у него нет выбора). , Это, конечно, поведение по умолчанию в любом случае, но это означает, что вы можете включить filename часть заголовка, которую будут использовать браузеры (возможно, с некоторой настройкой, чтобы расширения файлов соответствовали локальным системным нормам для рассматриваемого типа контента, возможно, нет) в качестве предложения, если пользователь пытается сохранить.

Означает «Я не знаю, что это за чертовщина. Пожалуйста, сохраните его как файл, желательно с именем picture.jpg».

Означает «Это изображение в формате PNG. Пожалуйста, сохраните его как файл, желательно с именем picture.jpg».

Означает «Это изображение в формате PNG. Пожалуйста, покажите его, если вы не знаете, как отображать изображения в формате PNG. В противном случае, или если пользователь решит сохранить его, мы рекомендуем имя picture.jpg для файла, в котором вы сохраняете его как».

Из тех браузеров, которые распознают inline некоторые, всегда будут использовать его, в то время как другие будут использовать его, если пользователь выбрал «сохранить ссылку как», но не если он выбрал «сохранить» во время просмотра (или, по крайней мере, раньше IE был таким, возможно, изменился несколько лет назад).

Медиа тип (так же известный как Multipurpose Internet Mail Extensions или MIME тип) является стандартом, который описывает природу и формат документа, файла или набора байтов. Он определён и стандартизирован в спецификации RFC 6838 .

Организация Internet Assigned Numbers Authority (IANA) является ответственной за все официально признанные MIME типы, и вы можете найти самый последний и полный лист MIME типов на их странице Медиа Типов.

Важно: Для принятия решения о том, как обрабатывать URL, браузеры используют MIME типы, а не расширения файлов, так что серверам необходимо отправлять правильные MIME типы в Content-Type заголовке ответа. При неточном задавании этого заголовка, браузеры с большой вероятностью будут неправильно интерпретировать и обрабатывать содержание файлов, из-за чего сайт будет работать неверно.

Структура MIME типа

Простейший MIME тип состоит из типа и подтипа — двух строк разделённых наклонной чертой ( / ), без использования пробелов.

Тип представляет общую категорию, в которой находится тип данных, например video или text . Подтип же строго отождествляется с отдельным типом данных, представляемых данным MIME типом. Например, для MIME типа text , подтипы могут быть plain (простой текст), html (HTML source code) или calendar (для iCalendar/ . ics ).

Необязательный параметр может быть добавлен для указания дополнительных деталей

Например, для MIME типов категории text , необязательный параметр charset может быть задан для уточнения кодировки, используемой в документе. Для объявления, что пересылаемый файл имеет кодировку UTF-8, необходимо использовать MIME тип text/plain;charset=UTF-8 . При не указании параметра charset , его значение автоматически будет задано, как ASCII ( US - ASCII ), если в настройках браузера не будет определено иначе.

MIME типы являются нечувствительными к регистру, но традиционно их пишут строчными буквами, за исключением значений параметров.

Дискретные типы

application Список IANA Любой вид бинарных данных, явно не попадающих ни в одну другу группу типов. Данные, которые будут выполняться или как-либо интерпретироваться, или данные для выполнения, которых необходимо отдельное приложение. Для указания базового типа бинарных данных (данных без определённого типа) используют тип application/octet-stream . Другие распространённые примеры включают application/pdf , application/pkcs8 и application/zip . audio Список IANA Аудио или музыкальные данные. Примеры: audio/mpeg , audio/vorbis . example Тип, зарезервированный для написания примеров, отображающих использование MIME типов. Этот тип никогда не должен использоваться вне примеров кода или документации. example может так же использоваться, как подтип. font Список IANA Данные шрифтов. Распространённые примеры включают font / woff , font / ttf и font / otf . image Список IANA Изображения или графические данные, включая векторную и растровую графику, а так же анимированные версии форматов неподвижных изображений, таких как GIF или APNG. Распространённые примеры включают image/ jpeg , image / png и image / svg + xml . model Список IANA Данные моделей для 3D объектов или сцен. Примеры: model/3mf и model/vml . text Список IANA Любые текстовые данные, так или иначе доступные для чтения человеку, а так же исходный код или текстовые данные для программ. Примеры: text / plain , text / csv и text / html . video Список IANA Видео данные или файлы. Например, MP4 фильмы ( video / mp 4 ).

Любые текстовые документы без определённого подтипа стоит отправлять, как text/plain тип. Аналогичным образом, application/octet-stream тип подойдёт бинарным документам при неопределённом или неизвестном подтипе.

Многокомпонентные типы

Существуют два многокомпонентных типа:

Важные для Web-разработчиков MIME типы

application/octet-stream

Этот тип является базовым для бинарных данных. В связи с тем, что он подразумевает неопределённые бинарные данные, браузеры, как правило, не будут пытаться его обработать каком-либо образом, а вызовут для него диалоговое окно «Сохранить Как», как если бы заголовок ответа Content-Disposition имел значение attachment .

text/plain

Этот тип является базовым для текстовых файлов. Несмотря на то, что он означает "неопределённые текстовые данные", браузеры всё равно могут его отображать.

Заметьте: text/plain не означает "любой вид текстовых данных". Если браузер ожидает получения какого-то конкретного типа текстовых данных, то с большой вероятностью он не будет считать text/plain подходящим типом. Например, при загрузке text/plain документа через <link> элемент, браузер не будет его признать правильным CSS файлом и использовать для применения стилей. Только text/css тип должен использоваться для загрузки CSS документов.

text/css

CSS документы, используемые для стилизации web-страниц должны отправляться, как text/css тип. Большинство браузеров не смогут распознавать CSS документы, загруженные с отличным от text/css MIME типом.

text/html

Все HTML данные должны пересылаться с данным типом. Альтернативные MIME типы для XHTML (например, application/xhtml+xml ) почти не используются в настоящее время.

Заметьте: Используйте application/xml или application/xhtml+xml , когда вам необходим строгий синтаксический анализ документов, разделы <![CDATA[…]]> или элементы, не принадлежащие к пространствам имён HTML/SVG/MathML.

text/javascript

Согласно HTML спецификации: при пересылке JavaScript файлов, всегда должен использоваться MIME тип text/javascript .

По исторически сложившимся причинам, MIME Sniffing Standard (стандарт, определяющий, как браузеры должны интерпретировать медиа типы и выяснять, как обрабатывать данные при неправильно заданных медиа типах) позволяет серверам отправлять JavaScript документы, используя один из нижеперечисленных типов:

  • application/javascript
  • application/ecmascript
  • application/x-ecmascript
  • application/x-javascript
  • text/javascript
  • text/ecmascript
  • text/javascript1.0
  • text/javascript1.1
  • text/javascript1.2
  • text/javascript1.3
  • text/javascript1.4
  • text/javascript1.5
  • text/jscript
  • text/livescript
  • text/x-ecmascript
  • text/x-javascript

Заметьте: Несмотря на то, что некоторые user agent могут поддерживать какие-то из вышеперечисленных типов, вы всегда должны использовать text / javascript . Это единственный MIME тип, который гарантированно будет работать в настоящее время и в будущем.

Иногда вы можете заметить использование text/javascript MIME типа в связке с параметром charset , для уточнения кодировки, в которой был написан файл. Такое определение MIME типа является неправильным, и в большинстве случаев браузеры не станут загружать скрипт, передаваемый с таким типом.

Типы изображений

Файлы, MIME типом которых является image , содержат в себе данные изображений. Подтип определяет, какой конкретный формат изображения представлен в данных.

Лишь несколько типов изображений достаточно распространены, чтобы безопасно использоваться на веб-страницах.

Аудио и видео типы

Так же как в случае с изображениями, стандарт HTML не обязывает браузеры поддерживать какие-либо определённые форматы и кодеки для <audio> и <video> элементов, так что при их выборе, важно брать в расчёт целевую аудиторию и диапазон браузеров (а так же версии этих браузеров), которые она может использовать.

Наше руководство по медиа форматам предоставляет список общепринятых типов, включая информацию об особых случаях при их использовании, их недостатках, совместимости, а так же других деталях.

Руководства по аудио и видео кодекам перечисляют часто поддерживаемые браузерами кодеки, предоставляя детали по их совместимости и техническую информацию, например как много аудио каналов они поддерживают, какой тип сжатия используют, и так далее. Руководство по используемым в WebRTC кодекам развивает эту тему ещё дальше, конкретно описывая кодеки, поддерживаемые популярными браузерами, так чтобы вы могли выбрать кодеки, которые имеют наилучшую поддержку в диапазоне браузеров по вашему выбору.

Что касается MIME типов для аудио и видео файлов, то чаще всего они указывают на формат контейнера (тип файла). Необязательный параметр codecs может быть добавлен к MIME типу для более точного указания, какой кодек и параметры использовались для пересылаемого файла.

Ниже перечислены наиболее часто используемые на веб-страницах MIME типы. Обратите внимание, что это не полный перечень всех доступных типов. Более полный список поддерживаемых форматов может быть наеден в руководстве по медиа форматам.

MIME тип Аудио или видео тип
audio/wave
audio/wav
audio/x-wav
audio/x-pn-wav
Аудио файл WAVE формата. С PCM аудио кодеком (WAVE кодек "1"), считающимся наиболее поддерживаемым, а так же другими, имеющими ограниченную поддержку.
audio/webm Аудио файл формата WebM. С Vorbis и Opus официально поддерживаемыми WebM спецификацией аудио кодеками.
video/webm Видео файл, с возможной аудио дорожкой, формата WebM. С VP8 и VP9, как наиболее распространёнными видео кодеками; Vorbis и Opus, как наиболее распространёнными аудио кодеками.
audio/ogg Аудио файл формата OGG. С Vorbis, как наиболее распространённым аудио кодеком. Хотя на данный момент имеется поддержка и Opus кодека.
video/ogg Видео файл, с возможной аудио дорожкой, в формате OGG. Где Theora – наиболее часто встречающийся видео кодек и Vorbis - наиболее часто встречающийся аудио кодек. Хотя использование кодека Opus становится всё более распространённым.
application/ogg Аудио или видео формата OGG. Где Theora – наиболее часто встречающийся видео кодек и Vorbis - наиболее часто встречающийся аудио кодек.

multipart/form-data

multipart/form-data тип может быть использован при отправке значений из заполненной HTML Формы на сервер.

Следующая форма <form> :

multipart/byteranges

multipart/byteranges MIME тип используется для отправки данных в браузер по частям.

При отправке кода состояния 206 Partial Content , этот MIME тип будет означать, что документ состоит из нескольких частей, по одной для каждого отдельно запрашиваемого диапазона. Аналогично с остальными многокомпонентными типами, заголовок Content-Type используется для объявления границы boundary , разделяющей документ на отдельные компоненты. Каждый компонент имеет заголовок Content-Type , описывающий тип сегмента данных, и Content-Range (en-US), описывающий его диапазон.

Важность задания правильного MIME типа

Большинство серверов отправляет ресурсы неопределённого типа, как application/octet-stream MIME тип. Большинство же браузеров, в целях безопасности, не позволяет их никак обрабатывать, вынуждая пользователя сохранять их на жёсткий диск, для дальнейшего использования.

Несколько советов по правильной настройке MIME типов на серверах:

  • RAR-сжатые файлы. В этом случае самым правильным вариантом было бы задать тип изначального ресурса; но это не всегда выполнимо, так как .RAR файлы могут хранить в себе несколько типов данных. Тогда, настройте сервер на отправку application/x-rar-compressed MIME типа вместе с RAR ресурсами.
  • Аудио и видео. Только ресурсы с правильно заданными MIME типами могут производиться в <video> и <audio> элементах. Убедитесь, что вы используете правильные типы для аудио и видео данных.
  • Запатентованные типы файлов. Избегайте использования application/octet-stream при их отправке, так как большинство браузеров не позволит определять способы обработки (например, "Открыть в Word") для этого базового MIME типа. Используйте специальные типы, например application/vnd.mspowerpoint , чтобы позволить пользователям открывать загруженный ресурс в программе по их выбору.

MIME sniffing

В отсутствии заданного MIME типа, или в определённых случаях, когда браузеры полагают, что MIME тип задан неправильно, они могут выполнять MIME sniffing — попытку угадать правильный MIME тип, анализируя характеристики ресурса.

Каждый браузер выполняет MIME sniffing по-своему и при разных условиях (например, Safari будет смотреть на расширение файла, если переданный MIME тип является неподходящим для документа). В этих случаях могут присутствовать опасения по поводу безопасности, так как некоторые MIME типы представляют исполняемые файлы. Сервера имеют возможность предотвращать MIME sniffing, отправляя X-Content-Type-Options заголовок ответа.

Этот тип используется для данных, неподпадающих под остальные категории, в частности, для данных, обрабатываемых прикладными почтовыми программами. Это информация, которая должна быть обработана соответствующим приложением для того, чтобы принять наглядную либо исполняемую для получателя форму. Предполагаемое использование для этого типа включает в себя пересылку файлов по почте, таблицы, данные для почтовых систем расписания, языки лдя "активной" (вычислительной) почты.

Например, тот, кто занимается расписанием встреч, может определить стандартное представление информации о датах запланированных встреч. "Умный" пользовательский почтовый агент может использовать эту информацию для проведения диалога с пользователем, и может затем посылать в дальнейшем почту, основанную на том диалоге. Вообще, существует несколько "активных" почтовых языков, разработанных для специализированных программ, которые посылаются по почте и автоматчески запускаются в системе получателя.

Подобные приложения могут быть определены как подтипы для типа "application". Изначально предопределено два подтипа: "octet-stream" и "PostScript".

В общем, подтип для 'application' зачастую может быть именем приложения, для которого предназначены пересылаемые данные. Однако, это не означает, что любое имя прикладной программы может свободно использоваться как подтип для 'application'. Такие употребления (кроме подтипов, начинающихся с "x-") должны быть зарегестрированы в IANA.

Основной подтип 'Application/Octet-Stream'

Используется для обозначения того, что тело содержит бинарные данные. Набор возможных параметров включает следующие (но не ограничивается ими):

TYPE -- обобщенный тип или категория двоичных данных, эта информация больше предназначена для получателя, чем для автоматической обработки.

PADDING -- число заполняющих битов, добавленных к битовому потоку, содержащему данные, для формирования байтно-ориентированных данных. Полезно при заключении в тело битового потока, когда общее число битов не кратно восьми, то есть, размеру байта.

Дополнительный параметр, "conversions", определенный в [RFC-1341], был исключен в последствии.

В RFC 1341 также определен параметр "NAME", указывающего имя файла, которое должно быть использовано при сохранении данных на диск. Но он опять же был отменен в ожидании введения отдельного поля заголовка Content-Disposition, которое будет определено в ближайшем будущем.

Рекомендуемое действие для почтовой программы, получившей почту типа application/octet-stream, - просто предложить записать данные в файл без какого-либо преобразования, или. возможно, произвести его в соответствии с указанием пользователя.

Для уменьшения опасности передачи вирусных и других намеренно разрушающих систему программ по почте, строго рекомендуется, чтобы почтовая программа получателя не производила запуск программы, заданной в параметре поля "Content-Type" (например, в параметре "interpreter="), использующей в качестве входных данных тело письма.

Подтип 'Application/PostScript'

Тип "application/postscript" означает, что пересылается PostScript-документ и требует специальной программы для его обработки. В настоящий момент используются два языка - level 1 и более поздний - level 2.

PostScript-документы представляют собой интерпретируемые программы, которые могут содержать операторы обращения к диску и действий с файлами. Поэтому PostScript-документы представляют потенциальную опасность для системы получателя.

В некоторых интерпретаторах PostScript могут иметь место ошибки, которые могут быть использованы хакерами для несанкционированного доступа к системе получателя, и нельзя предложить какого-либо специфического действия для предотвращения подобной возможности, кроме исправления со временем подобных ошибок (если они, конечно, есть) производителями соответствующего ПО.

Другие подтипы типа Application

Ожидается, что многие подтипы типа 'Application' будут введены в будущем. MIME-совместимые почтовые программы должны интерпретировать любой незнакомый им подтип как эквивалент 'application/octet-stream'.

Формальный синтаксис дла поля 'content-type' для данных типа 'application' дается следующим образом.

Вы можете комбинировать использование с другими типами контента, такими как или даже , чтобы указать, что вы хотите сохранить, а не отображать. Раньше было так, что некоторые браузеры игнорировали бы его в случае , но я думаю, что это было довольно давно на этом месте (и я скоро буду спать, поэтому я не собираюсь начинать тестирование весь кучу браузеров прямо сейчас, может быть, позже).

RFC 2616 также упоминает о возможности токенов расширения, и в настоящее время большинство браузеров распознают , что означает, что вы хотите, чтобы объект отображался, если это возможно (то есть, если это тип, браузер знает, как отображать, в противном случае он нет выбора в этом вопросе). Это, конечно же, поведение по умолчанию в любом случае, но это означает, что вы можете включить часть заголовка, которые будут использовать браузеры (возможно, с некоторой настройкой, так что расширения файлов соответствуют локальным системным нормам для рассматриваемого типа контента, возможно, нет) в качестве предложения, если пользователь пытается сохранить.

означает «Я не знаю, что это, черт возьми, это. Сохраните его как файл, желательно с именем picture.jpg».

Значит «Это изображение PNG. Сохраните его как файл, желательно с именем picture.jpg».

Значит «Это изображение PNG. Пожалуйста, покажите его, если вы не знаете, как показывать изображения PNG. В противном случае, или если пользователь захочет сохранить его, мы рекомендуем имя picture.jpg для файла, который вы его сохранили как».

Из тех браузеров, которые распознают , некоторые из них всегда будут использовать его, а другие будут использовать его, если пользователь выбрал «сохранить ссылку как», но не если они выбрали «сохранить» во время просмотра (или, по крайней мере, IE использовали чтобы быть таким, возможно, это изменилось несколько лет назад).

Open MIME Application/Octet-Stream

В статье приведен пример формы и php скрипта для безопасной загрузки файлов на сервер, метод отправки файлов через AJAX, возможные ошибки и рекомендации при работе с данной темой.

Пример формы:

Форма отправит файл только методом POST и с атрибутом enctype="multipart/form-data".

Форма для загрузки сразу нескольких файлов:

Файл upload.php:

  • Поддерживает как одиночную загрузку файла так и множественную (multiple) без изменения кода.
  • Проверка на все возможные ошибки которые могут возникнуть при загрузке файлов.
  • Имена файлов переводятся в транслит и удаляются символы которые будут в дальнейшем мешать вывести их на сайте.
  • Есть возможность указать разрешенные и запрещенные для загрузки расширения файлов.

Загрузка файлов через AJAX

Как это работает:

  1. На поле выбора файла с повешено jquery событие change.
  2. При выборе файла срабатывает событие и выполняется метод плагина ajaxSubmit, он все поля из формы с включая выбранный файл отправляет на uploads.php.
  3. Далее то что отдаст uploads.php выведется в <div завершения, форма очищается методом reset() т.к. input file останется с выбранным файлом.

Возможные проблемы

  • На unix хостингах php функция move_uploaded_file() не будут перемещать файлы в директорию если у нее права меньше 777.
  • Загрузка файлов может быть отключена в настройках PHP директивой file_uploads.
  • Не загружаются файлы большого размера, причина в ограничениях хостинга.
    Посмотрите в phpinfo() значения директив:
    • upload_max_filesize – максимальный размер закачиваемого файла.
    • max_file_uploads – максимальное количество одновременно закачиваемых файлов.
    • post_max_size – максимально допустимый размер данных, отправляемых методом POST, его значение должно быть больше upload_max_filesize.
    • memory_limit – значение должно быть больше чем post_max_size.

    Нужен ли мне Content-Type: application / octet-stream для загрузки файла?

    Для работы с cURL, в PHP есть библиотека , при помощи которой можно скачивать файлы с удаленных серверов.

    Проще всего написать функцию и использовать ее для скачивания изображений, архивов и других файлов. Нам понадобится работающая библиотека и опция опция .

    Функция curl_download()

    Список MIME-типов

    Если Вам необходимо правильно отдавать файл для загрузки пользователю для всех современных браузеров, то данный пример поможет Вам в этом.

    1 Шаг.

    Для начала проверим размер файла:

    Например, её можно использовать так:

    2 Шаг.

    Итог. Если файл имеет размер, больший 0, то мы отдаем его для скачивания браузеру. При этом, любой файл будет отдаваться для загрузки, а не открываться в браузере, например видео или текстовый файл.

    Используя функцию получения размера файла, мы также получаем некоторые данные о файле, а именно:

    Получив данный массив, мы можем вывести пользователю дату изменения файла:

    Читайте также: