Dave Ward dice:
No es exactamente una lectura ligera, pero la sección 4.2 del RFC 3986 proporciona URL totalmente calificadas que omiten el protocolo (HTTP o HTTPS) por completo. Cuando se omite el protocolo de una URL, el navegador utiliza en su lugar el protocolo del documento subyacente.
En pocas palabras, estas URL "sin protocolo" permiten que una referencia como esta funcione en cada navegador en el que lo probará:
//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js
Al principio parece extraño, pero esta URL "sin protocolo" es la mejor manera de hacer referencia al contenido de terceros que está disponible a través de HTTP y HTTPS.
Esto ciertamente resolvería un montón de errores de contenido mixto que estamos viendo en las páginas HTTP, suponiendo que nuestros activos estén disponibles a través de HTTP y HTTPS.
¿Es completamente compatible con todos los navegadores? ¿Hay alguna otra advertencia?
fuente
Respuestas:
Lo probé a fondo antes de publicar. De todos los navegadores disponibles para probar en Browsershots , solo pude encontrar uno que no manejara la URL relativa del protocolo correctamente: un oscuro navegador * nix llamado Dillo .
Hay dos inconvenientes sobre los que he recibido comentarios:
fuente
link
elemento. Por ejemplo, al especificar//fonts.googleapis.com/css?family=Rokkitt:400,700
, IE6 intenta cargarhttp://mysite.com/fonts.googleapis.com/css/<...>
. ¡No tan bien!La cuestión de si uno podría cambiar todos sus enlaces para que sean relativos al protocolo puede ser discutible, considerando la cuestión de si uno debería hacerlo. Según Paul Irish :
fuente
Si usa URL sin protocolo para cargar hojas de estilo, IE 7 y 8 las descargará dos veces: http://www.stevesouders.com/blog/2010/02/10/5a-missing-schema-double-download/
Por lo tanto, esto debe evitarse para CSS si le gusta el buen rendimiento.
fuente
Sí, las referencias de ruta de red ya se especificaron en RFC 1808 y deberían funcionar con todos los navegadores.
fuente
Solo para agregar esto a la mezcla, si está desarrollando en un servidor local, podría no funcionar. Debe especificar un esquema, de lo contrario, el navegador puede asumir que
src="//cdn.example.com/js_file.js"
es asísrc="file://cdn.example.com/js_file.js"
, lo que se romperá ya que no está alojando este recurso localmente.Microsoft Internet Explorer parece ser particularmente sensible a esto, vea esta pregunta: No se puede cargar jQuery en Internet Explorer en localhost (WAMP)
Probablemente siempre intente encontrar una solución que funcione en todos sus entornos con la menor cantidad de modificaciones necesarias.
La solución utilizada por HTML5Boilerplate es tener un respaldo cuando el recurso no se carga correctamente, pero eso solo funciona si incorpora una verificación:
Publiqué esta respuesta aquí también.
ACTUALIZACIÓN: HTML5Boilerplate ahora utiliza
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
después de decidir desaprobar las URL relativas del protocolo, consulte aquí .fuente
No he tenido estos problemas al utilizar: //dominio.com, pero debe agregar los dos puntos al principio. Yoast tuvo un buen artículo sobre esto hace un tiempo. Pero está perdido en su montón de publicaciones de blog.
fuente
Si desea asegurarse de que todas las solicitudes se actualizan al protocolo seguro entonces no hay opción simple de usar la política de contenidos de seguridad del encabezado de actualización-en situación de inseguridad solicitudes
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests
fuente