2009-12-24 14 views
7

Mis sitios se ejecutan en un subdominio (yyy.example.com), pero estoy obligado a incluir archivos CSS desde el dominio principal (example.com). Ejecutamos un CMS que no me permite hacer nada del lado del servidor durante la etapa de vista previa, así que estoy atascado enviando una página a través de https que incluye una importación de CSS a http. Todos mis usuarios de IE reciben una advertencia de contenido mixto debido a esto.¿Vincular a archivos CSS entre dominios sin advertencia de contenido mixto en IE?

¿Hay alguna forma de que el cliente pueda evitar esto, aparte de mantener configuraciones de seguridad separadas para el dominio en cada máquina cliente?

+0

Bienvenido a StackOverflow, Dan. – Sampson

+0

buena pregunta. Espero que alguien sepa como. –

+0

Gracias por la bienvenida Jonathan. –

Respuesta

9

Haz uso de las URL relativas al protocolo en los enlaces CSS.

Así por lo

<link rel="stylesheet" type="text/css" href="//example.com/style.css"> 

en lugar de

<link rel="stylesheet" type="text/css" href="http://example.com/style.css"> 

Se escogerá automáticamente el protocolo de la solicitud de los padres, que debería funcionar bien para HTTPS también.

+1

Wow. ¡Nunca había escuchado sobre esto antes! –

+0

Gracias BalusC. ¡Acabo de probar el método esta tarde y resolvió el problema! ¿Hay alguna razón para no hacer esto siempre? –

+0

Sí, cuando se adhiere a un solo protocolo :) – BalusC

3

Hasta donde yo sé, no hay forma de evitar esa advertencia. Está especialmente diseñado para este propósito: alertarlo sobre el hecho de que, aunque crea que su página está encriptada con SSL, parte de su contenido no lo está. Deberá servir la página original a través de HTTP (no recomendado) o servir el archivo CSS a través de HTTPS.

+0

Hacemos eso (servimos el archivo CSS sobre HTTPS). Simplemente cambie su cert a un comodín para permitir todos los subdominios. – seanmonstar

+0

Aunque eso resolvería el problema, el servicio de CSS y Javascript sobre HTTPS reduciría el tiempo de descarga, ya que HTTPS es un proceso más lento. Es especialmente difícil para las páginas que utilizan marcos que contienen muchos archivos pequeños. –

+2

Yo diría que la lentitud de HTTPS en comparación con HTTP es casi insignificante para los archivos samll. Además, el navegador guardará en caché los archivos js y css, por lo que solo sufrirá la penalización la primera vez. –

1

Cuando dice que no puede hacer cosas "del lado del servidor", ¿quiere decir que no puede tocar su CMS, o que no tiene acceso de raíz a su servidor HTTP?

Porque si tiene acceso a su servidor HTTP, puede configurar un muy simple reverse proxy (con mod_proxy si está usando Apache). Esto le permitiría usar rutas relativas en su HTML, mientras que el servidor HTTP actuaría como un proxy para cualquier ubicación "remota". De hecho, esta técnica también se puede usar para mitigar algunos problemas de scripts entre sitios.

La directiva de configuración fundamental para configurar un proxy inverso en mod_proxy es ProxyPass. Lo más habitual es utilizar la siguiente manera:

ProxyPass  /css/  http://example.com/css_dir/ 

En este caso, el navegador sería solicitar https://yyy.example.com/css/main.css pero el servidor serviría esta actuando como un proxy para http://example.com/css_dir/main.css. No aumentará la advertencia del navegador, y funciona bien con SSL.

+0

Esta es una buena idea, pero el CMS es una caja cerrada en lo que a mí respecta, así que no puedo hacer ninguna reescritura. –

Cuestiones relacionadas