Existe alguma desvantagem no uso de uma barra dupla líder para herdar o protocolo em um URL? ie src = "// domínio.com"

148

Eu tenho uma folha de estilo que carrega imagens de um domínio externo e preciso que ela seja carregada de https: // de páginas seguras de pedidos e http: // de outras páginas, com base no URL atual. Descobri que iniciar o URL com uma barra dupla herda o protocolo atual. Todos os navegadores suportam esta técnica?

html ex:

<img src="//cdn.domain.com/logo.png" />

css ex:

.class { background: url(//cdn.domain.com/logo.png); }
Rob Volk
fonte
1
isso atrasa o site ???
TheBlackBenzKid
2
não há razão para que isso tenha impacto no desempenho, exceto nos casos que Meder listou abaixo em sua resposta.
quer
Parece que eu estava pensando em alguma coisa. Há alguns meses, os desenvolvedores do Google começaram a usar esta convenção na página de bibliotecas Javascript hospedado developers.google.com/speed/libraries/devguide
Rob Volk
10
E se esse arquivo HTML for carregado localmente (aberto diretamente com o navegador)? Parece que o Firefox (28 neste caso) não carrega o recurso remoto. Faz sentido, porque o HTTP não é o protocolo pai. Mas isso seria uma desvantagem, na minha opinião.
Dr. Jan-Philip Gehrcke

Respostas:

86

Se o navegador suporta RFC 1808 Secção 4 , RFC 2396 Seção 5.2 , ou RFC 3986 Seção 5.2 , então ele vai realmente usar o esquema do URL da página para referências que começam com "//".

Remy Lebeau
fonte
8
isso é suportado em todos os principais navegadores? (IE7, IE8, FF, Chrome, Safari)
Rob Volk
22
Considerando que o primeiro RFC a descrevê-lo, o RFC 1808, foi escrito há 15 anos e as referências de URL são essenciais para a funcionalidade do site, acho seguro dizer que praticamente todos os principais navegadores já o suportam. Mas a única maneira de ter certeza é simplesmente tentar você mesmo e ver o que acontece.
Remy Lebeau 12/01
2
Esta pergunta foi vinculada por alguém que fez uma pergunta semelhante, e eu a encontrei na RFC 1630 no ano anterior (declarada de maneira diferente, mas ainda permitindo o formato em questão). Poderia muito bem estar em uma forma ou outra do documento que costumava ser ftp://info.cern.ch/pub/www/doc/http-spec.txtiniciado em 1991, se alguém tiver uma cópia de arquivo.
Jon Hanna
4
"17/12/2014: Agora que o SSL é incentivado por todos e não tem problemas de desempenho, esta técnica agora é um antipadrão. Se o ativo necessário estiver disponível no SSL, sempre use o https: // ativo." (citação de stackoverflow.com/a/27999789 )
joonas.fi
@ joonas.fi Esse raciocínio é sofomórico. O SSL ainda tem impactos no desempenho e é desnecessário em um grande número de aplicativos. Prefiro usá-lo, com certeza, mas não gostaria que esse código fosse aplicado, por exemplo, no código que implanto.
Otheus 14/11/19
64

Quando usado em linkou @import, o IE7 / IE8 fará o download do arquivo duas vezes por http://paulirish.com/2010/the-protocol-relative-url/

Atualização de 2014:

Agora que o SSL é incentivado para todos e não tem problemas de desempenho , essa técnica agora é um antipadrão . Se o ativo necessário estiver disponível no SSL, sempre use-o https://.

meder omuraliev
fonte
18
Corrigido no IE9, FWIW.
precisa saber é o seguinte
@EricLaw é corrigido no IE9, independentemente do modo de renderização ou apenas no modo Standards, e ainda quebrado no modo Quirks?
scunliffe
Estou quase certo de que isso foi corrigido em todos os modos no scanner lookahead. Você viu o contrário em algum lugar?
EricLaw
SSL certamente faz ter um impacto no desempenho. O EFF não escreve interfaces servidor-servidor e esse outro site possui pouca experiência técnica. Além disso, é anti-padrão supor que o fornecedor de um site imponha essas restrições. Assim, as pessoas escrevem aplicativos CSS e javascript não devem se basear na questão do protocolo.
Otheus 14/11/19
63

Uma desvantagem ocorre se seus URLs forem visualizados fora do contexto de uma página da web. Por exemplo, uma mensagem de e-mail em um cliente de e-mail (por exemplo, Outlook) efetivamente não tem URL e, quando você está visualizando uma mensagem que contém uma URL relativa ao protocolo, não há contexto óbvio de protocolo (a própria mensagem é independente do protocolo usado para buscá-lo, seja POP3, IMAP, Exchange, uucp ou o que for), para que o URL não tenha um protocolo com o qual seja relativo. Não investiguei a compatibilidade com clientes de email para ver o que eles fazem quando são apresentados a um manipulador de protocolo ausente - acho que a maioria adivinhará http. O Apple Mail se recusa a permitir que você insira um URL sem um protocolo. É análogo ao modo como os URLs relativos não funcionam no email por causa de um contexto igualmente ausente.

Problemas semelhantes podem ocorrer em outros contextos não HTTP, como em tweets, mensagens SMS, documentos do Word etc.

A explicação mais geral é que URLs de protocolo anônimo não podem funcionar isoladamente; não deve ser um contexto relevante. Em uma página da Web típica, é bom extrair uma biblioteca de scripts dessa maneira, mas todos os links externos sempre devem especificar um protocolo. Eu tentei um teste simples: //stackoverflow.commapeia file:///stackoverflow.comem todos os navegadores em que tentei, para que eles realmente não funcionem sozinhos.

Synchro
fonte
5
Este é um ponto muito bom, eu estava realmente pensando nisso quando adormeci na noite passada. Outra questão é que a versão httpsou httppode não estar realmente disponível, você nem sempre pode assumir que está.
Wesley Murch
1
Fora de um navegador, você está por sua conta, por assim dizer. Não há como dizer se o email ou outro cliente sabe sobre javascript ou css etc. Portanto, esse é um ponto discutível sobre URLs relativos?
28413 chris
Não é um ponto discutível. Muitos clientes de email suportam JS e navegadores certamente podem ao carregar a partir file://. É um pequeno caso de uso, mas quando aparece, é importante.
Jun-Dai Bates-Kobashigawa
Eu gostaria que houvesse uma maneira de especificar o uso de http, a menos que o URL atual seja https, nesse caso use https , em vez de especificar o uso do mesmo protocolo com o qual as páginas atuais foram carregadas , o que é efetivamente o que //é.
Jun-Dai Bates-Kobashigawa
2
Se você especificar um exemplo <base href="https://www.google.com">, poderá visualizar o conteúdo fora do lado da Web. quer <img src="//www.google.com/images/srpr/logo11w.png">ou<img src="images/srpr/logo11w.png">
zig
3

O motivo pode ser o fornecimento de páginas da web portáteis. Se a página externa não é transportada criptografada (http), por que os scripts vinculados devem ser criptografados? Isso parece ser uma perda de desempenho desnecessária. Caso a página externa seja transportada com segurança criptografada (https), o conteúdo vinculado também deverá ser criptografado. Se a página estiver criptografada, o conteúdo vinculado não, o IE parece emitir um aviso de Conteúdo Misto . O motivo é que um invasor pode manipular os scripts no caminho. Consulte http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 para uma discussão mais longa.

A campanha HTTPS Everywhere da EFF sugere usar https sempre que possível. Atualmente, temos capacidade de servidor para servir páginas da Web sempre criptografadas.

koppor
fonte
-2

Parece ser uma técnica bastante comum agora. Não há desvantagem, apenas ajuda a unificar o protocolo para todos os ativos na página; portanto, ele deve ser usado sempre que possível.

Ramashish Baranwal
fonte