Haruskah URL peka huruf besar-kecil?

284

aku tahu itu

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

dan

http://stackoverflow.com/questions/ask

keduanya berfungsi dengan baik - sebenarnya yang sebelumnya dikonversi menjadi huruf kecil.

Saya pikir ini masuk akal bagi pengguna.

Jika saya melihat Google maka URL ini berfungsi dengan baik:

http://www.google.com/intl/en/about/corporate/index.html  

tapi yang ini dengan "ABOUT" tidak berfungsi:

http://www.google.com/intl/en/ABOUT/corporate/index.html   

Haruskah URL peka huruf besar-kecil?

Imageree
sumber
13
IMHO, URL tidak boleh peka huruf besar-kecil, itu hanya membuat hidup lebih sulit bagi orang yang akan menggunakannya.
Muhammad Umer
16
Pertanyaan "HARUS URL harus case-sensitive?" adalah pertanyaan yang buruk karena memunculkan opini. Alih-alih, pertanyaan yang lebih baik adalah, "MENGAPA (atau MENGAPA) url tidak peka huruf besar-kecil?", Atau "Mengapa beberapa url peka terhadap huruf besar sedangkan yang lain tidak?
chharvey
Tapi untuk satu jawaban yang mungkin, periksa WHATWG URL Standard baru , yang telah diadopsi oleh node.js .
chharvey
menurut saya, tidak mereka seharusnya
Andrew
jika browser tidak menghormati kasus ini, alamat ipfs akan rusak, tetapi tidak rusak
Beeno Tung

Jawaban:

281

Menurut " HTML dan URL " W3 mereka harus:

Mungkin ada URL, atau bagian dari URL, di mana kasus tidak penting, tetapi mengidentifikasi ini mungkin tidak mudah. Pengguna harus selalu menganggap bahwa URL peka huruf besar-kecil.

jldupont
sumber
95
Saya kira "menjadi liberal dalam apa yang Anda terima dan konservatif dalam apa yang Anda kirim" (IETF berbicara) akan menjadi pedoman saya.
jldupont
9
Pedoman W3 masuk akal. Ini hanya menyatakan bahwa seseorang tidak boleh membuat asumsi tentang bagaimana server menangani URL yang Anda kirimkan. Terserah server cara menangani URL permintaan. Sebagian besar server web adalah unix / linux dan itu berarti sebagian besar server web peka terhadap huruf besar-kecil.
oᴉɹǝɥɔ
37
W3 mengatakan USERS harus berasumsi bahwa server adalah case-sensitive, tetapi tidak memberikan rekomendasi untuk SERVERS.
trysis
3
Untuk ketahanan, program yang menafsirkan URL harus memperlakukan huruf besar sebagai setara dengan huruf kecil dalam nama skema (misalnya, izinkan "HTTP" dan "http"). Sumber
realPK
3
@PK_ Perhatikan bahwa ini hanya berlaku untuk bagian skema URL. RFC1738 tidak membahas apakah bagian-bagian lain dari URL harus ditafsirkan sebagai case-sensitive atau tidak.
dthrasher
126

Semua " tidak sensitif " ditebalkan untuk dibaca.

Nama domain tidak peka huruf besar-kecil menurut RFC 4343 . URL lainnya dikirim ke server melalui metode GET. Ini mungkin case sensitif atau tidak.

Ambil halaman ini sebagai contoh, stackoverflow.com menerima GET string / pertanyaan / 7996919 / should-url-be-case-sensitive , mengirim dokumen HTML ke browser Anda. Stackoverflow.com adalah case- sensitive karena menghasilkan hasil yang sama untuk / QUEStions / 7996919 / Should-url-be-case-sensitive .

Di sisi lain, Wikipedia adalah case-sensitive kecuali karakter pertama dari judul. URL https://en.wikipedia.org/wiki/Case_sensitivity dan https://en.wikipedia.org/wiki/case_sensitivity mengarah ke artikel yang sama, tetapi https://en.wikipedia.org/wiki/CASE_SENSITIVITY kembali 404.

jdh8
sumber
7
Wikipedia sebenarnya sangat memaafkan untuk sensitivitas huruf besar-kecilan dalam kasus-kasus di mana pengguna mungkin berpikir sebuah kata harus merupakan satu kasus atau yang lain, tetapi ini lebih karena OCD ... maaf, pertimbangkan sifat editornya. URL-nya secara teknis case-sensitive.
trysis
14
Itu karena bagian semantik dan dapat dibaca dari URL pertanyaan di stackoverflow tidak mengidentifikasinya, itu diidentifikasi oleh 7996919. Bagian semantik dari URL ada hanya untuk keperluan SEO.
user3367701
4
Sebenarnya juga /programming/7996919/should-BLABLA-be-or-NOT-to-be works. Ini karena server stackoverflow.com hanya menggunakan ID pertanyaan untuk mengidentifikasi dan mengembalikan URL dan halaman HTML yang benar.
Bozzy
72

Tergantung pada os hosting. Situs yang di-host pada Windows cenderung tidak sensitif huruf besar karena sistem file yang mendasarinya tidak sensitif huruf besar-kecil. Situs yang dihosting pada sistem tipe Unix cenderung peka terhadap huruf besar-kecil karena sistem file yang mendasarinya biasanya peka terhadap huruf besar-kecil. Bagian nama host dari URL selalu tidak peka huruf besar-kecil, itu adalah sisa jalur yang bervariasi.

Jim Nutt
sumber
1
Ya, karena yang ini dengan susah payah ditemukan pada permintaan http ke file di server Unix ftp.
Laurie Stearn
1
Akan lebih akurat untuk mengatakan 'tergantung pada server' dalam arti umum - karena melayani file bukan satu-satunya cara untuk menjawab permintaan HTTP.
Valentin Waeselynck
31

Bagian nama domain dari URL tidak peka huruf besar-kecil karena DNS mengabaikan huruf besar-kecil: http://en.example.org/dan HTTP://EN.EXAMPLE.ORG/keduanya membuka halaman yang sama.

Path digunakan untuk menentukan dan mungkin menemukan sumber daya yang diminta. Ini peka huruf besar-kecil, meskipun dapat dianggap peka terhadap huruf besar-kecil oleh beberapa server, terutama yang berbasis Microsoft Windows.

Jika server peka huruf besar-kecil dan http://en.example.org/wiki/URLbenar, maka http://en.example.org/WIKI/URLatau http://en.example.org/wiki/urlakan menampilkan halaman kesalahan HTTP 404, kecuali jika URL ini menunjuk ke sumber daya yang valid sendiri.

Bhavin Shah
sumber
3
Jawaban ini memiliki satu-satunya kata yang benar "peka huruf besar-kecil, meskipun bisa dianggap peka huruf besar kecil". Hanya jawaban yang valid.
Daniel W.
@DanFromGermany, path peka huruf besar kecil dapat disimpulkan dari sini "URL secara umum peka huruf besar kecil (dengan pengecualian nama mesin). Mungkin ada URL, atau bagian dari URL, di mana huruf tidak penting, tetapi mengidentifikasi ini mungkin tidak mudah. ​​" Tapi, ambigu untuk menyimpulkan itu. Seperti disebutkan dalam satu komentar di atas, RFC1738 tidak membahas apakah bagian-bagian dari URL selain skema harus ditafsirkan sebagai case-sensitive atau tidak. Apakah Anda memiliki tautan yang menjelaskan bagian url mana yang peka terhadap huruf besar-kecil?
garnet
2
@garnet Dari RFC3986 6.2.2.1. Normalisasi Kasus : Ketika URI menggunakan komponen sintaksis generik, aturan kesetaraan sintaksis komponen selalu berlaku; yaitu, bahwa skema dan host tidak peka terhadap huruf besar dan karenanya harus dinormalisasi menjadi huruf kecil. Misalnya, URI HTTP://www.EXAMPLE.com/setara dengan http://www.example.com/. Komponen sintaksis generik lainnya diasumsikan peka terhadap huruf besar-kecil kecuali ditentukan secara khusus oleh skema. "
Daniel W.
2
@garnet Dan dari HTTP RFC : " Ketika membandingkan dua URI untuk memutuskan apakah cocok atau tidak, klien HARUS menggunakan perbandingan oktet-per-oktet case-sensitive dari seluruh URI [...] " (dengan pengecualian skema dan tuan rumah itu sendiri).
Daniel W.
15

Saya bukan penggemar menabrak artikel lama tetapi karena ini adalah salah satu tanggapan pertama untuk masalah khusus ini saya merasa perlu untuk mengklarifikasi sesuatu.

Sebagai @ Bhavin Shah menjawab menyatakan bagian domain dari url adalah case-sensitive, jadi

http://google.com 

dan

http://GOOGLE.COM 

dan

http://GoOgLe.CoM 

semuanya sama tetapi semuanya setelah bagian nama domain dianggap case sensitive.

begitu...

http://GOOGLE.COM/ABOUT

dan

http://GOOGLE.COM/about

berbeda.

Catatan: Saya berbicara "secara teknis" dan bukan "secara harfiah" dalam banyak kasus, kebanyakan server, setup untuk menangani item ini sama, tetapi dimungkinkan untuk mengaturnya sehingga mereka TIDAK ditangani sama.

Server yang berbeda menangani ini secara berbeda dan dalam beberapa kasus mereka harus peka terhadap huruf besar / kecil. Dalam banyak kasus, nilai-nilai string kueri dikodekan (seperti Sesi Id atau data tersandi Base64 yang diteruskan sebagai nilai string kueri) Item-item ini peka huruf besar-kecil berdasarkan sifatnya sehingga server harus peka huruf besar-kecil dalam menangani mereka.

Jadi untuk menjawab pertanyaan, "seharusnya" server peka dalam mengambil data ini, jawabannya adalah "ya, pasti."

Tentu saja tidak semuanya harus peka terhadap kasus tetapi server harus menyadari apa itu dan bagaimana menangani kasus tersebut.


Komentar @Hart Simha pada dasarnya mengatakan hal yang sama. Saya melewatkannya sebelum saya diposting jadi saya ingin memberikan kredit di mana kredit jatuh tempo.

Kenneth Garza
sumber
3

Pertimbangkan yang berikut ini:

https://www.example.com/createuser.php?name=Paul%20McCartney

Dalam contoh hipotetis ini, formulir HTML - menggunakan metode GET - mengirim parameter "nama" ke skrip PHP yang membuat akun pengguna baru.

Dan yang saya maksudkan dengan contoh ini adalah bahwa parameter GET ini harus peka terhadap huruf besar untuk mempertahankan penggunaan huruf besar "McCartney" (atau, sebagai contoh lain, untuk mempertahankan "Walter d'Isney", karena ada cara lain untuk nama yang melanggar aturan kapitalisasi biasa).

Ini adalah kasus-kasus seperti ini yang memandu rekomendasi W3C bahwa skema dan host tidak peka terhadap huruf besar-kecil, tetapi semuanya setelah itu berpotensi case-sensitive - dan diserahkan ke server. Memaksa case insensitivity secara standar akan membuat contoh di atas tidak mampu mempertahankan case input pengguna yang dilewatkan sebagai parameter permintaan GET.

Tetapi yang saya katakan adalah bahwa meskipun ini harusnya surat hukum untuk mengakomodasi kasus-kasus seperti itu, semangat hukum adalah bahwa, di mana kasus tidak relevan, berperilaku dalam kasus yang tidak sensitif. Standar, bagaimanapun, tidak dapat memberi tahu Anda di mana kasus tidak relevan karena, seperti contoh yang saya berikan, itu adalah hal yang bergantung pada konteks.

(mis. nama pengguna akun mungkin paling baik dipaksa untuk tidak peka huruf besar-kecil - karena "User123" dan "user123" menjadi akun yang berbeda dapat terbukti membingungkan - bahkan jika nama asli mereka, seperti di atas, sebaiknya peka huruf besar-kecil.)

Terkadang itu relevan, sering kali tidak. Tetapi harus diserahkan kepada server / pengembang web untuk memutuskan hal-hal ini - dan tidak dapat ditentukan oleh standar - karena hanya pada tingkat itu konteksnya dapat diketahui.

Skema dan host adalah case-sensitive (yang menunjukkan preferensi standar untuk case-insensitivity, di mana dapat ditentukan secara universal). Sisanya diserahkan kepada Anda untuk memutuskan, karena Anda memahami konteksnya dengan lebih baik. Tetapi, seperti yang telah dibahas, Anda mungkin harus, dalam semangat hukum, default untuk kasus ketidakpekaan kecuali Anda memiliki alasan yang baik untuk tidak melakukannya.

Bob
sumber
Apakah string kueri diperlakukan sebagai bagian dari lokasi? Saya percaya mereka diperlakukan sebagai entitas yang terpisah dan tidak digunakan untuk resolusi lokasi.
jpmc26
String kueri terpisah dari lokasi, ya. Tetapi prinsip yang sama yang saya tunjukkan di sana dengan parameter kueri juga dapat diterapkan ke bagian lain dari URL. Beberapa CMSes, misalnya, mungkin dengan sengaja menulis ulang "/user.php?id=3756" menjadi "/ users / PaulMcCartney" untuk URL yang dapat dibaca oleh manusia yang lebih ramah SEO-friendly (misalnya Wordpress melakukan ini, misalnya). Intinya adalah bahwa standar sengaja mundur dari resep atas apa yang tergantung pada konteks. Terserah server untuk memutuskan, karena server memahami konteksnya, di mana standar universal tidak bisa.
Bob
2

URL harus tidak peka huruf besar-kecil kecuali ada alasan kuat mengapa URL itu seharusnya tidak ada.

Ini tidak wajib (ini bukan bagian dari RFC) tetapi membuat komunikasi dan penyimpanan URL jauh lebih andal.

Jika saya memiliki dua halaman di situs web:

http://stackoverflow.com/ABOUT.html

dan

http://stackoverflow.com/about.html

Bagaimana perbedaannya? Mungkin ada tulisan 'shouting style' (caps) - tetapi dari sudut pandang IA, perbedaannya tidak boleh dilakukan dengan perubahan dalam hal URL.

Selain itu, mudah untuk mengimplementasikan ini di Apache - cukup gunakan CheckSpelling Ondari mod_Speling.

konchog
sumber
0

Pertanyaan lama, tetapi saya tersandung di sini jadi mengapa tidak mencobanya karena pertanyaan itu mencari berbagai perspektif dan bukan jawaban yang pasti.

w3c mungkin memiliki rekomendasinya - yang sangat saya pedulikan - tetapi ingin memikirkan kembali karena pertanyaannya ada di sini.

Mengapa w3c menganggap nama domain tidak sensitif terhadap huruf dan meninggalkan apa pun setelahnya menjadi tidak sensitif huruf besar-kecil?

Saya berpikir bahwa alasannya adalah bagian domain dari URL diketik oleh pengguna. Semuanya setelah menjadi teks hiper akan diselesaikan oleh mesin (browser dan server di belakang).

Mesin dapat menangani ketidakpekaan case lebih baik daripada manusia (bukan jenis teknis :)).

Tetapi pertanyaannya adalah hanya karena mesin BISA menangani itu haruskah itu dilakukan dengan cara itu?

Maksud saya apa manfaat dari penamaan dan mengakses sumber daya duduk di hereIsTheResourcevs hereistheresource?

Lateral sangat tidak terbaca dari kasing unta yang lebih mudah dibaca. Dapat dibaca untuk Manusia (termasuk jenis teknis.)

Jadi, inilah poin saya: -

Resource Path berada di suatu tempat di tengah struktur pemrograman dan terkadang dekat dengan pengguna akhir di belakang browser.

URL Anda (tidak termasuk nama domain) harus peka huruf besar-kecil jika pengguna Anda diharapkan menyentuhnya atau mengetikkannya, dll. Anda harus mengembangkan aplikasi Anda untuk MENGHINDARI dengan meminta pengguna mengetikkan lintasan sebanyak mungkin.

URL Anda (tidak termasuk nama domain) harus peka huruf besar-kecil jika pengguna Anda tidak akan pernah mengetiknya dengan tangan.

Kesimpulan

Path harus peka huruf besar-kecil. Poin saya menimbang ke arah jalur case sensitif.

bhantol
sumber
0

Karakter URL dikonversi menjadi kode hex (jika Anda pernah melihat spasi di URL yang ditampilkan sebagai% 20, dll.), Dan karena huruf besar dan kecil memiliki nilai hex yang berbeda, masuk akal bahwa URL paling pasti case-sensitive. Namun semangat pertanyaan tampaknya HARUS yang menjadi standar dan saya katakan tidak, tetapi mereka. Terserah pengembang / penyedia untuk memperhitungkan ini dalam kode mereka jika mereka ingin bekerja terlepas dari pengguna akhir.

Tamu
sumber
Yang satu ini menarik. karakter e ASCII reguler (yang memiliki huruf besar dan kecil) sebenarnya tidak dikonversi, bukan? hanya spasi dan karakter tambahan yang lolos di url. Apakah ada karakter tambahan yang memiliki pengubah huruf besar / kecil?
TygerKrash
0

Saya pikir ini dan banyak jawaban di sekitar apa yang spec atau tidak katakan tidak ada pada inti pertanyaan. Haruskah mereka peka terhadap huruf besar-kecil? Itu pertanyaan yang sarat banget. Dari sudut pandang pengguna, sensitivitas huruf adalah titik yang menyakitkan, tidak semua yang tahu membuat perbedaan. Pertanyaan apakah URI seharusnya atau tidak, tergantung pada konteks pertanyaan. Untuk fleksibilitas teknis, ya, seharusnya begitu. Demi kegunaan, tidak, seharusnya tidak.

rspring1975
sumber
Agar adil, setiap pertanyaan yang menanyakan "HARUS" secara inheren didasarkan pada pendapat dan dapat dihapus dari StackOverflow. (Lebih lanjut: stackoverflow.blog/2010/09/29/good-subjective-bad-subjective )
chharvey
0

Pelestarian Kasus

URL melindungi huruf , antara klien dan server. Tetapi sebagian URL mungkin peka terhadap huruf besar atau kecil , tergantung pada server, karena beberapa alasan.

Sensitivitas Huruf

Berikut berani bagian dari URL mungkin menjadi kasus-sensitif, tergantung pada lokasi dan / atau konfigurasi server.

    http: // www. example.com /abc/def.ghi?jkl=mno#pqr

    user @ example.com

Alasan

Sensitivitas huruf pada URL dapat memiliki beberapa kegunaan. Terutama:

  1. Kompatibilitas asli dengan sistem file case-sensitive.
  2. Pengkodean data yang lebih ringkas dalam URL, seperti untuk serialisasi, hashing, ID, permalinks, dan penyingkat URL.

Sebagai pengembang, saya percaya hal di atas sering kali dapat ditangani dengan cara yang lebih baik, tetapi saya juga mengerti ada kasus di mana situasi mungkin tidak mengizinkan ini.

Misalnya, bayangkan produk yang sudah ada yang membutuhkan banyak data yang ditempatkan di URL "GET", namun harus kompatibel dengan panjang URL maksimum dari semua server utama, browser, dan mekanisme caching / proxy. Agar sesuai bahkan dengan string perintah ukuran sedang (di bawah 1.024 karakter untuk beberapa browser lama), Anda harus menggunakan setiap karakter unik URL-safe yang Anda bisa (yang pada dasarnya adalah pengkodean base64url).

Di Dunia yang Ideal

Apakah URL harus peka terhadap huruf besar atau kecil masih bisa diperdebatkan. Saya pribadi percaya mereka tidak boleh, untuk kesederhanaan (meskipun dapat membuat URL lebih lama, kami memiliki persen-lolos untuk dengan mudah menangani kasus di mana kita harus memastikan pelestarian karakter yang tepat, dan ada cara untuk mentransfer data selain tepat di URL) .

Banyak yang tampaknya setuju berdasarkan fakta bahwa URL yang tidak peka huruf besar-besaran diaktifkan secara eksplisit untuk banyak situs dan layanan populer, untuk meningkatkan kegunaan. Contoh yang paling menonjol adalah bagian nama pengguna dari alamat email. Sebagian besar penyedia email akan mengabaikan huruf besar kecil dan kadang-kadang bahkan titik dan simbol lainnya (seperti "[email protected]" sama dengan "[email protected]"). Meskipun nama pengguna email peka terhadap huruf besar-kecil, menurut spesifikasi.

Namun, kenyataannya adalah bahwa terlepas dari apa yang saya atau orang lain inginkan, ini adalah keadaan bagaimana hal-hal saat ini bekerja. Dan sementara transisi di seluruh dunia akhirnya ke standar URL case-sensitive tentu mungkin, mungkin akan memakan waktu yang cukup lama karena sensitivitas case saat ini digunakan secara luas di seluruh web untuk berbagai keperluan.

Praktik terbaik

Sejauh praktik terbaik berjalan, sebagai pengguna Anda dapat tetap menggunakan huruf kecil untuk sebagian besar situasi dan mengharapkan sesuatu berfungsi. Pengecualian utama adalah URL yang menggunakan pengkodean atau jalur dokumen berbasis kasus dengan sistem file langsung yang setara. Namun, URL kompleks semacam itu biasanya disalin-salin (atau cukup diklik) daripada diketik secara manual.

Sebagai pengembang web, Anda harus mempertimbangkan untuk menjaga URL sebagai case-sensitive mungkin. Padahal jelas ada beberapa situasi yang sulit dihindari, tergantung konteksnya, seperti disebutkan di atas.

Beejor
sumber
-1

pertanyaannya adalah apakah url harus case sensitif?

Saya melihat tidak ada gunanya, atau praktik yang baik di balik URL sensitif huruf besar-kecil. Itu bodoh, menyebalkan dan harus dihindari setiap saat.

Hanya untuk mendukung pendapat saya, ketika seseorang bertanya URL apa, bagaimana Anda bisa menjelaskan karakter URL apa yang huruf besar atau kecil? Itu omong kosong dan seharusnya tidak ada yang memberitahumu sebaliknya.

HenriKoppen
sumber
32
Ada satu keuntungan dari URL menjadi case-sensitive. Di beberapa situs web, di mana objek dikodekan dengan ID unik yang dapat dirujuk melalui URL, pengkodeannya bisa seperti base64 bukan base36 . Ini memungkinkan Anda untuk menyandikan objek yang lebih unik secara eksponensial dalam jumlah karakter URL yang sama. Misalnya, foo.com/000 - foo.com/zzz (tidak peka huruf besar-kecil) dapat merujuk ke 36 ^ 3 objek unik, sedangkan foo.com/000 - foo.com/ZZZ (peka huruf besar-kecil, artinya foo.com/zzz dan foo.com/ZZZ adalah jalur yang berbeda), akan merujuk ke 62 ^ 3 objek.
Hart Simha
6
Ini bukan jawaban, ini adalah komentar yang beralasan.
the Tin Man
1
Saya mendukungnya dengan sebuah contoh. URL digunakan oleh orang-orang - lihat pertanyaan asli-, bukan komputer. Ini sangat sulit, jadi lihat MENGAPA sebuah tautan tidak berfungsi dan karena hampir SEMUA domain tidak peka huruf besar-kecil, maka URL lainnya juga harus demikian. Downvotes adalah untuk nada suara saya (yang buruk), atau karena orang-orang teknis cenderung memilih kecantikan teknis daripada pengalaman pengguna.
HenriKoppen
1
@theTinMan Ini adalah jawaban untuk pertanyaan yang membangkitkan opini.
chharvey
Saya setuju dengan @HartSimha dan karena pertanyaannya meminta pendapat: Kecuali jika bagian dari rute URL digunakan untuk mengidentifikasi objek yang unik, mohon kasih semua yang baik di internet, JANGAN membuatnya sensitif.
jaybro
-3

Untuk situs web yang dihosting di server Linux, URL peka huruf besar-kecil. http://www.google.com/about dan http://www.google.com/About akan dialihkan ke lokasi yang berbeda. Saat berada di Windows Server, URL tidak peka huruf besar-kecil, seperti penamaan FOLDER dan akan dialihkan ke lokasi yang sama.

Wisnu
sumber
-6

Dimungkinkan untuk membuat URL non-sensitif

RewriteEngine on
rewritemap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]

Membuat Google.com..GOOGLE.com dll langsung ke google.com

Renjith Gopi
sumber
Ini tidak menjawab pertanyaan
monokrom
3
Pertanyaannya adalah: "Apakah URL harus peka huruf besar-kecil?" Jawaban Anda adalah: "Cara membuat URL tidak sensitif huruf"
realPK