2010-07-08 19 views
11

He visto algunos sitios que usan //somedomain.com/images/img.jpg vs usando http://somedomain.com/images/img.jpg que incluye el http: también.¿Cuál es la diferencia entre usar "http: //" y simplemente "//" en src o href?

¿Hay alguna diferencia entre los dos? ¿El navegador está corrigiendo el http: que falta y estas personas son flojas? Estoy curioso detrás del razonamiento.

+1

Cuando dices que has "visto sitios", ¿dónde los has visto? ¿Está impreso o el nombre del enlace en un sitio web? –

+0

me refiero a ver su código fuente. no en un artículo impreso ni nada de eso. – chadley

Respuesta

11

Si ya está en el sitio a través de http, asumirá que está hablando de http y se conectará al mismo servidor a través del mismo protocolo. Lo mismo con https. Si está en http y desea ir al https, deberá especificar el protocolo en el href.

+0

entonces esto se usaría en sitios que pueden verse en 'http' o' https' – chadley

+3

@chadley: la intención es menos para uso local, sino más bien uso remoto. Si 'superanalytics.com' ofrece tanto HTTP como HTTPS, podría pedirte que incluyas su script de análisis con el URI' // superanalytics.com/analytics.js'.De esta forma, si está ejecutando HTTP, SuperAnalytics también lo hará. Si está ejecutando HTTPS, SuperAnalytics también lo hará. Y luego no te vuelves tan desagradable "¡Este es un sitio seguro con cosas inseguras!" advertencias – Matchu

+0

gracias por aclarar matchu. eso tiene mucho sentido ahora que ha señalado un ejemplo. – chadley

-1

Nunca he visto //somedomain.com/images/img.jpg y no creo que sea legal.

He visto /images/img.jpg que significa "utilizar el dominio actual". Es útil si tiene varias direcciones web (por ejemplo, aaaaa.com & aaaaa.net) que apuntan al mismo sitio.

+1

Es legal de hecho. –

7

No es que lo haya visto antes, pero es una referencia de URI válida. A partir de la gramática:

URI-reference = URI | relative-ref 

relative-ref = relative-part [ "?" query ] [ "#" fragment ] 

relative-part = "//" authority path-abempty 
      | path-absolute 
      | path-noscheme 
      | path-empty 

donde como una URI absoluta es:

URI   = scheme ":" hier-part [ "?" query ] [ "#" fragment ] 

Para obtener más información, no dude en leer el resto de RFC3986

+0

+1. ¡Es excelente! ¡Lo usaré ahora en todas partes! (Al menos para los enlaces a los archivos en el servidor que aloja contenido estático). –

+0

Tenga en cuenta que esto significa que no hay ninguna razón para usar dos barras diagonales en la práctica, solo una contará como una ruta absoluta. – Chuck

+0

Creo que esta respuesta pasa por alto. Es válido, pero también funcional. Ver la respuesta de @ rakuo15. – Matchu

2

//somedomain.com/images/img.jpg es una sintaxis URI perfectamente válido según RFC 3986: Section 4.2.

Es relativo a la corriente scheme, y por lo tanto puede ser muy útil al cambiar entre http y https, porque no será necesario especificar el esquema.

Todos los navegadores modernos entenderán ese formato, incluyendo IE 6.

3

Esquema relativo de URL son particularmente útiles cuando se está sirviendo una página web HTTPS y que le gustaría compartir el mismo contenido estático como hojas de estilo, imágenes, scripts y demás desde un sitio HTTP. Hardcoding http: en los enlaces de contenido estático como <link href>, <script src>, <img src> y así sucesivamente y la visualización de la página web en sí sobre https: haría que el navegador web promedio para que aparezca una advertencia de seguridad, como las siguientes alertas de seguridad de IE conocidos:

alt text

alt text

Servir el contenido "no seguro" sobre una URL relativa al esquema solucionaría este problema.

Cuestiones relacionadas