Jawaban:
Secara umum, ini dianggap sebagai praktik terbaik untuk menggunakan URL relatif, sehingga situs web Anda tidak akan terikat dengan URL dasar di mana ia saat ini digunakan. Misalnya, ini akan dapat bekerja di localhost, serta pada domain publik Anda, tanpa modifikasi.
Jika dengan URL absolut maksud Anda URL termasuk skema (mis. Http / https) dan nama host (mis. Yourdomain.com) jangan pernah melakukan itu (untuk sumber daya lokal) karena akan mengerikan untuk memelihara dan men-debug.
Katakanlah Anda telah menggunakan URL absolut di mana-mana dalam kode Anda <img src="http://yourdomain.com/images/example.png">
. Sekarang apa yang akan terjadi ketika Anda akan:
Pada contoh pertama, apa yang akan terjadi adalah Anda akan mendapat peringatan tentang konten yang tidak aman yang diminta pada halaman tersebut. Karena semua URL Anda dikodekan untuk menggunakan http (: // domain Anda.com/images/example.png). Dan ketika menjalankan halaman Anda di https browser mengharapkan semua sumber daya dimuat di https untuk mencegah bocornya informasi.
Dalam contoh kedua ketika menempatkan situs Anda langsung dari lingkungan pengujian, itu berarti semua sumber daya masih menunjuk ke domain pengujian Anda, bukan domain langsung Anda.
Jadi untuk menjawab pertanyaan Anda tentang apakah akan menggunakan URL absolut atau relatif: selalu gunakan URL relatif (untuk sumber daya lokal).
Pertama mari kita lihat berbagai jenis url yang dapat kita gunakan:
http://yourdomain.com/images/example.png
//yourdomain.com/images/example.png
/images/example.png
images/example.png
Dalam contoh di bawah ini saya menganggap situs web berjalan dari lokasi berikut di server /var/www/mywebsite
.
http://yourdomain.com/images/example.png
URL di atas (mutlak) mencoba mengakses sumber daya /var/www/website/images/example.png
. Jenis URL ini adalah sesuatu yang selalu ingin Anda hindari karena meminta sumber daya dari situs web Anda sendiri untuk alasan yang diuraikan di atas. Namun tempat ini memang ada. Misalnya jika Anda memiliki situs web http://yourdomain.com
dan Anda ingin meminta sumber daya dari domain eksternal melalui http Anda harus menggunakan ini. Misalnya https://externalsite.com/path/to/image.png
.
//yourdomain.com/images/example.png
URL ini relatif berdasarkan pada skema saat ini yang digunakan dan hampir selalu harus digunakan ketika termasuk sumber daya eksternal (gambar, javascript, dll).
Apa yang dilakukan oleh jenis URL ini adalah menggunakan skema halaman saat ini. Ini berarti bahwa Anda berada di halaman http://yourdomain.com
dan pada halaman itu ada sebuah tag gambar <img src="//yourdomain.com/images/example.png">
yang URLnya akan selesaikan http://yourdomain.com/images/example.png
.
Ketika Anda akan berada di halaman http**s**://yourdomain.com
dan pada halaman itu adalah tag gambar <img src="//yourdomain.com/images/example.png">
URL dari gambar akan menyelesaikan https://yourdomain.com/images/example.png
.
Ini mencegah pemuatan sumber lebih https ketika tidak diperlukan dan secara otomatis memastikan sumber daya yang diminta lebih https ketika sedang dibutuhkan.
URL di atas diselesaikan dengan cara yang sama di sisi server seperti URL sebelumnya:
URL di atas (mutlak) mencoba mengakses sumber daya
/var/www/website/images/example.png
.
/images/example.png
Untuk sumber daya lokal, ini adalah cara yang lebih disukai untuk merujuk mereka. Ini adalah URL relatif berdasarkan pada root dokumen ( /var/www/mywebsite
) dari situs web Anda. Ini berarti ketika Anda memilikinya <img src="/images/example.png">
akan selalu diselesaikan /var/www/mywebsite/images/example.png
.
Jika pada suatu saat Anda memutuskan untuk beralih domain itu masih akan berfungsi karena itu relatif.
images/example.png
Ini juga URL relatif walaupun sedikit berbeda dari yang sebelumnya. URL ini relatif terhadap jalur saat ini. Artinya adalah ia akan menyelesaikan ke jalur yang berbeda tergantung di mana Anda berada di situs.
Misalnya ketika Anda berada di halaman http://yourdomain.com
dan Anda menggunakannya <img src="images/example.png">
akan menyelesaikan di server /var/www/mywebsite/images/example.png
seperti yang diharapkan, namun ketika Anda berada di halaman http://yourdomain.com/some/path
dan Anda menggunakan tag gambar yang persis sama tiba-tiba akan menyelesaikannya /var/www/mywebsite/some/path/images/example.png
.
Saat meminta sumber daya eksternal, Anda kemungkinan besar ingin menggunakan URL relatif terhadap skema (kecuali jika Anda ingin memaksakan skema yang berbeda) dan ketika berhadapan dengan sumber daya lokal Anda ingin menggunakan URL relatif berdasarkan pada root dokumen.
Contoh dokumen:
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<link href='//fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700' rel='stylesheet' type='text/css'>
<link href="/style/style.css" rel="stylesheet" type="text/css" media="screen"></style>
</head>
<body>
<img src="/images/some/localimage.png" alt="">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" ></script>
</body>
</html>
Lihat ini: http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax
foo://username:password@example.com:8042/over/there/index.dtb;type=animal?name=ferret#nose
\ / \________________/\_________/ \__/ \___/ \_/ \_________/ \_________/ \__/
| | | | | | | | |
| userinfo hostname port | | parameter query fragment
| \_______________________________/ \_____________|____|____________/
scheme | | | |
| authority |path|
| | |
| path interpretable as filename
| ___________|____________ |
/ \ / \ |
urn:example:animal:ferret:nose interpretable as extension
Url absolut termasuk bagian sebelum bagian "jalan" - dengan kata lain, termasuk skema ( http
dalam http://foo/bar/baz
) dan nama host (foo
in http://foo/bar/baz
) (dan port opsional, userinfo dan port).
URL relatif dimulai dengan jalur.
Url absolut, yah, absolut: lokasi sumber daya dapat diselesaikan hanya dengan melihat url itu sendiri. Url relatif dalam arti tidak lengkap: untuk menyelesaikannya, Anda memerlukan skema dan nama host, dan ini biasanya diambil dari konteks saat ini. Misalnya, di halaman web di
http://myhost/mypath/myresource1.html
Anda bisa memasang tautan seperti itu
<a href="pages/page1">click me</a>
Dalam href
atribut tautan, URL relatif digunakan, dan jika diklik, harus diselesaikan untuk mengikutinya. Dalam hal ini, konteks saat ini adalah
http://myhost/mypath/myresource1.html
jadi skema, nama host, dan jalur utama diambil dan dipertanggungjawabkan pages/page1
, menghasilkan
http://myhost/mypath/pages/page1
Jika tautannya adalah:
<a href="/pages/page1">click me</a>
(perhatikan tampilan /
di awal url) maka itu akan diselesaikan sebagai
http://myhost/pages/page1
karena pimpinan /
menunjukkan akar dari host.
Dalam aplikasi web, saya akan menyarankan untuk menggunakan url relatif untuk semua sumber daya milik aplikasi Anda. Dengan begitu, jika Anda mengubah lokasi halaman, semuanya akan terus berfungsi. Sumber daya eksternal apa pun (bisa halaman sepenuhnya di luar aplikasi Anda, tetapi juga konten statis yang Anda kirim melalui jaringan pengiriman konten) harus selalu diarahkan untuk menggunakan url absolut: jika Anda tidak ada sama sekali tidak ada cara untuk menemukannya, karena mereka berada di server yang berbeda.
//example.com/…
, ?foobar
dan #foobar
juga URL relatif dan tidak memulai dengan jalur URL (well ok, karena ?foobar
Anda dapat mengatakan itu memang dimulai dengan jalur kosong ).
//example.com/…
-type URL disebut relatif? itu baru bagiku.
Asumsikan kita sedang membuat subsite yang file-nya ada di folder http://site.ru/shop .
Link to home page
href="http://sites.ru/shop/"
Link to the product page
href="http://sites.ru/shop/t-shirts/t-shirt-life-is-good/"
Link from home page to product page
href="t-shirts/t-shirt-life-is-good/"
Link from product page to home page
href="../../"
Meskipun URL relatif terlihat lebih pendek daripada absolut, tetapi URL absolut lebih disukai, karena tautan dapat digunakan tidak berubah pada halaman situs mana pun.
Kami telah mempertimbangkan dua kasus ekstrem: URL relatif "absolut" absolut dan "absolut". Tapi semuanya relatif di dunia ini. Ini juga berlaku untuk URL. Setiap kali Anda mengatakan tentang URL absolut, Anda harus selalu menentukan relatif terhadap apa.
Link to home page
href="//sites.ru/shop/"
Link to product page
href="//sites.ru/shop/t-shirts/t-shirt-life-is-good/"
Google merekomendasikan URL tersebut. Namun sekarang, secara umum dianggap bahwa http: // dan https: // adalah situs yang berbeda.
Yaitu relatif terhadap folder root domain.
Link to home page
href="/shop/"
Link to product page
href="/shop/t-shirts/t-shirt-life-is-good/"
Ini adalah pilihan yang baik jika semua halaman berada dalam domain yang sama. Saat Anda memindahkan situs Anda ke domain lain, Anda tidak perlu melakukan penggantian massal nama domain di URL.
Tag <base> menentukan URL dasar, yang secara otomatis ditambahkan ke semua tautan dan jangkar relatif. Tag dasar tidak memengaruhi tautan absolut. Sebagai URL dasar, kami akan menentukan laman beranda: <base href = "http://sites.ru/shop/">.
Link to home page
href=""
Link to product page
href="t-shirts/t-shirt-life-is-good/"
Sekarang Anda dapat memindahkan situs Anda tidak hanya ke domain apa pun, tetapi di subfolder apa pun. Perlu diingat bahwa, meskipun URL terlihat relatif, sebenarnya URL itu absolut. Terutama memperhatikan jangkar. Untuk menavigasi dalam halaman saat ini kita harus menulis href = "t-shirt / t-shirt-life-is-good / # comments" not href = "# comments". Yang terakhir akan membuang di halaman rumah.
Untuk tautan internal, saya menggunakan URL relatif-dasar (5). Untuk tautan eksternal dan buletin saya menggunakan URL absolut (1).
Sebenarnya ada tiga jenis yang harus dibahas secara eksplisit. Dalam praktiknya meskipun URL telah diabstraksikan untuk ditangani di tingkat yang lebih rendah dan saya akan mengatakan bahwa pengembang dapat menjalani seluruh hidup mereka tanpa menulis satu URL pun dengan tangan.
URL absolut mengikat kode Anda ke protokol dan domain. Ini dapat diatasi dengan URL dinamis.
<a href=“https://dev.example.com/a.html?q=”>https://dev.example.com/a.html?q=</a>
Pro Kelebihan:
Control - Subdomain dan protokol dapat dikontrol. Orang yang masuk melalui subdomain yang tidak jelas akan disalurkan ke subdomain yang tepat. Anda dapat melompat-lompat antara aman dan tidak aman yang sesuai.
Dapat Dikonfigurasi - Pengembang menyukai hal-hal yang mutlak. Anda dapat merancang algoritma yang rapi saat menggunakan URL absolut. URL dapat dibuat dapat dikonfigurasi sehingga URL dapat diperbarui di seluruh situs dengan satu perubahan dalam satu file konfigurasi.
Clairvoyance - Anda dapat mencari orang-orang yang menggores situs Anda atau mungkin mengambil beberapa tautan eksternal tambahan.
Root Relative URLs mengikat kode Anda ke url dasar. Ini dapat diatasi dengan URL dinamis dan / atau tag dasar .
<a href=“/index.php?q=”>.example.com/index.php?q=</a>
Root Pro Relatif:
URL relatif mengikat kode Anda ke struktur direktori. Tidak ada cara untuk mengatasi ini. URL relatif hanya berguna dalam sistem file untuk melintasi direktori atau sebagai jalan pintas untuk tugas kasar.
<a href=“index.php?q=”>index.php?q=</a>
<link src=“../.././../css/default.css” />
Kekurangan relatif:
BINGUNG - Berapa banyak titik itu? berapa folder itu? Di mana file itu? Mengapa itu tidak berhasil?
PEMELIHARAAN - Jika suatu file secara tidak sengaja dipindahkan sumber daya berhenti memuat, tautan mengirim pengguna ke halaman yang salah, data formulir mungkin dikirim ke halaman yang salah. Jika file MEMBUTUHKAN untuk dipindahkan semua sumber daya yang akan berhenti memuat dan semua tautan yang akan salah perlu diperbarui.
JANGAN SKALA - Ketika halaman web menjadi lebih kompleks dan tampilan mulai digunakan kembali di beberapa halaman, tautan relatif akan relatif terhadap file yang dimasukkan. Jika Anda memiliki cuplikan navigasi HTML yang akan ada di setiap halaman, maka relatif akan relatif ke banyak tempat yang berbeda. Hal pertama yang disadari orang ketika mereka mulai membuat template adalah mereka membutuhkan cara untuk mengelola URL.
KOMPUTED - Diimplementasikan oleh browser Anda (mudah-mudahan sesuai dengan RFC). Lihat bab 5 dalam RFC3986 .
OOPS! - Kesalahan atau kesalahan ketik dapat menyebabkan perangkap laba-laba.
Pengembang telah berhenti menulis URL dalam arti sedang dibahas di sini. Semua permintaan untuk file indeks situs web dan berisi string kueri, alias rute. Rute dapat dianggap sebagai URL mini yang memberi tahu aplikasi Anda konten yang akan dihasilkan.
<a href="<?=Route::url('named_url', array('first' => 'my', 'last' => 'whacky'))?>">
http://dev.example.com/index.php/my:whacky:url
</a>
Rute Pro:
Kebanyakan orang akan menggunakan ketiga bentuk dalam proyek mereka dengan cara tertentu. Kuncinya adalah memahami mereka dan memilih yang paling cocok untuk tugas itu.
Jika itu untuk digunakan dalam situs web Anda, lebih baik menggunakan URL relatif, seperti ini jika Anda perlu memindahkan situs web ke nama domain lain atau hanya debug secara lokal, Anda bisa.
Lihatlah apa yang dilakukan stackoverflow (ctrl + U di firefox):
<a href="/users/recent/90691"> // Link to an internal element
Dalam beberapa kasus mereka menggunakan url absolut:
<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5934">
... tapi ini hanya praktik terbaik untuk meningkatkan kecepatan. Dalam kasusmu, sepertinya kau tidak melakukan hal seperti itu jadi aku tidak akan khawatir.
Saya harus tidak setuju dengan mayoritas di sini.
Saya pikir skema URL relatif "baik" ketika Anda ingin cepat mendapatkan sesuatu dan berjalan dan tidak berpikir di luar kotak, terutama jika proyek Anda kecil dengan sedikit pengembang (atau hanya diri Anda sendiri).
Namun, begitu Anda mulai bekerja pada sistem yang besar dan berlemak di mana Anda berganti domain dan protokol setiap saat, saya percaya bahwa pendekatan yang lebih elegan sedang dilakukan.
Ketika Anda membandingkan URL absolut dan relatif pada intinya, Absolute menang. Mengapa? Karena itu tidak akan pernah rusak. Pernah. URL absolut persis seperti yang dikatakannya. Tangkapannya adalah ketika Anda harus MEMELIHARA URL absolut Anda.
Pendekatan yang lemah untuk menghubungkan URL absolut sebenarnya sulit mengkodekan seluruh URL. Bukan ide yang bagus, dan mungkin penyebab mengapa orang melihat mereka sebagai berbahaya / jahat / menjengkelkan untuk dipertahankan. Pendekatan yang lebih baik adalah menulis sendiri generator URL yang mudah digunakan. Ini mudah untuk ditulis, dan bisa sangat luar biasa kuat - secara otomatis mendeteksi protokol Anda, mudah untuk mengkonfigurasi (secara harfiah mengatur URL sekali untuk seluruh aplikasi), dll, dan itu menyuntikkan domain Anda dengan sendirinya. Hal yang menyenangkan tentang itu: Anda melakukan pengkodean menggunakan URL relatif, dan pada saat aplikasi dijalankan memasukkan URL Anda sebagai absolut penuh dengan cepat. Luar biasa.
Melihat bagaimana hampir semua situs modern menggunakan semacam back-end yang dinamis, itu adalah kepentingan terbaik dari situs tersebut untuk melakukannya dengan cara itu. URL absolut melakukan lebih dari sekedar memastikan Anda ke mana mereka tunjuk- mereka juga dapat meningkatkan kinerja SEO.
Saya mungkin menambahkan bahwa argumen bahwa URL absolut entah bagaimana akan mengubah waktu buka halaman adalah mitos. Jika domain Anda memiliki berat lebih dari beberapa byte dan Anda menggunakan modem dial-up pada 1980-an, tentu saja. Tapi itu tidak terjadi lagi. https://stackoverflow.com/ adalah 25 byte, sedangkan file "topbar-sprite.png" yang mereka gunakan untuk area nav situs berbobot 9+ kb. Itu berarti bahwa data URL tambahan .2% dari data yang dimuat dibandingkan dengan file sprite, dan file itu bahkan tidak dianggap sebagai hit kinerja besar.
Gambar latar belakang satu halaman yang besar, tidak dioptimalkan, jauh lebih mungkin memperlambat waktu muat Anda.
Posting menarik tentang mengapa URL relatif tidak boleh digunakan ada di sini: http://yoast.com/relative-urls-issues/
Masalah yang dapat timbul dengan kerabat, misalnya, adalah bahwa kadang-kadang pemetaan server (jangan khawatir tentang proyek besar, kacau) tidak sejalan dengan nama file dan pengembang dapat membuat asumsi tentang URL relatif yang hanya tidak benar. Saya baru saja melihat hari ini di proyek yang sedang saya jalani dan itu membuat seluruh halaman turun.
Atau mungkin pengembang lupa untuk mengganti pointer dan tiba-tiba google mengindeks seluruh lingkungan pengujian Anda. Whoops- duplikat konten (buruk untuk SEO!).
Mutlak bisa berbahaya, tetapi ketika digunakan dengan benar dan dengan cara yang tidak dapat merusak bangunan Anda, terbukti lebih dapat diandalkan. Lihatlah artikel di atas yang memberikan banyak alasan mengapa generator url Wordpress sangat luar biasa.
:)
/
untuk menautkan ke jalur basis? yaitu /products/wallets/thing.html
sebagai lawan thing.html
dan bukanhttp://www.myshop.com/products/wallets/thing.html
echo Route::url('route_name')
untuk membuat URL absolut menggunakan URL situs dan informasi rute dengan opsi untuk membuatnya di atas HTTPS.
Dalam kebanyakan kasus, URL relatif adalah cara untuk digunakan, mereka bersifat portabel, yang berarti jika Anda ingin mengangkat situs Anda dan meletakkannya di tempat lain yang akan berfungsi secara instan, mengurangi kemungkinan berjam-jam debugging.
Ada artikel yang lumayan bagus tentang absolut vs URL relatif , coba lihat.
URL yang dimulai dengan skema URL dan skema khusus bagian ( http://
, https://
,ftp://
, dll) adalah URL absolut.
URL lain mana pun adalah URL relatif dan membutuhkan URL dasar tempat URL relatif diselesaikan (dan karenanya bergantung pada) yang merupakan URL sumber daya yang digunakan referensi jika tidak dinyatakan sebaliknya.
Lihatlah RFC 2396 - Lampiran C untuk contoh penyelesaian URL relatif.
Katakanlah Anda memiliki situs www.yourserver.com. Di direktori root untuk dokumen web Anda memiliki sub-directoy gambar dan Anda memiliki myimage.jpg.
URL absolut menentukan lokasi persis dokumen, misalnya:
http://www.yourserver.com/images/myimage.jpg
URL relatif menentukan lokasi relatif ke direktori saat ini , misalnya, mengingat Anda berada di direktori web root gambar Anda di:
images/myimage.jpg
(relatif terhadap direktori root)
Anda harus selalu menggunakan URL relatif jika memungkinkan. Jika Anda memindahkan situs ke www.anotherserver.com, Anda harus memperbarui semua URL absolut yang mengarah ke www.yourserver.com, yang relatif akan tetap berfungsi apa adanya.
Untuk setiap sistem yang mendukung resolusi URI relatif, URI relatif dan absolut memiliki tujuan yang sama: referensi. Dan mereka dapat digunakan secara bergantian. Jadi, Anda dapat memutuskan dalam setiap kasus secara berbeda. Secara teknis, mereka memberikan referensi yang sama .
Lebih tepatnya, dengan setiap URI relatif sudah ada URI absolut. Dan itu adalah basis-URI yang relatif diselesaikan oleh URI. Jadi URI relatif sebenarnya adalah fitur di atas URI absolut.
Dan itu juga mengapa dengan URI relatif Anda dapat melakukan lebih banyak seperti dengan URI absolut saja - ini sangat penting untuk situs web statis yang sebaliknya tidak bisa fleksibel untuk dipelihara dibandingkan dengan URI absolut.
Efek positif dari resolusi URI relatif ini dapat dimanfaatkan untuk pengembangan aplikasi web yang dinamis juga. Ketidakfleksibelan absolut yang diperkenalkan oleh URI juga lebih mudah untuk diatasi dalam lingkungan yang dinamis, sehingga bagi beberapa pengembang yang tidak yakin tentang resolusi URI dan bagaimana menerapkan dan mengelolanya dengan benar (tidak selalu mudah), sering memilih untuk menggunakan absolut URI di bagian dinamis situs web karena mereka dapat memperkenalkan fitur dinamis lainnya (mis. Variabel konfigurasi yang berisi awalan URI) sehingga dapat mengatasi ketidakfleksibelan.
Jadi apa untungnya menggunakan URI absolut? Secara teknis tidak ada, tapi saya akan mengatakan: URI relatif lebih kompleks karena mereka perlu diselesaikan terhadap apa yang disebut basis absolut-URI. Bahkan resolusinya secara tegas ditentukan sejak bertahun-tahun, Anda mungkin menabrak klien yang memiliki kesalahan dalam resolusi URI. Karena URI absolut tidak memerlukan resolusi apa pun, penggunaan URI absolut tidak berisiko mengalami perilaku klien yang salah dengan resolusi URI relatif. Jadi seberapa tinggi risiko itu sebenarnya? Sangat jarang. Saya hanya tahu tentang satu browser Internet yang memiliki masalah dengan resolusi URI relatif. Dan itu tidak umum tetapi hanya dalam kasus yang sangat (tidak jelas).
Di sebelah klien HTTP (peramban), mungkin lebih rumit untuk penulis dokumen atau kode hypertext juga. Di sini URI absolut memiliki manfaat yang lebih mudah untuk diuji, karena Anda dapat memasukkannya apa adanya ke dalam bilah alamat browser Anda. Namun, jika itu bukan hanya pekerjaan satu jam Anda, paling sering lebih bermanfaat bagi Anda untuk benar-benar memahami penanganan URI absolut dan relatif sehingga Anda benar-benar dapat memanfaatkan manfaat dari tautan relatif.