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
Ответы
Ответ 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.
Надеюсь, что это поможет.