Apakah ada kerugian untuk menggunakan slash ganda terkemuka untuk mewarisi protokol dalam URL? yaitu src = "// domain.com"

148

Saya memiliki stylesheet yang memuat gambar dari domain eksternal dan saya membutuhkannya untuk memuat dari https: // dari halaman pesanan aman dan http: // dari halaman lain, berdasarkan URL saat ini. Saya menemukan bahwa memulai URL dengan garis miring ganda mewarisi protokol saat ini. Apakah semua browser mendukung teknik ini?

html ex:

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

css ex:

.class { background: url(//cdn.domain.com/logo.png); }
Rob Volk
sumber
1
apakah ini memperlambat situs ???
TheBlackBenzKid
2
tidak ada alasan ini seharusnya berdampak pada kinerja, kecuali dalam kasus yang disebutkan Meder di bawah ini dalam jawabannya.
Rob Volk
Sepertinya saya tertarik pada sesuatu. Beberapa bulan yang lalu, Google Developers mulai menggunakan konvensi ini pada Hosted halaman perpustakaan Javascript mereka developers.google.com/speed/libraries/devguide
Rob Volk
10
Bagaimana jika file HTML seperti itu dimuat secara lokal (dibuka langsung dengan browser)? Sepertinya Firefox (28 dalam kasus ini) kemudian tidak memuat sumber daya jarak jauh. Masuk akal, karena HTTP bukan protokol induk. Tapi itu akan menjadi kerugian, menurut saya.
Dr. Jan-Philip Gehrcke

Jawaban:

86

Jika browser mendukung RFC 1808 Bagian 4 , RFC 2396 Bagian 5.2 , atau RFC 3986 Bagian 5.2 , maka memang akan menggunakan skema URL halaman untuk referensi yang dimulai dengan "//".

Remy Lebeau
sumber
8
Apakah ini didukung di semua browser utama? (IE7, IE8, FF, Chrome, Safari)
Rob Volk
22
Mempertimbangkan bahwa RFC pertama yang menggambarkannya, RFC 1808, ditulis 15 tahun yang lalu, dan referensi URL adalah kunci untuk fungsionalitas situs web, saya pikir aman untuk mengatakan bahwa hampir semua browser utama mendukungnya sekarang. Tetapi satu-satunya cara untuk mengetahui dengan pasti adalah dengan mencobanya sendiri dan melihat apa yang terjadi.
Remy Lebeau
2
Pertanyaan ini ditautkan dari seseorang yang mengajukan pertanyaan serupa, dan saya menemukannya di RFC 1630 tahun sebelumnya (dinyatakan berbeda, tetapi masih memungkinkan format yang dipertanyakan). Itu bisa saja dalam satu atau lain bentuk dokumen yang dulu ftp://info.cern.ch/pub/www/doc/http-spec.txtdimulai pada tahun 1991, jika ada yang memiliki salinan arsip.
Jon Hanna
4
"2014.12.17: Sekarang SSL didorong untuk semua orang dan tidak memiliki masalah kinerja, teknik ini sekarang anti-pola. Jika aset yang Anda butuhkan tersedia di SSL, maka selalu gunakan https: // aset." (kutipan dikutip dari stackoverflow.com/a/27999789 )
joonas.fi
@ joonas.fi Penalaran itu sophomoric. SSL masih memiliki dampak kinerja dan tidak dibutuhkan dalam banyak aplikasi. Saya lebih suka menggunakannya, tentu saja, tetapi saya tidak ingin kode itu diberlakukan, misalnya, kode yang saya gunakan.
Otheus
64

Saat digunakan pada linkatau @import, IE7 / IE8 akan mengunduh file dua kali per http://paulirish.com/2010/the-protocol-relative-url/

Pembaruan dari 2014:

Sekarang SSL didorong untuk semua orang dan tidak memiliki masalah kinerja , teknik ini sekarang merupakan anti-pola . Jika aset yang Anda butuhkan tersedia di SSL, maka selalu gunakan https://aset tersebut.

meder omuraliev
sumber
18
Diperbaiki di IE9, FWIW.
EricLaw
@ EricLaw apakah itu diperbaiki di IE9 terlepas dari mode render atau hanya di Mode Standar dan masih rusak di Mode Quirks?
scunliffe
Saya hampir yakin bahwa ini diperbaiki di semua mode di pemindai lookahead. Pernahkah Anda melihat hal lain di suatu tempat?
EricLaw
SSL tentu saja memiliki dampak kinerja. EFF tidak menulis antarmuka server-server, dan situs lain itu hanya memiliki sedikit keahlian teknis. Lebih lanjut, ini adalah pola anti untuk menganggap bahwa vendor situs web akan memberlakukan pembatasan tersebut. Jadi, orang-orang yang menulis CSS dan aplikasi javascript seharusnya tidak menerima pertanyaan protokol.
Otheus
63

Satu kelemahan terjadi jika URL Anda dilihat di luar konteks halaman web. Misalnya, pesan email yang berada di klien email (katakanlah, Outlook) secara efektif tidak memiliki URL, dan ketika Anda melihat pesan yang berisi URL relatif protokol, sama sekali tidak ada konteks protokol yang jelas (pesan itu sendiri independen dari protokol yang digunakan untuk mengambilnya, apakah itu POP3, IMAP, Exchange, uucp atau apa pun) sehingga URL tidak memiliki protokol yang relatif. Saya belum menyelidiki kompatibilitas dengan klien email untuk melihat apa yang mereka lakukan ketika disajikan dengan pengendali protokol yang hilang - Saya menduga sebagian besar akan menebak di http. Apple Mail menolak untuk membiarkan Anda memasukkan URL tanpa protokol. Ini analog dengan cara URL relatif tidak berfungsi dalam email karena konteks yang sama-sama hilang.

Masalah serupa dapat terjadi dalam konteks non-HTTP lain seperti di tweet, pesan SMS, dokumen Word, dll.

Penjelasan yang lebih umum adalah bahwa URL protokol anonim tidak dapat bekerja secara terpisah; ada harus menjadi konteks yang relevan. Dengan demikian, di laman web biasa menarik perpustakaan skrip dengan cara itu, tetapi tautan eksternal apa pun harus selalu menentukan protokol. Saya memang mencoba satu tes sederhana: //stackoverflow.competa file:///stackoverflow.comdi semua browser tempat saya mencobanya, sehingga mereka benar - benar tidak bekerja sendiri.

Sinkron
sumber
5
Ini adalah poin yang sangat bagus, saya sebenarnya memikirkan hal ini ketika saya tertidur tadi malam. Masalah lain adalah bahwa versi httpsatau httpmungkin sebenarnya tidak tersedia, Anda tidak dapat selalu menganggap itu.
Wesley Murch
1
Di luar peramban, Anda sendirian, jadi untuk berbicara. Tidak ada yang mengatakan apakah email atau klien lain tahu tentang javascript atau css dll. Jadi ini cukup banyak poin diperdebatkan tentang url relatif?
chris
Bukan titik diperdebatkan. Banyak klien email mendukung JS dan browser tentu saja dapat ketika memuat file://. Ini adalah usecase kecil, tetapi ketika muncul penting.
Jun-Dai Bates-Kobashigawa
Saya berharap ada cara untuk menentukan menggunakan http kecuali url saat ini adalah https, dalam hal ini menggunakan https , daripada menentukan menggunakan protokol yang sama dengan halaman saat ini dimuat , yang secara efektif //adalah apa .
Jun-Dai Bates-Kobashigawa
2
Jika Anda menentukan contoh <base href="https://www.google.com">, Anda dapat melihat konten di luar sisi web. salah satu <img src="//www.google.com/images/srpr/logo11w.png">atau<img src="images/srpr/logo11w.png">
zig
3

Alasannya bisa untuk menyediakan halaman web portabel. Jika halaman luar tidak diangkut dienkripsi (http), mengapa skrip yang ditautkan dienkripsi? Ini tampaknya merupakan kehilangan kinerja yang tidak perlu. Dalam hal, halaman luar diangkut dengan aman dienkripsi (https), maka konten yang ditautkan juga harus dienkripsi. Jika halaman dienkripsi, konten tertaut tidak, IE tampaknya mengeluarkan peringatan Konten Campuran . Alasannya adalah bahwa penyerang dapat memanipulasi skrip di jalan. Lihat http://ie.microsoft.com/testdrive/Browser/MixedContent/Default.html?o=1 untuk diskusi lebih lama.

Kampanye HTTPS Everywhere dari EFF menyarankan untuk menggunakan https bila memungkinkan. Kami memiliki kapasitas server hari ini untuk melayani halaman web yang selalu dienkripsi.

koppor
sumber
-2

Tampaknya menjadi teknik yang cukup umum sekarang. Tidak ada downside, itu hanya membantu untuk menyatukan protokol untuk semua aset di halaman sehingga harus digunakan sedapat mungkin.

Ramashish Baranwal
sumber