Сразу хочу уточнить одну маленькую вещь. Страшное слово протокол есть не что иное, как соглашение множества людей, просто в один прекрасный момент люди решили: «Давайте будем делать так, и тогда все будет в порядке». Бояться нечего, все просто до безобразия и это безобразие мы сейчас будем вскрывать. Итак, что же это такое протокол HTTP и с чем его едят?
1.1 Клиент и сервер
Чудес в мире, а тем более в мире программизма и интернета не бывает! Усвойте это как незыблемую истину. И, если программа не работает или работает не так как хочется, то, значит, скорее всего, она либо написана не правильно, либо содержит ошибки. Итак, как же все-таки браузер просит сервер прислать ему хоть что-нибудь? Да очень просто! Надо только немного расслабиться и начать получать удовольствие от процесса
1.2. Пишем наш первый HTTP запрос
Если Вы думаете, что все слишком сложно, то Вы ошибаетесь. Человек так устроен, что просто не способен создавать что-то сложное, иначе он сам в этом запутается Итак, есть браузер и есть Web-сервер. Инициатором обмена данными всегда выступает браузер. Web-сервер никому, никогда просто так ничего не пошлет, чтобы он что-нибудь отправил браузеру — надо, чтобы браузер об этом попросил. Простейший HTTP запрос моет выглядеть, например, так:
Is it possible to decode ‘octet stream’ .bin file?
GET http://www.php.net/ HTTP/1.0rnrn
* GET (В переводе с английского означает «получить») — тип запроса, тип запроса может быть разным, например POST, HEAD, PUT, DELETE (часть из них мы рассмотрим ниже).
* http://www.php.net/ — URI (адрес) от которого мы хотим получить хоть какую-нибудь информацию (естественно мы надеемся подучить HTML страницу).
* HTTP/1.0 — тип и версия протокола, который мы будем использовать в процессе общения с сервером.
* rn — конец строки, который необходимо повторить два раза, зачем, станет понятно немного позднее.
Вы можете выполнить данный запрос очень просто. Запустите программу telnet.exe, введите в качестве хоста www.php.net, укажите порт 80, и просто наберите данный запрос, нажав два раза Enter в качестве rnrn. В ответ вы получите HTML код главной страницы сайта www.php.net.
1.3 Структура запроса
Рассмотрим, из чего состоит HTTP запрос. Все достаточно просто. Начнем с того, что HTTP запрос — это вполне осмысленный текст. Из чего же он состоит в общем случае? Будем рассматривать протокол HTTP 1.0. Итак:
Request-Line [ General-Header | Request-Header | Entity-Header ]rn[ Entity-Body ]
* Request-Line — строка запроса
*
Формат: «Method Request-URI HTTP-Versionrn»
* Method — метод, которым будет обрабатываться ресурс Request-URI, может быть GET, POST, PUT, DELETE или HEAD.
* Request-URI — относительная или абсолютная ссылка на страницу с набором параметров, например, /index.html или http://www.myhost.ru/index.html или /index.html?a=1 — амперсант служит разделителем между параметрами.
* HTTP-Version — версия HTTP протокола, в нашем случае «HTTP/1.0».
NodeJS : make an HTTP request with an application/octet-stream content type — node js
Нам крайне интересны методы обработки GET и POST. Методом GET можно просто передать параметры в скрипт, а методом POST можно эмулировать submit формы.
Для метода GET, Request-URI может выглядеть, например, так: «/index.html?param1=1.
* General-Header — главная часть заголовка.
Формат: [Date: valuen | Pragma: no-cachen]
Может иметь только два параметра: Date или Pragma. Date — дата по Гринвичу в формате «День недели, Число Месяц Год ЧЧ:ММ:СС GMT», например, «Tue, 15 Nov 1994 08:12:31 GMT» — дата создания запроса. Pragma может иметь одно значение no-cache, которое запрещает кэширование страницы.
* Request-Header — часть заголовка, описывающая запрос.
Request-Header может иметь следующие параметры: Allow, Authorization, From, If-Modified-Since, Referer, User-Agent.
В данной главе мы не будем рассматривать параметр Autorization, так как он используется для доступа к закрытым ресурсам, что требуется не так уж часто. Вы можете самостоятельно изучить формирование заголовка для авторизованного доступа на сайте www.w3c.org.
* Allow — задает допустимые методы обработки.
Формат: «Allow: GET | HEADn».
Параметр игнорируется при указании метода обработки POST в Request-Line. Задает допустимые методы обработки запроса. Прокси сервера не модифицируют параметр Allow и он в неизменном виде доходит до сервера.
* If-Modified-Since — указывает, что запрос не модифицировался с такого-то времени.
Формат: «If-Modified-Since: datern»
Используется только для метода обработки GET. Дата указывается по Гринвичу в таком же формате, как и для параметра Date в General-Header.
* Referrer — абсолютная ссылка на страницу, с которой произошла инициация запроса, т. е. ссылка на страницу, с которой пользователь перешел на нашу.
Формат: «Referrer: urln».
Пример: «Referrer: www.host.ru/index.htmln».
* User-Agent — тип браузера.
Например: «User-Agent: Mozilla/4.0n»
* Entity-Header — часть заголовка, описывающая данные Entity-Body.
В данной части запроса задаются параметры, которые описывают тело страницы. Entity-Header может содержать следующие параметры: Allow, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.
* Allow — параметр аналогичный Allow из General-Header.
* Content-Encoding — тип кодирования данных Entity-Body.
Формат: «Сontent-Encoding: x-gzip | x-compress | другой типn».
Пример: «Сontent-Encoding: x-gzipn». Символ «|» означает слово «или», то есть то или то или то и.т.д.
Другой тип может указывать на способ кодирования данных, например, для метода POST: «Сontent-Encoding: application/x-www-form-urlencodedn».
* Content-Length — количество байт, пересылаемых в Entity-Body. Значение Content-Length имеет совсем другой смысл для данных, пересылаемых в формате MIME, где он выступает как параметр описания части данных — «external/entity-body». Допустимыми являются целые числа от нуля и больше.
Пример: «Content-Length: 26457n».
* Content-Type — тип передаваемых данных.
Например: «Content-Type: text/htmln».
* Expires — Время, когда страница должна быть удалена из кэша браузера.
Формат: «Expires: daten». Формат даты алогичен формату даты для параметра Date из General-Header.
* Last-Modified — время последнего изменения пересылаемых данных.
Формат: «Last-Modified: daten». Формат даты алогичен формату даты для параметра Date из General-Header.
* Extention-header — часть заголовка, которая может предназначаться, например, для обработки браузером, или другой программой, которая принимает документ. В данной части можно описывать свои параметры в формате «ParameterName: parametervaluen». Данные параметры будут игнорироваться, если программа-клиент не знает, как их обработать.
Например: «Cookie: r=1rn» — устанавливает всем известные печеньки для страницы.
А теперь после таких страшных слов давайте попробуем немного успокоиться и понять, что же нам надо? Понимать мы естественно будем на примерах.
Давайте представим, что нам надо получить страницу с сайта, передав Cookies (Печеньки), иначе нас просто пошлют как незванных гостей, и более того, известно, что на данную страницу пускают только после того, как Вы побывали на главной странице сайта.
Напишем наш запрос.
GET http://www.site.ru/news.html HTTP/1.0rn Host: www.site.rurn Referer: http://www.site.ru/index.htmlrn Cookie: income=1rn rn
Открытие OCTET STREAM файлов
У вас есть проблема с открытием .OCTET STREAM-файлов? Мы собираем информацию о файловых форматах и можем рассказать для чего нужны файлы OCTET STREAM. Дополнительно мы рекомендуем программы, которые больше всего подходят для открытия или конвертирования таких файлов.
Для чего нужен файловый формат .OCTET STREAM?
Каждый день тысячи пользователей присылают нам информацию о программах, которыми они пользуются для открытия различных файловых форматов.
В данный момент в нашей базе данных нет описания файлового типа OCTET STREAM, но мы можем порекомендовать некоторые программы, которые могут открыть эти файлы. Просмотрите список программного обеспечения, который рекомендуют другие пользователи для работы с данным форматом.
Так как мы добавляем описания файловых типов каждый день, информация о OCTET STREAM может появиться на нашем сайте в ближайшем будущем.
Источник: www.filetypeadvisor.com
Application octet stream что это
У меня странная проблема: когда я пытаюсь загрузить разные файлы, некоторые из них распознаются правильно, а некоторые нет и устанавливаются как application/octet-stream когда вы проверяете их тип $_FILES[‘file_1’][‘type’]
Я связался с моей хостинговой компанией, они сказали мне, что это не ошибка на их стороне и что это может быть связано с CloudFlare, но у меня никогда не было такой проблемы раньше.
Я знаю, что RAR имеет application/octet-stream как один из возможных типов пантомимы, но не PHP или PSD.
Это типы для PSD:
У кого-нибудь есть идея, почему он это делает? Я пробовал это в IE, FireFox, Chrome и Opera. Бывает во всех этих браузерах.
Есть ли лучший способ проверки типов? Поскольку те, которые я проверяю, отправляются браузером, который может быть подделан (я также проверяю расширения для большей безопасности). Я знаю, что есть способ сделать это с помощью Java, но я хотел бы использовать PHP и делать это на стороне сервера.
Решение
Вы должны проверить тип MIME на стороне сервера с finfo_file или же finfo_buffer .
Internet Media Types [1] — типы данных, которые могут быть переданы посредством сети интернет с применением стандарта MIME. Ниже приведён список MIME-заголовков и расширений файлов.
Общие типы [ править | править код ]
Согласно RFC 2045, RFC 2046, RFC 4288, RFC 4289 и RFC 4855 [2] выделяются следующие базовые типы передаваемых данных:
Внутренний формат прикладной программы
- application/atom+xml : Atom
- application/EDI-X12 : EDIX12 (RFC 1767)
- application/EDIFACT : EDIEDIFACT (RFC 1767)
- application/json : JavaScript Object Notation JSON (RFC 4627)
- application/javascript : JavaScript (RFC 4329)
- application/octet-stream : двоичный файл без указания формата (RFC 2046) [3]
- application/ogg : Ogg (RFC 5334)
- application/pdf : Portable Document Format, PDF (RFC 3778)
- application/postscript : PostScript (RFC 2046)
- application/soap+xml : SOAP (RFC 3902)
- application/font-woff : Web Open Font Format[4]
- application/xhtml+xml : XHTML (RFC 3236)
- application/xml-dtd : DTD (RFC 3023)
- application/xop+xml :XOP
- application/zip : ZIP[5]
- application/gzip : Gzip
- application/x-bittorrent : BitTorrent
- application/x-tex : TeX
- application/xml : XML
- application/msword : DOC
audio [ править | править код ]
- audio/basic : mulaw аудио, 8 кГц, 1 канал (RFC 2046)
- audio/L24 : 24bit Linear PCM аудио, 8-48 кГц, 1-N каналов (RFC 3190)
- audio/mp4 : MP4
- audio/aac : AAC
- audio/mpeg : MP3 или др. MPEG (RFC 3003)
- audio/ogg : OggVorbis, Speex, Flac или др. аудио (RFC 5334)
- audio/vorbis : Vorbis (RFC 5215)
- audio/x-ms-wma : Windows Media Audio[6]
- audio/x-ms-wax : Windows Media Audio перенаправление
- audio/vnd.rn-realaudio : RealAudio[7]
- audio/vnd.wave : WAV(RFC 2361)
- audio/webm : WebM
image [ править | править код ]
message [ править | править код ]
model [ править | править код ]
- model/example : (RFC 4735)
- model/iges : IGS файлы, IGES файлы (RFC 2077)
- model/mesh : MSH файлы, MESH файлы (RFC 2077), SILO файлы
- model/vrml : WRL файлы, VRML файлы (RFC 2077)
- model/x3d+binary : X3DISO стандарт для 3D компьютерной графики, X3DB файлы
- model/x3d+vrml : X3DISO стандарт для 3D компьютерной графики, X3DV VRML файлы
- model/x3d+xml : X3DISO стандарт для 3D компьютерной графики, X3D XML файлы
multipart [ править | править код ]
- multipart/mixed : MIMEE-mail (RFC 2045 и RFC 2046)
- multipart/alternative : MIMEE-mail (RFC 2045 и RFC 2046)
- multipart/related : MIMEE-mail (RFC 2387 и используемое MHTML (HTML mail))
- multipart/form-data : MIMEWebform (RFC 2388)
- multipart/signed : (RFC 1847)
- multipart/encrypted : (RFC 1847)
text [ править | править код ]
- text/cmd : команды
- text/css : Cascading Style Sheets (RFC 2318)
- text/csv : CSV (RFC 4180)
- text/html : HTML (RFC 2854)
- text/javascript (Obsolete): JavaScript (RFC 4329)
- text/plain : текстовые данные (RFC 2046 и RFC 3676)
- text/php : Скрипт языка PHP
- text/xml : Extensible Markup Language (RFC 3023)
- text/markdown : файл языка разметки Markdown (RFC 7763)
- text/cache-manifest : файл манифеста(RFC 2046)
video [ править | править код ]
vnd [ править | править код ]
x [ править | править код ]
- application/x-www-form-urlencoded Form Encoded Data [18]
- application/x-dvi : DVI
- application/x-latex : LaTeX файлы
- application/x-font-ttf : TrueType (не зарегистрированный MIME-тип, но наиболее часто используемый)
- application/x-shockwave-flash : Adobe Flash[19] и [20]
- application/x-stuffit : StuffIt
- application/x-rar-compressed : RAR
- application/x-tar : Tarball
- text/x-jquery-tmpl : jQuery
- application/x-javascript :
x-pkcs [ править | править код ]
- application/x-pkcs12 : p12 файлы
- application/x-pkcs12 : pfx файлы
- application/x-pkcs7-certificates : p7b файлы
- application/x-pkcs7-certificates : spc файлы
- application/x-pkcs7-certreqresp : p7r файлы
- application/x-pkcs7-mime : p7c файлы
- application/x-pkcs7-mime : p7m файлы
- application/x-pkcs7-signature : p7s файлы
Этот тип используется для данных, неподпадающих под остальные категории, в частности, для данных, обрабатываемых прикладными почтовыми программами. Это информация, которая должна быть обработана соответствующим приложением для того, чтобы принять наглядную либо исполняемую для получателя форму. Предполагаемое использование для этого типа включает в себя пересылку файлов по почте, таблицы, данные для почтовых систем расписания, языки лдя «активной» (вычислительной) почты.
Например, тот, кто занимается расписанием встреч, может определить стандартное представление информации о датах запланированных встреч. «Умный» пользовательский почтовый агент может использовать эту информацию для проведения диалога с пользователем, и может затем посылать в дальнейшем почту, основанную на том диалоге. Вообще, существует несколько «активных» почтовых языков, разработанных для специализированных программ, которые посылаются по почте и автоматчески запускаются в системе получателя.
Подобные приложения могут быть определены как подтипы для типа «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’ дается следующим образом.
Источник: planshet-info.ru