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.

Это в голове:

Заголовки запросов:

Key Value
Request GET /assets/css/main.css HTTP/1.1
Accept text/css
Referer http://10.0.1.5/
Accept-Language en-US
User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding gzip, deflate
Host 10.0.1.5
Connection Keep-Alive
Cookie PHPSESSID=*Hidden*

Заголовки ответов:

Key Value
Response HTTP/1.1 406 Not Acceptable
Date Fri, 01 Apr 2011 10:12:42 GMT
Server Apache/2.2.14 (Ubuntu)
Alternates {"main.css.php" 1 {type application/x-httpd-php}}
Vary negotiate
TCN list
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type text/html; charset=iso-8859-1
8 ответов

IE имеет "Нет, я не шучу о типе Content-Type":

X-Content-Type-Options: nosniff

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


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


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


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

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

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

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


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

Internet Explorer использует что-то, называемое Mime-type sniffing, которое просто читает 200 байтов заголовка FILE.

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

Пример моего видео-запроса: get-video.php? id = here_goes_the_id

$file = ''; // Get the video file path
if (is_file($file)) {
 header("Content-Type: video/mp4");
 header("Content-Length: " . filesize($file));
 readfile($file);
}
exit(); // This is the turnaround

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

Надеюсь, что это поможет.


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

<ifmodule mod_security.c="">
 SecFilterEngine Off
 SecFilterScanPOST Off
</ifmodule>


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

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

<files my_style.css="">
 ForceType application/x-httpd-php
 AddHandler application/x-httpd-php .css
</files>

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


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

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

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

licensed under cc by-sa 3.0 with attribution.