php http-headers content-type internet-explorer-9

php - encabezado("Tipo de contenido: texto/css"); funciona en Firefox y Chrome, pero en Internet Explorer 9 aparece como ''texto/html''



http-headers content-type (8)

¿Hay alguna salida antes de que se envíe el encabezado? BOM en el archivo php? Un retorno de carro?

Si deshabilitó el informe de errores, es posible que no vea el error que se debe activar.

Intente agregar ob_start() en la parte superior, resolverá cualquier problema relacionado con los encabezados ya enviados antes de cualquier llamada de header() .

Si tiene una lista de materiales en su archivo UTF8, es posible que desee eliminarlo.

header("Content-type: text/css"); funciona en Firefox, Chrome y otros, pero no en Internet Explorer 9. No estoy seguro de lo que pasa.

En Chrome y Firework muestra la hoja de estilo si la abro en su propia pestaña y se aplica a la página.

En Chrome bajo Red, en las herramientas del desarrollador, dice que el tipo es text/css y el estado es 200.

En Internet Explorer 9, desea descargar la hoja de estilo si la abro en su propia pestaña y no se aplica a la página.

En las herramientas de desarrollo F12 puede hacer clic en la red, comenzar a capturar y actualizar la página. Muestra el Style.css.php . El tipo es text/html y el resultado es 406.

Esto está en la cabeza:

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

Encabezados de solicitud:

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*

Cabeceras de respuesta:

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


Creo que el problema puede deberse a mod_security que sirve una página de error 401 (HTML) en lugar de la CSS. Intente agregar esto a un archivo .htaccess en la raíz web de su sitio web para ver si esto resuelve el problema.

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


El artículo Manejar imágenes / CSS / JS como PHP sin httpd.conf El uso de .htaccess me ayudó a resolver el problema.

Básicamente, haces lo mismo que todos los demás mencionados (configuración del encabezado en PHP, etc.), pero también usas .htaccess para configurar el parámetro AddHandler.

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

De esta manera, puedes nombrarlo con .css y aún tener PHP analizarlo.


He encontrado que utilizando el header("Content-type: text/css", true); funciona para mi. Evita que el servidor genere 2 encabezados HTTP para ''Content-Type''.


IE tiene el interruptor " No, no estoy bromeando sobre el tipo de contenido ":

X-Content-Type-Options: nosniff

Por cierto: asegúrese de enviar también Last-Modified y deshabilitar session.cache_limiter en PHP, de lo contrario los navegadores seguirán recargando el archivo CSS, lo que tendrá un impacto negativo en el rendimiento.


Internet Explorer tiene un historial de confianza en la extensión de archivo sobre el tipo MIME informado por el navegador. Si tiene disponible mod_rewrite, haga que su HTML busque un archivo .css y luego cree una regla mod_rewrite que canalice esa URL a su script.


Para Internet Explorer 9 que sirve el código de estado HTTP 406 en el encabezado de respuesta para un archivo CSS generado dinámicamente, nosotros:

  1. Se eliminó el módulo mod_negiotiation de Apache o se agregaron múltiples vistas a la configuración del host (o .htaccess).
  2. Apache activado mod_rewrite
  3. Se agregó una regla de reescritura a la configuración del host virtual o htaccess:

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

Nota: esta solución solo es válida para servidores / hosts virtuales que no utilizan Multiviews, ya que al eliminar mod_negotiation se elimina también el uso de esta directiva.


Recientemente tuve un problema como este para mí también. Depuración desagradable es todo lo que puedo decir sobre esto. No estoy seguro de si esto podría ayudarles, pero espero que lo haga. Ir al grano.

Internet Explorer usa algo llamado "snimeing" de tipo Mime, que simplemente lee 200 bytes del encabezado de THE FILE.

Tenía un script PHP que tenía que devolver un archivo de video diferente (con datos, todo el archivo) dependiendo del parámetro que se había suministrado.

Ejemplo de mi solicitud de video: 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

Tiene que suspender su script inmediatamente después de enviar los datos del archivo. Esto evita que el IE Mime tipo sniffing.

Espero eso ayude.