Tại sao URL không phân biệt chữ hoa chữ thường?
Tôi hiểu rằng có thể trông giống như một loại câu hỏi tu từ khiêu khích (và "người ủng hộ của quỷ"), nhưng tôi nghĩ rằng nó hữu ích để xem xét. Thiết kế của HTTP là một "máy khách", mà chúng ta thường gọi là "trình duyệt web", hỏi "máy chủ web" về dữ liệu.
Có rất nhiều, rất nhiều máy chủ web khác nhau được phát hành. Microsoft đã phát hành IIS với các hệ điều hành Windows Server (và các hệ điều hành khác, bao gồm cả Windows XP Professional). Unix có các đối thủ nặng ký như nginx và Apache, chưa kể các dịch vụ nhỏ hơn như httpd nội bộ của OpenBSD, hoặc thttpd hoặc lighttpd. Ngoài ra, nhiều thiết bị có khả năng kết nối mạng đã được tích hợp trong các máy chủ web có thể được sử dụng để định cấu hình thiết bị, bao gồm các thiết bị có mục đích dành riêng cho mạng, như bộ định tuyến (bao gồm nhiều điểm truy cập Wi-Fi và modem DSL) và các thiết bị khác như máy in hoặc Bộ lưu điện (bộ cấp nguồn liên tục được hỗ trợ bằng pin) có thể có kết nối mạng.
Vì vậy, câu hỏi "Tại sao các URL phân biệt chữ hoa chữ thường?", Là câu hỏi "Tại sao các máy chủ web coi URL là phân biệt chữ hoa chữ thường?" Và câu trả lời thực tế là: tất cả họ không làm điều đó. Ít nhất một máy chủ web, khá phổ biến, thường KHÔNG phân biệt chữ hoa chữ thường. (Máy chủ web là IIS.)
Một lý do chính cho hành vi khác nhau giữa các máy chủ web khác nhau có thể giải quyết vấn đề đơn giản. Cách đơn giản để tạo một máy chủ web là thực hiện mọi thứ giống như cách hệ điều hành của máy tính / thiết bị định vị các tệp. Nhiều lần, các máy chủ web định vị một tệp để cung cấp phản hồi. Unix được thiết kế xung quanh các máy tính cao cấp hơn và do đó Unix cung cấp chức năng mong muốn là cho phép chữ hoa và chữ thường. Unix quyết định coi chữ hoa và chữ thường là khác nhau bởi vì, tốt, chúng khác nhau. Đó là điều đơn giản, tự nhiên phải làm. Windows có lịch sử không phân biệt chữ hoa chữ thường do mong muốn hỗ trợ phần mềm đã được tạo và lịch sử này quay trở lại với DOS, đơn giản là không hỗ trợ các chữ cái viết thường, có thể trong nỗ lực đơn giản hóa mọi thứ với các máy tính ít mạnh hơn sử dụng ít bộ nhớ hơn. Vì các hệ điều hành này là khác nhau, kết quả là các máy chủ web được thiết kế đơn giản (phiên bản đầu của) phản ánh sự khác biệt giống nhau.
Bây giờ, với tất cả nền tảng đó, đây là một số câu trả lời cụ thể cho các câu hỏi cụ thể:
Khi các URL được thiết kế lần đầu tiên, tại sao độ nhạy trường hợp lại tạo ra một tính năng?
Tại sao không? Nếu tất cả các máy chủ web tiêu chuẩn không phân biệt chữ hoa chữ thường, điều đó sẽ chỉ ra rằng các máy chủ web đang tuân theo một bộ quy tắc được chỉ định bởi tiêu chuẩn. Đơn giản là không có quy tắc nào nói rằng trường hợp đó cần phải bỏ qua. Lý do không có quy tắc đơn giản là không có lý do nào để có quy tắc đó. Tại sao phải làm cho các quy tắc không cần thiết?
Tôi hỏi điều này bởi vì dường như đối với tôi (tức là một giáo dân) rằng sự không nhạy cảm với trường hợp sẽ được ưu tiên để ngăn ngừa các lỗi không cần thiết và đơn giản hóa một chuỗi văn bản vốn đã phức tạp.
URL được thiết kế để máy xử lý. Mặc dù một người có thể nhập URL đầy đủ vào một thanh địa chỉ, đó không phải là một phần chính của thiết kế dự định. Thiết kế dự định là mọi người sẽ theo dõi ("nhấp chuột vào") siêu liên kết. Nếu giáo dân trung bình đang làm điều đó, thì họ thực sự không quan tâm liệu URL vô hình là đơn giản hay phức tạp.
Ngoài ra, có một mục đích / lợi thế thực sự nào để có một URL phân biệt chữ hoa chữ thường (trái ngược với phần lớn các URL trỏ đến cùng một trang bất kể viết hoa) không?
Điểm thứ năm trong câu trả lời của William Hay đề cập đến một lợi thế kỹ thuật: URL có thể là một cách hiệu quả để trình duyệt web gửi một chút thông tin đến máy chủ web và có thể bao gồm nhiều thông tin hơn nếu có ít hạn chế hơn, do đó độ nhạy trường hợp hạn chế sẽ làm giảm bao nhiêu thông tin có thể được bao gồm.
Tuy nhiên, trong nhiều trường hợp, không có một lợi ích siêu hấp dẫn nào đối với độ nhạy trường hợp, điều này được chứng minh bằng thực tế là IIS thường không bận tâm đến nó.
Tóm lại, lý do hấp dẫn nhất có lẽ chỉ đơn giản đối với những người thiết kế phần mềm máy chủ web, đặc biệt là trên nền tảng phân biệt chữ hoa chữ thường như Unix. (HTTP không phải là thứ ảnh hưởng đến thiết kế ban đầu của Unix, vì Unix đáng chú ý là cũ hơn HTTP.)