Bazaprogram.ru

Новости из мира ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Content type css

Системное программное обеспечение

7.1 Что такое MIME?

MIME означает «Multipurpose Internet Mail Extensions» (Многоцелевые расширения почтового стандарта Internet). Этот стандарт описывает, как пересылать по электронной почте исполняемые, графические, мультимедийные, смешанные данные. Типичные применения MIME — пересылка графических изображений, аудио, документов Word, программ и даже просто текстовых файлов, то есть, когда важно, чтобы входе пересылки не производилось никаких преобразований над данными. MIME также позволяет размечать письмо на части различных типов так, чтобы получатель (почтовая программа) мог определить, что делать с каждой из частей письма.

Хотя формат первоначально создан для электронной почты, он также используется для службы WWW.

7.2 Для чего это нужно?

Так как файлы могут быть разными (.gif, .doc, .pdf . ), браузер должен понимать, что с ними делать. Эту проблему решает стандарт «MIME — типы». Он сообщает клиенту, какой тип файлов получен, например:
Content-type: image/gif (графика GIF)
Content-type: image/jpeg (графика JPG)

7.3 Как это работает?

Браузеры используют MIME-типы в своих HTTP-заголовках Accept для того, чтобы сообщить, в каких форматах они предпочитают принимать данные (если сервер может выдать файл в разных форматах). Серверы используют MIME-типы в HTTP-заголовках Content-Type, чтобы сообщить клиенту о том, в каком формате передается прилагаемое содержимое: то ли это HTML, который нужно форматировать, то ли это GIF или JPEG, требующий визуализации, то ли это данные в формате PDF, для которого нужно открывать внешнюю программу просмотра или использовать дополнительное приложение.

Формат MIME-типа — тип/подтип. Можно использовать символ *; например, следующий заголовок клиента означает, что принимаются документы во всех форматах:

Следующий заголовок клиента означает, что принимаются все типы формата text независимо от подтипа:

Серверы должны проверять данные о принимаемых типах, содержащиеся в заголовке Accept, и по возможности выдавать данные соответствующего типа. Большинство серверов определяют формат документа по расширению имени файла. Например, файлы с расширениями .htm и .html — это файлы в формате HTML, поэтому сервер посылает такой документ с типом text/html в заголовке Content-Type, пример:

Действия клиента при получении файла:

При получении клиентом файла, анализируется HTTP заголовок, если в нем находится Content-Type, то клиент производит действие с файлом, учитывая эту информацию.

Если записи нет, то клиент использует свой список MIME-типов, в котором тип определяется по расширению имени файла.

Если тип в файле не найден, то клиент не знает что делать с этим файлом. Браузер в таком случае предлагает вам выбрать сами программу, которой надо передать файл.

7.4 Некоторые основные типы и подтипы MIME.

Первый стандарт — RFC1341 MIME (Multipurpose Internet Mail Extensions): Mechanisms for Specifying and Describing the Format of Internet Message Bodies N. Borenstein, N. Freed June 1992

Последняя версия (состоит из четырех частей) :

RFC2049 (Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples N. Freed, N. Borenstein November 1996)

RFC2048 (Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures N. Freed, J. Klensin, J. Postel November 1996)

RFC2047 (MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text K. Moore November 1996)

RFC2046 (Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types N. Freed, N. Borenstein November 1996)

RFC2045 (Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies N. Freed, N. Borenstein November 1996)

Text – текстовые типы.

Тип ‘text’ предназначен для пересылки текстовых материалов. Для обозначения языковой кодировки текста используется параметр «charset» для некоторых подтипов, включая подтип, «text/html», соответствующий простому (неформатированному) тексту.

Content-Type: text/html; charset=windows-1251

Основные подтипы:
Content-Type: text/html — html текст.
Content-Type: text/plain — простой текст.
Content-Type: text/x-server-parsed-html — файл созданный с помощью SSI
Content-Type: text/css — файл содержащий стили — css

Multipart — данные состоят из несколько частей разных типов.

Основные подтипы:
Content-Type: multipart/mixed — несколько частей разных типов (используется в e-mail)
Content-Type: multipart/alternative — одна из частей (используется в e-mail)
Content-Type: multipart/x-mixed-replace — после загрузки следующая часть заменяет предыдущею (используется в анимации)

Message — инкапсулированное почтовое сообщение (используется в e-mail)

Image — графические типы.

Основные подтипы:
Content-Type: image/gif — изображение gif.
Content-Type: image/jpeg — изображение jpeg.
Content-Type: image/tiff — изображение tiff.
Content-Type: image/bmp — изображение bmp

Audio — звуковые типы.

Основные подтипы:
Content-Type: audio/wav — звук в формате wav.
Content-Type: audio/midi — звук в формате midi
Content-Type: audio/mpeg — звук в формате mp3.
Content-Type: audio/vqf — звук в формате vqf
Content-Type: audio/x-pn-realaudio — звук в формате ram rm
Content-Type: audio/x-realaudio — звук в формате ra
Content-Type: audio/x-wav — звук в формате wav

Читать еще:  Delphi shellexecute параметры

Основные подтипы:
Content-Type: video/avi — видео в формате avi.
Content-Type: video/mpeg — видео в формате mpeg.

Application — представляет данные какого-нибудь приложения.

application/msword – приняв такое сообщение, браузер запустит MS Word для открытия этих данных. Если в системе нет MS Word, то браузер попросит сохранить данные в файле имя файла может находиться в параметре name. Например:

Content-Type: application/msword; name=”Mydoc.doc”

Основные подтипы:
Content-Type: application/msword — программа MS Word
Content-Type: application/pdf — программа Acrobat Reader
Content-Type: application/rtf — программа MS Word
Content-Type: application/zip — разархиватор ZIP-архивов

7.5 Серверные приложения.

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

Для этого нужно чтобы клиенты могли запускать или работать с приложениями на сервере.

7.5.1 Методы использования серверных приложений.

Запуск через CGI-шлюз. Эти приложения могут быть написаны на любых языках.
Преимущества:
— используются обычные программы (в случае Windows .bat, .exe и тд.)
— стандартизовано
Недостатки:
— при каждом вызове программы происходит ее запуск, что не есть быстро, и при большом количестве запросов, появляется много запущенных программ.

Приложения, встроенные в сервер HTTP, как модули. Как правило, написанные на С.
Преимущества:
— быстрота (т.к. всегда работает, не нужен запуск).
Недостатки:
— необходимость писать модуль для конкретного сервера HTTP.

Приложения, работающие через модули-шлюзы встроенные в сервер HTTP.
Преимущества:
— шлюз написан для конкретного приложения (например, для СУБД MySQL)
Недостатки:
— необходимость писать модул-шлюз для конкретного приложения.

Приложения, написанные на скриптовых языках (SSI, PERL, PHP, ASP и др.), для выполнения которых должны быть встроенные интерпретаторы, как модули сервера HTTP. Код этих приложений встраивается непосредственно в HTML страницы. Сервер распознает эти страницы по расширению (.php, .asp, .shtml, .pl).
Преимущества:
— быстрота (выше чем у CGI, но ниже чем у модуля, т.к. интерпретаторы).
— удобно использовать
Недостатки:
— ограниченность возможностей

Приложения, работающие через Java Servlet.
Преимущества:
— платформо-независимость
— серверо-независимость
Недостатки:
— приложения на Java работаю медленнее

Приложения, написанные на Java и встроенные в HTML страницы (с расширением .JSP (JavaServer Pages)). В принципе это аналог скриптовых языков работающих через модуль (в место модуля в данном случае Java Servlet, а язык Java)
Преимущества:
— платформо-независимость
— серверо-независимость
— удобно использовать
Недостатки:
— приложения на Java работаю медленнее

7.5.2 Архитектура WWW сервера с учетом серверных приложений

Архитектура современного WWW сервера. На выходе с сервера всегда HTML, но сгенерированный приложением.

7.5.3 Примеры запросов к приложениям

В результате через CGI шлюз

Будет запущено приложение search.cgi

и будет передан запрос «text=сотрудники» приложению search.cgi

Приложение search.cgi вернет результат работы CGI-шлюзу

Будет передан запрос «text=сотрудники» интерпретатору PHP.

Интерпретатор будет выполнять команды search.php.

Интерпретатор вернет результат работы WWW-серверу.

Common Gateway Interface — стандарт для обмена данными между сервером и прикладной программой, которая запускается из-под сервера.

7.6.1 Механизмы обмена данными

Механизм можно разделить на четыре части:

7.6.1.1 Переменные окружения

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

SERVER_NAME — определяет доменное имя сервера.

GATEWAY_INTERFACE — определяет версию протокола CGI.

SERVER_PROTOCOL — протокол сервера.

SERVER_SOFTWARE — версия сервера.

SERVER_PORT — определяет порт, по которому осуществляется взаимодействие.

REQUEST_METHOD — определяет метод, значения GET, POST, HEAD и т. п.

PATH_INFO — передает программе путь с переменными, часть URL переданный клиентом (т.е. относительный путь с переменными).

PATH_TRANSLATED — абсолютный путь, путь расположения программы на диске сервера.
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
PATH_INFO = «/cgi-bin/search?text=ipm»
PATH_TRANSLATED = «/usr/local/etc/httpd/cgi-bin/search».

SCRIPT_NAME — относительный путь без переменных.
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
PATH_INFO = «/cgi-bin/search?text=ipm»
SCRIPT_NAME = «/cgi-bin/search»

QUERY_STRING — переменная определяет содержание запроса к скрипту (все что после ?).
Пример для запроса http://ipm.kstu.ru/cgi-bin/search?text=ipm:
QUERY_STRING ——-> «text=ipm»

Идентификация пользователя и его машины:

REMOTE_HOST — доменный адрес машины клиента.

REMOTE_ADDR — IP-адрес машины клиента.

AUTH_TYPE — тип идентификации пользователя.

REMOTE_USER — используется для идентификации пользователя.

REMOTE_IDENT — данная переменная порождается сервером, если он поддерживает идентификацию пользователя по протоколу RFC-931. Рекомендовано использование этой переменной для первоначального использования скрипта.

Тип и длина передаваемой информации от клиента к серверу.

CONTENT_TYPE — определяет MIME-тип данных.

CONTENT_LENGTH — определяет размер данных в байтах.

Переменные заголовка HTTP.

HTTP_ACCEPT — поле ACCEPT.

HTTP_USER_AGENT — поле USER-AGENT.

Читать еще:  Свойство transparent css

HTTP_HOST — поле HOST.

7.6.1.2 Командная строка

Командная строка используется только при запросах типа ISIN-DEX.

mime_content_type

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

mime_content_type — Определяет MIME-тип содержимого файла

Описание

Возвращает MIME-тип содержимого файла, используя для определения информацию из файла magic.mime .

Список параметров

Путь к проверяемому файлу.

Возвращаемые значения

Возвращает тип содержимого в формате MIME, например text/plain или application/octet-stream, или FALSE в случае возникновения ошибки.

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примеры

Пример #1 Пример mime_content_type()

Результат выполнения данного примера:

Смотрите также

User Contributed Notes 21 notes

Fast generation of uptodate mime types:

function generateUpToDateMimeArray ( $url ) <
$s =array();
foreach(@ explode ( «n» ,@ file_get_contents ( $url ))as $x )
if(isset( $x [ 0 ])&& $x [ 0 ]!== ‘#’ && preg_match_all ( ‘#([^s]+)#’ , $x , $out )&&isset( $out [ 1 ])&&( $c = count ( $out [ 1 ]))> 1 )
for( $i = 1 ; $i $c ; $i ++)
$s []= ‘ » . $out [ 1 ][ $i ]. » => » . $out [ 1 ][ 0 ]. »’ ;
return @ sort ( $s )? ‘$mime_types = array(
‘ . implode ( $s , ‘,
‘ ). ‘
);’ : false ;
>

echo
generateUpToDateMimeArray ( APACHE_MIME_TYPES_URL );
?>

Output:
$mime_types = array(
‘123’ => ‘application/vnd.lotus-1-2-3’,
‘3dml’ => ‘text/vnd.in3d.3dml’,
‘3g2’ => ‘video/3gpp2’,
‘3gp’ => ‘video/3gpp’,
‘7z’ => ‘application/x-7z-compressed’,
‘aab’ => ‘application/x-authorware-bin’,
‘aac’ => ‘audio/x-aac’,
‘aam’ => ‘application/x-authorware-map’,
‘aas’ => ‘application/x-authorware-seg’,
.

There is a composer package that will do this:
https://github.com/ralouphie/mimey

= new Mimey MimeTypes ;

// Convert extension to MIME type:
$mimes -> getMimeType ( ‘json’ ); // application/json

// Convert MIME type to extension:
$mimes -> getExtension ( ‘application/json’ ); // json

Regarding serkanyersen’s example : It is advisable to change the regular expression to something more precise like

This makes sure that only the last few characters are taken. The original expression would not work if the filename is a relative path.

Lukas V is IMO missing some point. The MIME type of a file may not be corresponding to the file suffix.

Imagine someone would obfuscate some PHP code in a .gif file, the file suffix would be ‘GIF’ but the MIME would be text/plain or even text/html.

Another example is files fetched via a distant server (wget / fopen / file / fsockopen. ). The server can issue an error, i.e. 404 Not Found, wich again is text/html, whatever you save the file to (download_archive.rar).

His provided function should begin by the test of the function existancy like :

function MIMEalternative($file)
<
if(function_exists(‘mime_content_type’))
return mime_content_type($file);
else
return ($file);
>

using
function detectFileMimeType ( $filename = » )
<
$filename = escapeshellcmd ( $filename );
$command = «file -b —mime-type -m /usr/share/misc/magic < $filename >» ;

$mimeType = shell_exec ( $command );

return trim ( $mimeType );
>
?>
should work on most shared linux hosts without errors. It should also work on Windows hosts with msysgit installed.

if(! function_exists ( ‘mime_content_type’ )) <

function mime_content_type ( $filename ) <

‘txt’ => ‘text/plain’ ,
‘htm’ => ‘text/html’ ,
‘html’ => ‘text/html’ ,
‘php’ => ‘text/html’ ,
‘css’ => ‘text/css’ ,
‘js’ => ‘application/javascript’ ,
‘json’ => ‘application/json’ ,
‘xml’ => ‘application/xml’ ,
‘swf’ => ‘application/x-shockwave-flash’ ,
‘flv’ => ‘video/x-flv’ ,

// images
‘png’ => ‘image/png’ ,
‘jpe’ => ‘image/jpeg’ ,
‘jpeg’ => ‘image/jpeg’ ,
‘jpg’ => ‘image/jpeg’ ,
‘gif’ => ‘image/gif’ ,
‘bmp’ => ‘image/bmp’ ,
‘ico’ => ‘image/vnd.microsoft.icon’ ,
‘tiff’ => ‘image/tiff’ ,
‘tif’ => ‘image/tiff’ ,
‘svg’ => ‘image/svg+xml’ ,
‘svgz’ => ‘image/svg+xml’ ,

// archives
‘zip’ => ‘application/zip’ ,
‘rar’ => ‘application/x-rar-compressed’ ,
‘exe’ => ‘application/x-msdownload’ ,
‘msi’ => ‘application/x-msdownload’ ,
‘cab’ => ‘application/vnd.ms-cab-compressed’ ,

// audio/video
‘mp3’ => ‘audio/mpeg’ ,
‘qt’ => ‘video/quicktime’ ,
‘mov’ => ‘video/quicktime’ ,

// adobe
‘pdf’ => ‘application/pdf’ ,
‘psd’ => ‘image/vnd.adobe.photoshop’ ,
‘ai’ => ‘application/postscript’ ,
‘eps’ => ‘application/postscript’ ,
‘ps’ => ‘application/postscript’ ,

// ms office
‘doc’ => ‘application/msword’ ,
‘rtf’ => ‘application/rtf’ ,
‘xls’ => ‘application/vnd.ms-excel’ ,
‘ppt’ => ‘application/vnd.ms-powerpoint’ ,

// open office
‘odt’ => ‘application/vnd.oasis.opendocument.text’ ,
‘ods’ => ‘application/vnd.oasis.opendocument.spreadsheet’ ,
);

$ext = strtolower ( array_pop ( explode ( ‘.’ , $filename )));
if ( array_key_exists ( $ext , $mime_types )) <
return $mime_types [ $ext ];
>
elseif ( function_exists ( ‘finfo_open’ )) <
$finfo = finfo_open ( FILEINFO_MIME );
$mimetype = finfo_file ( $finfo , $filename );
finfo_close ( $finfo );
return $mimetype ;
>
else <
return ‘application/octet-stream’ ;
>
>
>
?>

For me mime_content_type didn’t work in Linux before I added

to php.ini (remember to find the correct path to mime.magic)

Here’s a simple function to return MIME types, based on the Apache mime.types file. [The one in my previous submission, which has since been replaced by this one] only works properly if mime.types is formatted as Windows text. The updated version below corrects this problem. Thanks to Mike for pointing this out.

function get_mime_type ( $filename , $mimePath = ‘../etc’ ) <
$fileext = substr ( strrchr ( $filename , ‘.’ ), 1 );
if (empty( $fileext )) return ( false );
$regex = «/^([w+-./]+)s+(w+s)*( $fileext s)/i» ;
$lines = file ( » $mimePath /mime.types» );
foreach( $lines as $line ) <
if ( substr ( $line , 0 , 1 ) == ‘#’ ) continue; // skip comments
$line = rtrim ( $line ) . » » ;
if (! preg_match ( $regex , $line , $matches )) continue; // no match to the extension
return ( $matches [ 1 ]);
>
return ( false ); // no match at all
>
?>

Читать еще:  Отступ между абзацами css

Notes:
[1] Requires mime.types file distributed with Apache (normally found at ServerRoot/conf/mime.types). If you are using shared hosting, download the file with the Apache distro and then upload it to a directory on your web server that php has access to.

[2] First param is the filename (required). Second parameter is path to mime.types file (optional; defaults to home/etc/).

[3] Based on MIME types registered with IANA (http://www.iana.org/assignments/media-types/index.html). Recognizes 630 extensions associated with 498 MIME types.

[4] Asserts MIME type based on filename extension. Does not examine the actual file; the file does not even have to exist.

header («Content-type: text / css»); работает в Firefox и Chrome, но в Internet Explorer 9 он отображается как «text / html»,

header(«Content-type: text/css»); работает в Firefox, Chrome и других, но не в Internet Explorer 9. Я не уверен, что случилось.

В Chrome и Firework отображается таблица стилей, если я открываю ее на своей вкладке и она применяется к странице.

В Chrome под сетью в инструментах разработчика говорится, что тип – text/css а статус – 200.

В Internet Explorer 9 он хочет загрузить таблицу стилей, если я открою ее на своей вкладке и не будет применен к этой странице.

В инструментах разработчика F12 вы можете щелкнуть по сети, начать захватывать и обновлять страницу. Он показывает Style.css.php . Тип text/html и результат 406.

IE имеет « Нет, я не шучу по поводу типа Content-Type »:

BTW: убедитесь, что вы также отправили Last-Modified и отключили session.cache_limiter в PHP, в противном случае браузеры будут продолжать перезагружать файл CSS, что негативно скажется на производительности.

Internet Explorer имеет историю доверия к расширению файла по типу MIME, о котором сообщает браузер. Если у вас есть доступ к mod_rewrite, попробуйте HTML-файл .css, а затем создайте правило mod_rewrite, которое связывает этот URL с вашим скриптом.

Я обнаружил, что использование header(«Content-type: text/css», true); работает на меня. Он не позволяет серверу выводить 2 заголовка HTTP для «Content-Type».

Есть ли выход до отправки заголовка? Спецификация в файле php? Возвращение кареты?

Если вы отключили отчет об ошибках, вы можете не увидеть ошибку, которую он должен вызвать.

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

Если у вас есть спецификация в файле UTF8, вы можете удалить ее.

Я думаю, проблема может быть связана с mod_security которая служит для страницы ошибки 401 (HTML), а не для CSS. Попробуйте добавить это в файл .htaccess в корневом каталоге вашего веб-сайта, чтобы узнать, устраняет ли это проблему.

Статья Handle Images / CSS / JS как PHP без httpd.conf Использование .htaccess помогло мне разобраться в проблеме.

В основном вы делаете все те же вещи, что и все остальные (настройка заголовка на PHP и т. Д.), Но также используйте .htaccess для установки параметра AddHandler.

Таким образом, вы можете назвать его с помощью .css и все еще иметь PHP, анализируя его.

Для Internet Explorer 9, обслуживающего код статуса HTTP 406 в заголовке ответа для динамически созданного файла CSS, мы:

  1. Удален модуль mod_negiotiation Apache или добавлен -Multiviews в конфигурацию хоста (или .htaccess).
  2. Активированный Apache mod_rewrite

Добавлено правило перезаписи для конфигурации виртуального хоста или htaccess:

Примечание. Это решение подходит только для серверов / виртуальных хостов, не использующих Multiviews, поскольку удаление mod_negotiation также позволяет использовать эту директиву.

Недавно у меня тоже была такая проблема. Отвратительная отладка – все, что я могу сказать об этом. Не уверен, что это может помочь вам людям, но я надеюсь, что так оно и будет. В погоню.

Internet Explorer использует что-то вроде нюхания типа Mime, которое просто читает 200 байтов заголовка FILE.

У меня был PHP-скрипт, который должен был возвращать разные видеофайлы (с данными – весь файл) в зависимости от параметра, которому он был поставлен.

Пример моего видео-запроса: get-v >

Вы должны приостановить свой скрипт сразу же после отправки данных файла. Это предотвращает обнюхивание типа IE Mime.

Ссылка на основную публикацию
Adblock
detector