Saya memiliki elemen berikut:
<script type="text/javascript" src="https://cdn.example.com/js_file.js"></script>
Dalam hal ini situs tersebut adalah HTTPS, tetapi situs tersebut mungkin juga hanya HTTP. (File JS ada di domain lain.) Saya ingin tahu apakah valid untuk melakukan hal berikut demi kenyamanan:
<script type="text/javascript" src="//cdn.example.com/js_file.js"></script>
Saya ingin tahu apakah ini valid untuk menghapus http:
atau https:
?
Tampaknya berfungsi di mana pun saya telah menguji, tetapi apakah ada kasus di mana tidak berfungsi?
Jawaban:
URL relatif tanpa skema (http: atau https :) valid, per RFC 3986: "Uniform Resource Identifier (URI): Generic Syntax", Bagian 4.2 . Jika klien tersedak, maka itu adalah kesalahan klien karena mereka tidak mematuhi sintaks URI yang ditentukan dalam RFC.
Contoh Anda valid dan harus bekerja. Saya telah menggunakan metode URL relatif itu sendiri di situs-situs yang sangat diperdagangkan dan tidak memiliki keluhan. Kami juga menguji situs kami di Firefox, Safari, IE6, IE7 dan Opera. Semua browser ini memahami format URL itu.
sumber
Dijamin bekerja di semua browser arus utama (Saya tidak mempertimbangkan browser dengan pangsa pasar kurang dari 0,05%). Heck, itu bekerja di Internet Explorer 3.0.
RFC 3986 mendefinisikan URI sebagai terdiri dari bagian-bagian berikut:
Saat mendefinisikan URI relatif ( Bagian 5.2 ), Anda dapat menghilangkan bagian mana saja, selalu dimulai dari kiri. Dalam pseudo-code, tampilannya seperti ini:
URI yang Anda gambarkan adalah URI relatif tanpa skema.
sumber
Jika halaman induk diambil dari
file://
, maka itu mungkin tidak berfungsi (itu akan mencoba untuk mendapatkannyafile://cdn.example.com/js_file.js
, yang tentu saja Anda bisa berikan secara lokal juga).sumber
script src="//..."
tidak bekerja! Saya membuka file html secara lokal!Banyak orang menyebutnya URL Relatif Protokol.
Ini menyebabkan pengunduhan dua kali file CSS di IE 7 & 8 .
sumber
Di sini saya menggandakan jawabannya dalam fitur Tersembunyi dari HTML :
sumber
Sangat valid untuk meninggalkan protokol. URL spec sudah sangat jelas tentang hal ini selama bertahun-tahun, dan saya belum menemukan browser yang tidak memahaminya. Saya tidak tahu mengapa teknik ini tidak lebih dikenal; itu solusi sempurna untuk masalah pelik batas HTTP / HTTPS. Lebih lanjut di sini: Transisi Http-https dan URL relatif
sumber
Hanya dengan melempar ini dalam campuran, jika Anda mengembangkan pada server lokal, itu mungkin tidak berfungsi. Anda harus menentukan skema, jika tidak browser mungkin menganggap bahwa
src="//cdn.example.com/js_file.js"
adalahsrc="file://cdn.example.com/js_file.js"
, yang akan memecah karena Anda tidak hosting sumber daya ini secara lokal.Microsoft Internet Explorer tampaknya sangat sensitif terhadap ini, lihat pertanyaan ini: Tidak dapat memuat jQuery di Internet Explorer di localhost (WAMP)
Anda mungkin akan selalu berusaha menemukan solusi yang berfungsi di semua lingkungan Anda dengan jumlah modifikasi paling sedikit yang diperlukan.
Solusi yang digunakan oleh HTML5Boilerplate adalah memiliki cadangan ketika sumber daya tidak dimuat dengan benar, tetapi itu hanya bekerja jika Anda memasukkan tanda centang:
UPDATE: HTML5Boilerplate sekarang digunakan
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
setelah memutuskan untuk mencabut URL relatif protokol, lihat [di sini] [3].sumber
Mengikuti referensi gnud, RFC 3986 bagian 5.2 mengatakan:
Jadi
//
benar :-)sumber
Ya, ini didokumentasikan dalam RFC 3986 , bagian 5.2:
(edit: Ups, referensi RFC saya sudah usang).
sumber
Memang benar, seperti jawaban lain telah menyatakan. Anda harus mencatat, bahwa beberapa perayap web akan memulai 404 untuk ini dengan meminta mereka di server Anda seolah-olah URL lokal. (Mereka mengabaikan tebasan ganda dan memperlakukannya sebagai tebasan tunggal).
Anda mungkin ingin mengatur aturan di server web Anda untuk menangkap dan mengarahkannya.
Misalnya, dengan Nginx, Anda akan menambahkan sesuatu seperti:
Namun perlu dicatat, bahwa jika Anda menggunakan periode di URI, Anda harus meningkatkan kekhususan atau akhirnya akan mengarahkan ulang halaman tersebut ke domain yang tidak ada.
Juga, ini adalah regex yang agak masif untuk dijalankan untuk setiap permintaan - menurut pendapat saya, layak untuk menghukum browser yang tidak patuh dengan 404s atas (sedikit) pencapaian kinerja pada sebagian besar browser yang patuh.
sumber
Kami melihat 404 kesalahan dalam log kami ketika menggunakan //somedomain.com sebagai referensi ke file JS.
Referensi yang menyebabkan 404 keluar tampak seperti ini: ref:
404 permintaan:
Dengan ini muncul secara teratur di log server web kami, aman untuk mengatakan bahwa: Semua browser dan Bot TIDAK menghormati RFC 3986 bagian 4.2. Taruhan paling aman adalah memasukkan protokol jika memungkinkan.
sumber
1. Ringkasan
Jawaban untuk 2019: Anda masih dapat menggunakan URL relatif protokol, tetapi teknik ini anti-pola .
Juga:
Bermigrasi dari URL protokol-relatif ke
https://
itu akan menyenangkan.2. Relevansi
Jawaban ini relevan untuk Januari 2019. Di masa mendatang, data dari jawaban ini mungkin sudah usang.
3. Anti-pola
3.1. Argumentasi
Paul Irish - insinyur front-end dan advokat pengembang untuk Google Chrome - menulis pada 2014, Desember :
3.2. Tautan lain
3.3. Contohnya
https
4. Mengembangkan proses
Sebagai contoh, saya mencoba menggunakan konsol bersih .
KiraCleanConsole__cdn_links_demo.html
:Tautan
//cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
valid, tetapi saya mendapatkan kesalahan.Perhatikan
file://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
dan baca jawaban Thilo dan bg17aw tentangfile://
.Saya tidak tahu tentang perilaku ini dan tidak bisa mengerti mengapa saya memiliki masalah seperti ini untuk pager .
5. Alat pihak ketiga
Saya menggunakan paket Teks Sublime URL yang Dapat Diklik. Gunakan itu, saya bisa membuka tautan dari editor teks saya di browser.
Kedua tautan dalam contoh ini valid. Tapi tautan pertama yang berhasil saya buka di browser menggunakan URL yang dapat diklik, tautan kedua - tidak. Ini mungkin tidak nyaman.
6. Kesimpulan
Iya:
Developing process
item, Anda dapat mengatur alur kerja pengembangan Anda.Third-party tools
item, Anda dapat berkontribusi alat.Tetapi Anda tidak perlu masalah tambahan ini. Baca informasi berdasarkan tautan dalam
Anti-pattern
item: URL relatif protokol sudah usang.sumber
Pola yang saya lihat di html5-boilerplate adalah:
Ini berjalan lancar pada skema yang berbeda seperti
http
,https
,file
.sumber
https://
untuk semuanyahttps://
mana - mana adalah Anda harus terus memeriksa semua tautan eksternal Anda untuk melihat apakah mereka benar-benar mendukungnya, dan mengubahnya menjadihttp://
jika tidak (karena kalau tidak mereka tidak akan berfungsi). Ini mungkin merepotkan dengan sejumlah besar tautan.https://
seharusnya (atau dapat) digunakan di semua tautan yang tidak benar.Karena contoh Anda menghubungkan ke domain eksternal, jika Anda menggunakan HTTPS maka Anda harus memverifikasi bahwa domain eksternal juga diatur untuk SSL. Jika tidak, pengguna Anda mungkin melihat kesalahan SSL dan / atau kesalahan 404 (mis. Versi lama Plesk menyimpan HTTP dan HTTPS dalam folder terpisah). Untuk CDN, seharusnya tidak menjadi masalah tetapi untuk situs web lain apa pun bisa.
Di samping catatan, diuji saat memperbarui situs web lama dan juga berfungsi di url = bagian dari META REFRESH.
sumber