[MS] Que es mi Content-Type!, que te lo digo en serio!

No conformes con las cosas horribles que le pasan a Windows Vista y su pronto reemplazo por Windows 7 (o Windows Seven plagues como algunos ya lo llaman; el vaticinio del fin del mundo); la fiebre de soluciones “Chaborras” e ilusas ahora viene de la mano de la gente de Internet Explorer 8.

Si; este es mi content-type; que te lo digo en serio!

Durante milenios los documentos han viajado de los servidores hasta el navegador de una manera más o menos igual; el documento declara un tipo de contenido (Content-Type + charset) y aun así; los navegadores son algo desconfiados y echan una “mirada” al documento; sin embargo, es renderizado “tal cual es” sin ningún inconveniente; esto ha sido el comportamiento “por defecto” de absolutamente todo el mundo menos la gente “desvergonzada” de Redmont.

Al parecer su manía de desconfiar de cualquier código que no sea generado por ellos mismos (y si es generado por ellos; más desconfían) los hace “tratar de interpretar” el contenido obviando “olímpicamente” la declaración de Content-Type y enviando el contenido a los distintos “parsers” de acuerdo a su contenido; esto podría sonar interesante cuando se trata por ejemplo de imágenes (donde por lo general nadie declara el type) pero si dentro de un bloque en vez de contenter text/xml colocamos código javascript; en vez de ser enviado a pantalla (como debería ser, es un código javascript declarado como texto; como si lo colocara dentro de un <PRE>) este es ejecutado; siendo la total maldición de los sitios web y de los ataques de “MIME-sniffing”.

Para algo que es una “aplicación” habiamos inventado una declaración “application/xhtml+xml" esta permite indicar que nuestra página es una aplicación XML que combina HTML y otros “lenguajes” como javascript”; pero antes de IE7 los navegadores microsoft asumían esa declaración como un “binario” e intentaban descargar la página; ¿Como lo solventaban los desarrolladores para IE?; colocando 2 declaraciones Content-Type; una haciendo referencia a application/xhtml+xml y otra para IE de text/html.

Observen este “burdo” ejemplo de como las “cosas” se pasan por alto dentro de la casa de Redmont:

Con un bloque como:

HTTP/1.1 200 OK
Content-Length: 108
Date: Thu, 26 Jun 2008 22:06:28 GMT
Content-Type: text/plain;

<html>
<body bgcolor=”#AA0000″>
This page renders as HTML in IE7/IE8.
</body>
</html>

Como vemos; el content Type es “text/plain”; eso significa que “DEBERIA!” renderizarse como texto; pero la presencia de etiquetas HTML hace que IE7 e IE8 “interpreten” el contenido y lo envíen a pantalla.

En medida de seguridad; esto significa que un bloque de texto, conteniendo código Javascript (Jscript de MS) o VBScript será ejecutado en vez de ser “renderizado como texto”.

La burda solución de IE8? … inventarse una “declaración HTTP” indicando de que “en verdad” hay que hacerle caso al servidor y asumir el content-type como cierto; Authoritative=true:

HTTP/1.1 200 OK
Content-Length: 108
Date: Thu, 26 Jun 2008 22:06:28 GMT
Content-Type: text/plain; authoritative=true;

<html>
<body bgcolor=”#AA0000″>
This page renders as HTML source code (text) in IE8.
</body>
</html>

Nos les parece estúpido?; no le hago caso al content-type declarado; pero si a una declaración autoritativa?; si puedo “falsificar” una declaración de “content-type” ahora puedo “OBLIGAR” al navegador a no “intentar” analizar el contenido y a confiar en mí; si antes podía meter droga en la casa escondida en una caja de pizza; ahora con solo decir “Si mamá; es pizza” ella no revisará la caja y pasaré tranquilo con lo que desee entrar.

La idea es simple; HTML 5 obliga a los navegadores a obtener los primeros 512 bytes del documento e intentar analizar (via la cabecera del documento) todo el contenido de la página e informar al usuario de cualquier posible “discordancia” con el contenido; cualquier contenido “mal declarado” deberá ser tratado como text/plain o text/html y no “ejecutado” como viene haciendo IE7 (de hecho; HTML5 OBLIGA al UA (navegador) a informar al usuario de que un “contenido” está intentando ejecutarse cuando no debería; lo cual viene haciendo Firefox y otros navegadores como Opera hace tiempo); pero en vez de seguir con la corriente; con Authoritative=true la gente de IE8 se estará ahorrando el tener que escribir toda esta “mega-implementación” de interpretación y errores de excepción y “pasar a confiar en el servidor” sin tratar de analizar nada.

Es decir; no solo quieren seguir con el jueguito de “todo lo que me llegue lo ejecuto”; sino que además; “si el server me dice que EN SERIO debo ejecutarlo; entonces más lo haré sin chistar!” …

Cada día da más escalofríos pensar que será de Windows 7 e Internet Explorer en un par de años …

Acerca de phenobarbital

http://about.me/phenobarbital

Publicado el 6 julio 2008 en Cultura Libre, Cultura Oldie, La soda y la pastilla, Otros lenguajes, PlanetaLinux, Programacion. Añade a favoritos el enlace permanente. Deja un comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: