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 

    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 с вашим скриптом.

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

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

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

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

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

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

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

    Статья Handle Images / 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, мы:

    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 также позволяет использовать эту директиву.

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

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

    У меня был 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 

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

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