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); }
http
url
https
url-protocol
Rob Volk
fonte
fonte
Respostas:
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 "//".
fonte
ftp://info.cern.ch/pub/www/doc/http-spec.txt
iniciado em 1991, se alguém tiver uma cópia de arquivo.Quando usado em
link
ou@import
, o IE7 / IE8 fará o download do arquivo duas vezes por http://paulirish.com/2010/the-protocol-relative-url/Atualização de 2014:
fonte
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.com
mapeiafile:///stackoverflow.com
em todos os navegadores em que tentei, para que eles realmente não funcionem sozinhos.fonte
https
ouhttp
pode não estar realmente disponível, você nem sempre pode assumir que está.file://
. É um pequeno caso de uso, mas quando aparece, é importante.//
é.<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">
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.
fonte
Apenas por completude. Isso foi mencionado em outro segmento:
Por favor, verifique o tópico completo.
fonte
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.
fonte