Pregunta sobre iis-7, content-encoding, css, content-type, asp.net – Tipo de contenido IIS incorrecto para CSS comprimido

3

Desarrollé parte de un sitio ASP.NET que usa en su mayoría temas, pero tiene un par de archivos CSS en la carpeta de temas. Estos están incluidos en el web.config por otro desarrollador así:

<code><Content Include="App_Themes\SoftOrange\CMSStyles.css" />
<Content Include="App_Themes\SoftOrange\ContentStyles.css" />
</code>

En nuestro servidor de prueba interno (IIS7, Server 2008 R2 Enterprise) están activadas las opciones del administrador de IIS global para la compresión estática y dinámica, para archivos de más de 2700 bytes. La compresión estática y dinámica específica del sitio también están habilitadas.

En algún momento (probablemente cuando CMSStyles.css llegó a 2700 bytes) se rellenaron algunos estilos, por ejemplo. Obviamente no se estaban cargando mirando la página. Descubrí que el tipo de contenido (de acuerdo con firefox 7.0.1) mostraba texto / css, y cuando cargué la URL de CMSStyles.css parecía un archivo basura comprimido normal en un editor de texto:

‹�����
IE no abre directamente el archivo css, pero cuando uso las herramientas del desarrollador para mostrar el css, aparece vacío.

Apagué la compresión de contenido estático solo para este sitio, y los archivos CSS ahora se cargan correctamente. Mi pregunta es ¿por qué? ¿Es un problema de tipo de contenido, codificación de contenido o es un problema de IIS o un problema con la forma en que se usa el CSS en la aplicación web?

Gracias.

EDITAR:

Estos son los encabezados de la solicitud GET para CMSStyles.css: Cabeceras de respuesta

Accept-Ranges  bytes
Content-Encoding    gzip
Content-Length  1728
Content-Type    text/css
Date    Fri, 13 Apr 2012 01:22:43 GMT
Etag    "80a762a82cecd1:0"
Last-Modified   Fri, 30 Mar 2012 04:22:03 GMT
Persistent-Auth true
Server  Microsoft-IIS/7.5
Vary    Accept-Encoding
X-Powered-By    ASP.NET

Solicitud de encabezados

Accept text/css,*/*;q=0.1
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language en-gb,en;q=0.5
Connection  keep-alive
Cookie  -removed-
Host    -removed-
Referer -removed-
User-Agent  Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

así que parece que la codificación del contenido es correcta: gzip.

Gracias, no sabía que podías hacer eso en el Panel de Red. He actualizado mi publicación con encabezados. thinkOfaNumber
Use una herramienta como Firebug (o las herramientas integradas de Chrome) para ver los encabezados HTTP y puede encontrar la respuesta. Tim Medora

Tu respuesta

1   la respuesta
1

Content-Length.

Compruebe si configura elContent-Length En cualquier parte de su código, elimínelo y volverá a funcionar. Porqué es eso ? porque si pones elContent-Length en el encabezado, el IIS no puede cambiarlo al comprimido, y la descompresión del gzip falla. ¿Por qué IIS no puede cambiarlo? porque, de forma predeterminada, si configura un encabezado en IIS, este encabezado permanece y no se puede cambiar (especialmente si lo vacía antes). Hay una marca que permite que IIS la cambie después de configurarlo, pero es mejor evitarlo.

Preguntas similares:El sitio ASP.NET a veces se congela y / o muestra texto impar en la parte superior de la página mientras se carga, en servidores con carga equilibrada

Actualizar

Del @thinkOfaNumber: ResultaEstaba usando la compresión devexpress así como la compresión IIS. ¡Apagué la compresión de devexpress en web.config y funciona!

Lo que se muestra aquí es que la primera compresión establece elContent-Length y la segunda compresión no lo cambia porqueContent-Length la escritura en el encabezado y el encabezado no pueden cambiar * después de haberlo configurado, por lo que la segunda compresión cambia el lado comprimido final con el resultado de que el navegador no puede leerlo correctamente y luego no lo descomprime correctamente.

[*] Hay una forma de cambiar los encabezados después de enviarlos en IIS y antes de enviarlos al navegador, y esto se puede hacer cambiando el comportamiento predeterminado de IIS, pero no es tan fácil y no sé si puede resolver este problema

@thinkOfaNumber Es mejor que acepte esto porque en realidad digo que el problema es la doble compresión y el hecho de no cambiar la longitud del contenido. Así que he actualizado mi pregunta con sus datos. Aristos
Su última "suposición" fue correcta: resulta que estaba usando la compresión devexpress y la compresión IIS. ¡Apagué la compresión de devexpress en web.config y funciona! ¿Debo hacer mi propia respuesta para esto o marcar la tuya? thinkOfaNumber
@thinkOfaNumber Puede obtener una longitud diferente porque el gzip es una compresión dinámica y tal vez este cambio. La idea es no establecerlo de manera programática dentro de su código. Aristos
@thinkOfaNumber tal vez algún módulo lo haya configurado, o tal vez haya una doble compresión de alguna manera ... desde dos módulos diferentes. Aristos

Preguntas relacionadas