заголовок («Content-type: text / css»);работает в Firefox и Chrome, но в Internet Explorer 9 он отображается как «text / html» - PullRequest
31 голосов
/ 24 марта 2011

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

Ответы [ 8 ]

41 голосов
/ 31 марта 2011

IE имеет " Нет, я не шучу по поводу переключателя Content-Type ":

X-Content-Type-Options: nosniff

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

16 голосов
/ 26 марта 2011

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

11 голосов
/ 30 марта 2011

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

4 голосов
/ 01 апреля 2011

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

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

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

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

0 голосов
/ 13 октября 2015

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

Internet Explorer использует что-то, называемое сниффинг Mime-типа, который просто читает 200 байтов заголовка ФАЙЛА.

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

Пример моего видео запроса: 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

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

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

0 голосов
/ 03 июня 2011

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

  1. удалили модуль mod_negiotiation Apache или добавили -Multiviews кконфигурация хоста (или .htaccess).
  2. Активированный Apache mod_rewrite
  3. Добавлено правило перезаписи в конфигурацию виртуального хоста или 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 также исключает использование этой директивы.

0 голосов
/ 18 апреля 2011

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

0 голосов
/ 02 апреля 2011

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

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