Php 标题(“内容类型:文本/css”);在Firefox和Chrome中工作,但在InternetExplorer9中显示为';text/html';

Php 标题(“内容类型:文本/css”);在Firefox和Chrome中工作,但在InternetExplorer9中显示为';text/html';,php,http-headers,content-type,internet-explorer-9,Php,Http Headers,Content Type,Internet Explorer 9,标题(“内容类型:text/css”)适用于Firefox、Chrome和其他浏览器,但不适用于InternetExplorer9。我不知道发生了什么事 在Chrome和Firework中,如果我在自己的选项卡中打开样式表并将其应用于页面,它将显示样式表 在开发者工具中网络下的Chrome中,它表示类型为text/css,状态为200 在InternetExplorer9中,如果我在其自己的选项卡中打开样式表,而样式表未应用于页面,则它希望下载样式表 在F12开发者工具中,您可以单击网络,开始捕

标题(“内容类型:text/css”)
适用于Firefox、Chrome和其他浏览器,但不适用于InternetExplorer9。我不知道发生了什么事

在Chrome和Firework中,如果我在自己的选项卡中打开样式表并将其应用于页面,它将显示样式表

在开发者工具中网络下的Chrome中,它表示类型为
text/css
,状态为200

在InternetExplorer9中,如果我在其自己的选项卡中打开样式表,而样式表未应用于页面,则它希望下载样式表

在F12开发者工具中,您可以单击网络,开始捕获并刷新页面。它显示
Style.css.php
。类型为
text/html
,结果为406

这是在头部:

<link rel="stylesheet" type="text/css" href="/assets/css/style.css.php" media="screen" />
响应标题:

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

Internet Explorer具有信任浏览器报告的MIME类型而不是文件扩展名的历史记录。如果您有mod_rewrite可用,请让您的HTML查找.css文件,然后创建一个mod_rewrite规则,将该URL传输到您的脚本。

我发现使用
标题(“内容类型:text/css”,true)适合我。它防止服务器为“内容类型”输出2个HTTP头。

IE具有“”开关:


顺便说一句:确保您也发送上次修改的
并禁用
会话。在PHP中缓存
,否则浏览器将继续重新加载CSS文件,这将对性能产生负面影响。

在发送标头之前是否有任何输出?php文件中的BOM?马车回程

如果禁用了错误报告,则可能看不到它应该触发的错误

尝试在顶部添加
ob\u start()
,它将解决与任何
header()
调用之前已发送的头相关的任何问题


如果您的UTF8文件中有一个BOM表,您可能想删除它。

我认为问题可能是由于
mod\u security
提供401错误页(HTML)而不是CSS。尝试将其添加到网站的web根目录中的
.htaccess
文件中,以查看这是否解决了问题

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

分离过滤器发动机关闭
secfilters可以关闭
这篇文章帮助我解决了这个问题

<IfModule mod_security.c>
    SecFilterEngine Off
    SecFilterScanPOST Off
</IfModule>
基本上,您所做的工作与前面提到的其他人一样(在PHP中设置header等),但也可以使用
.htaccess
来设置AddHandler参数

<Files my_style.css>
    ForceType application/x-httpd-php
    AddHandler application/x-httpd-php .css
</Files>

ForceType应用程序/x-httpd-php
AddHandler应用程序/x-httpd-php.css

通过这种方式,您可以使用.css命名它,并且仍然让PHP解析它。

对于在响应头中为动态生成的css文件提供HTTP 406状态代码的InternetExplorer9,我们:

  • 删除了Apache mod_negiotiation模块或在主机配置(或.htaccess)中添加了多视图
  • 激活Apache mod_重写
  • 向虚拟主机配置或htaccess添加了重写规则:

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

    最近我自己也遇到了这样的问题。关于这件事,我只能说是糟糕的调试。我不确定这是否能帮助你们,但我希望能。开门见山

    Internet Explorer使用一种叫做Mime类型嗅探的方法,它只读取200字节的文件头

    我有一个PHP脚本,它必须根据提供的参数返回不同的视频文件(数据-整个文件)

    我的视频请求示例:get video.php?id=here\u goes\u 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类型嗅探


    希望有帮助。

    你说的“不起作用”是什么意思?问题是什么?它没有正确加载它,好像IE中根本没有加载css文件。如果我转到该文件,它希望下载它,而不是像Chrome和Firefox那样显示它。你是否尝试不发送标题?:)是 啊css文件是一个php文件,因为我检查了您想要的工具栏颜色的帐户设置。您是否尝试过[Ctrl]+[F5](强制重新加载)?
    标题(“内容类型:text/css”);标题(“X-Content-Type-Options:nosniff”)
    标题(“内容类型:text/css;X-Content-Type-Options:nosniff;”)不起作用。我应用的对吗?session.cache\u limiter也设置为nocache。所以我只需要输入off?@Keverw:不要在一个
    header()调用中放入两个头
    session.cache\u limiter
    必须是
    none
    (但这是性能问题,不应阻止MIME类型工作)。使用Fiddler2或类似工具查看服务器实际发送的头。我添加了IE在问题中为您看到的头。这就是答案吗?此线程上似乎没有任何内容表明“答案”
    header()
    的第二个参数默认为
    true
    。@Marcel但出于某种原因,它对我有效<代码>PHP 7.2.7-0ubuntu0.18.04.2(cli)
    +1;然而,不仅仅是IE倾向于盲目信任MIME类型的文件扩展名(这应该是完全没有意义的!)。他们都是这样做的,我也做了一些服务器端检查,看看它是否是ie9,然后将它重定向到特定的文件,只是因为它很抱歉。还应该注意的是,当使用ForceType时,IE会使用任何设置,并忽略您在PHP页面中放置的任何内容。这就是为什么会出现406错误。这就是为什么我必须将文件命名为.css,这样IE会很高兴。
    $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