Подтвердить что ты не робот

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.

Это в голове:

<link rel="stylesheet" type="text/css" href="/assets/css/style.css.php" media="screen" />

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

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
4b9b3361

Ответ 1

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

X-Content-Type-Options: nosniff

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

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

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>

Ответ 6

Статья Обработка изображений /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 для его анализа.

Ответ 7

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

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

    <IfModule mod_rewrite.c
    
      RewriteEngine on
      RewriteBase /
    
      #serve CSS and JS from combine.php
      RewriteRule ^combine(.*) combine.php [NC,L]
    
    </IfModule>
    

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

Ответ 8

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

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.

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