Tại sao URL phân biệt chữ hoa chữ thường?


54

Câu hỏi của tôi: Khi URL được thiết kế lần đầu tiên, tại sao phân biệt chữ hoa chữ thường lại tạo ra một tính năng? 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.

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?

Wikipedia, ví dụ, là một trang web nhạy cảm với trường hợp chữ cái (ngoại trừ ký tự đầu tiên):

https://en.wikipedia.org/wiki/St Một ck_Exchange là DOA.


11
Bạn rõ ràng không chạy IIS trên Windows
John Conde

53
Tôi tưởng tượng rằng Itscrap.com, Expertsexchange và whorepresents.com sẽ thích nhiều người sử dụng tên phân biệt chữ hoa chữ thường. Để biết thêm, hãy xem chánpanda.com/worst-domain-names .
Tháp Eric

22
URL được thiết kế khi khủng long được hiển thị trên các hệ thống Unix chuyển vùng trên Trái đất và Unix có phân biệt chữ hoa chữ thường.
Thorbjørn Ravn Andersen

11
Wikipedia cố gắng sử dụng viết hoa chính xác cho tiêu đề chủ đề và sử dụng chuyển hướng cho những khác biệt chung. ví dụ. html, htmHtmltất cả chuyển hướng đến HTML. Nhưng quan trọng, vì chủ đề rất lớn, có thể có nhiều hơn một trang trong đó URL chỉ khác nhau tùy theo từng trường hợp. Ví dụ: latexLaTeX
MrWhite

7
@ edc65 Nhưng Kobi nói rằng các phần của URL (đáng chú ý là đường dẫn ) có phân biệt chữ hoa chữ thường - vì vậy, điều đó có làm cho URL (nói chung) phân biệt chữ hoa chữ thường không?
MrWhite

Câu trả lời:


8

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.)


"Một lý do chính cho hành vi khác nhau giữa các trình duyệt web khác nhau có thể giải quyết vấn đề đơn giản." - Tôi giả sử bạn có nghĩa là "máy chủ web", chứ không phải là "trình duyệt web" ở đây và ở một vài nơi khác?
MrWhite

2
Đã cập nhật. Đã xem xét mọi trường hợp của "trình duyệt" và thực hiện nhiều thay thế. Cảm ơn bạn đã chỉ ra điều này để một số chất lượng có thể được cải thiện.
TOOGAM

1
Tôi đã nhận được một số câu trả lời xuất sắc cho câu hỏi của tôi, từ lịch sử đến kỹ thuật. Tôi ngần ngại đi ngược lại hạt gạo và chấp nhận một câu trả lời được đánh giá thấp hơn, nhưng câu trả lời của @ lắmGAM là hữu ích nhất đối với tôi. Câu trả lời này là kỹ lưỡng và sâu rộng nhưng nó giải thích khái niệm này theo một cách thức không phức tạp, mà tôi có thể hiểu được. Và tôi nghĩ rằng câu trả lời này là một giới thiệu tốt cho các giải thích sâu hơn.
Kyle

74

Các URL không phân biệt chữ hoa chữ thường, chỉ là một phần của chúng.
Ví dụ: không có gì phân biệt chữ hoa chữ thường trong URL https://google.com,

Với tham chiếu đến RFC 3986 - Mã định danh tài nguyên đồng nhất (URI): Cú pháp chung

Đầu tiên, từ Wikipedia , một URL trông giống như:

 scheme:[//host[:port]][/]path[?query][#fragment]

(Tôi đã xóa user:passwordphần này vì nó không thú vị và hiếm khi được sử dụng)

đề án không phân biệt chữ hoa chữ thường

Thành phần con máy chủ không phân biệt chữ hoa chữ thường.

Thành phần đường dẫn chứa dữ liệu ...

Thành phần truy vấn chứa dữ liệu không phân cấp ...

Các loại phương tiện riêng lẻ có thể xác định các hạn chế riêng của chúng đối với hoặc cấu trúc trong cú pháp định danh phân đoạn để chỉ định các loại tập hợp con, chế độ xem hoặc tham chiếu bên ngoài khác nhau

Vì vậy, schemehostkhông phân biệt chữ hoa chữ thường.
Phần còn lại của URL là phân biệt chữ hoa chữ thường.

Tại sao pathtrường hợp nhạy cảm?

Đây dường như là câu hỏi chính.
Thật khó để trả lời "tại sao" một cái gì đó đã được thực hiện nếu nó không được ghi lại, nhưng chúng ta có thể đoán rất tốt.
Tôi đã chọn các trích dẫn rất cụ thể từ thông số kỹ thuật, nhấn mạnh vào dữ liệu .
Hãy xem lại URL:

 scheme:[//host[:port]][/]path[?query][#fragment]
 \____________________/\________________________/
        Location                 Data
  • Vị trí - Vị trí có dạng chính tắc và không phân biệt chữ hoa chữ thường. Tại sao? Có lẽ vì vậy bạn có thể mua một tên miền mà không phải mua hàng ngàn biến thể.

  • Dữ liệu - dữ liệu được sử dụng bởi máy chủ mục tiêu và ứng dụng có thể chọn ý nghĩa của nó . Nó sẽ không có ý nghĩa để làm cho trường hợp dữ liệu không nhạy cảm. Ứng dụng nên có nhiều tùy chọn hơn và việc xác định độ nhạy cảm trường hợp trong thông số kỹ thuật sẽ giới hạn các tùy chọn này.
    Đây cũng là một điểm khác biệt hữu ích cho HTTPS: dữ liệu được mã hóa , nhưng máy chủ có thể nhìn thấy.

Nó khá hữu ích?

Phân biệt chữ hoa chữ thường có những khó khăn khi nói đến bộ nhớ đệm và URL chuẩn, nhưng nó chắc chắn rất hữu ích. Vài ví dụ:


1
"URL không phân biệt chữ hoa chữ thường." / "Phần còn lại của URL là phân biệt chữ hoa chữ thường." - Đây có vẻ là một mâu thuẫn?
MrWhite

8
Trong thực tế, lược đồ xác định những gì mong đợi trong phần còn lại của URL. http:và các lược đồ liên quan có nghĩa là URL đề cập đến tên máy chủ DNS. DNS là trường hợp không nhạy cảm ASCII từ lâu trước khi phát minh ra URL. Xem trang 55 của ietf.org/rfc/rfc883.txt
O. Jones

3
Chi tiết độc đáo! Tôi đã đi từ một quan điểm lịch sử. Ban đầu, đường dẫn tệp chỉ được phân biệt chữ hoa chữ thường nếu bạn nhấn hệ thống tệp. Mặt khác, nó đã không được. Nhưng ngày nay, mọi thứ đã thay đổi. Ví dụ: tham số và CGI không tồn tại ban đầu. Câu trả lời của bạn có một quan điểm ngày hiện tại. Tôi đã phải thưởng cho những nỗ lực của bạn !! Bạn thực sự đào sâu vào cái này! Ai biết điều này sẽ nổ tung theo cách nó đã làm ?? Chúc mừng !!
Closnoc 23/2/2016

2
@ w3dk: đó là một thuật ngữ không thú vị về thuật ngữ, nhưng bạn có thể hiểu "phân biệt chữ hoa chữ thường", "thay đổi trường hợp của một ký tự có thể thay đổi toàn bộ", hoặc bạn có thể hiểu nó là "thay đổi trường hợp của một nhân vật luôn thay đổi toàn bộ ". Kobi dường như đang khẳng định điều thứ hai, anh thích trường hợp phân biệt chữ hoa chữ thường có nghĩa là "bất kỳ thay đổi nào trong trường hợp là quan trọng", tất nhiên điều đó không đúng với URL. Bạn thích cái trước. Nó chỉ là một vấn đề như thế nào nhạy cảm mà họ đang hợp.
Steve Jessop

2
@ rybo111: Nếu người dùng gõ example.com/fOObaR , thông số kỹ thuật yêu cầu máy chủ tại www.example.com nhận được đường dẫn "/ fOObaR" như đã cho; vấn đề là liệu máy chủ có phải đối xử với bất kỳ sự khác biệt nào so với "/ foOBaR" hay không.
supercat

59

Đơn giản. HĐH là trường hợp nhạy cảm. Các máy chủ web thường không quan tâm trừ khi chúng phải tấn công hệ thống tệp tại một số điểm. Đây là nơi Linux và các hệ điều hành dựa trên Unix khác thực thi các quy tắc của hệ thống tệp trong đó độ nhạy trường hợp là một phần chính. Đây là lý do tại sao IIS chưa bao giờ phân biệt chữ hoa chữ thường; bởi vì Windows không bao giờ phân biệt chữ hoa chữ thường.

[Cập nhật]

Đã có một số tranh luận mạnh mẽ trong các bình luận (kể từ khi bị xóa) về việc URL có bất kỳ mối quan hệ nào với hệ thống tệp như tôi đã nêu hay không. Những tranh luận đã trở nên nóng bỏng. Thật vô cùng thiển cận khi tin rằng không có mối quan hệ nào. Hoàn toàn có! Hãy để tôi giải thích thêm.

Lập trình viên ứng dụng thường không phải là hệ thống lập trình nội bộ. Tôi không bị xúc phạm. Chúng là hai ngành riêng biệt và kiến ​​thức bên trong hệ thống không bắt buộc phải viết ứng dụng khi các ứng dụng chỉ đơn giản có thể thực hiện cuộc gọi đến HĐH. Vì các lập trình viên ứng dụng không phải là các lập trình viên bên trong hệ thống, nên việc bỏ qua các dịch vụ HĐH là không thể. Tôi nói điều này bởi vì đây là hai trại riêng biệt và chúng hiếm khi giao nhau. Các ứng dụng được viết để sử dụng các dịch vụ HĐH như một quy luật. Tất nhiên hiếm có một số ngoại lệ.

Quay lại khi máy chủ web bắt đầu xuất hiện, các nhà phát triển ứng dụng đã không cố gắng bỏ qua các dịch vụ HĐH. Có nhiều lý do cho việc này. Một, nó không cần thiết. Hai, các lập trình viên ứng dụng thường không biết cách vượt qua các dịch vụ HĐH. Ba, hầu hết các hệ điều hành đều cực kỳ ổn định và mạnh mẽ, hoặc cực kỳ đơn giản và nhẹ và không đáng giá.

Hãy nhớ rằng các máy chủ web đầu tiên chạy trên các máy tính đắt tiền như máy chủ DEC VAX / VMS và Unix trong ngày (Berkeley và Ultrix cũng như các máy tính khác) trên các máy tính khung chính hoặc khung giữa, ngay sau đó các máy tính nhẹ như PC và Windows 3.1. Khi các công cụ tìm kiếm hiện đại hơn bắt đầu xuất hiện, chẳng hạn như Google vào năm 1997/8, Windows đã chuyển sang Windows NT và các hệ điều hành khác như Novell và Linux cũng đã bắt đầu chạy các máy chủ web. Apache là máy chủ web thống trị mặc dù có những máy chủ khác như IIS và O'Reilly cũng rất phổ biến. Không ai trong số họ tại thời điểm đó bỏ qua các dịch vụ hệ điều hành. Có vẻ như không có máy chủ web nào làm được ngay cả ngày hôm nay.

Máy chủ web ban đầu khá đơn giản. Họ vẫn còn ngày hôm nay. Bất kỳ yêu cầu nào được thực hiện đối với tài nguyên thông qua yêu cầu HTTP tồn tại trên ổ cứng đều được / được thực hiện bởi máy chủ web thông qua hệ thống tệp OS.

Hệ thống tập tin là cơ chế khá đơn giản. Vì yêu cầu được thực hiện để truy cập vào một tệp, nếu tệp đó tồn tại, yêu cầu được chuyển đến hệ thống con ủy quyền và nếu được cấp, yêu cầu ban đầu được thỏa mãn. Nếu tài nguyên không tồn tại hoặc không được cấp phép, một hệ thống sẽ bị ngoại lệ. Khi một ứng dụng thực hiện một yêu cầu, một kích hoạt được thiết lập và ứng dụng chờ. Khi yêu cầu được trả lời, kích hoạt được ném và ứng dụng xử lý phản hồi yêu cầu. Nó vẫn hoạt động theo cách đó ngày hôm nay. Nếu ứng dụng thấy rằng yêu cầu đã được thỏa mãn, nó vẫn tiếp tục, nếu nó bị lỗi, ứng dụng sẽ thực thi một điều kiện lỗi trong mã của nó hoặc chết nếu không được xử lý. Đơn giản.

Trong trường hợp máy chủ web, giả sử rằng yêu cầu URL cho đường dẫn / tệp được tạo, máy chủ web sẽ lấy phần đường dẫn / tệp của yêu cầu URL (URI) và đưa ra yêu cầu cho hệ thống tệp và nó được thỏa mãn hoặc ném một ngoại lệ. Các máy chủ web sau đó xử lý các phản ứng. Ví dụ, nếu đường dẫn và tệp được yêu cầu được tìm thấy và quyền truy cập được cấp bởi hệ thống phụ ủy quyền, thì máy chủ web sẽ xử lý yêu cầu I / O như bình thường. Nếu hệ thống tệp ném ra một ngoại lệ, thì máy chủ web sẽ trả về lỗi 404 nếu không tìm thấy tệp hoặc 403 Bị cấm nếu mã lý do không được phép.

Vì một số HĐH có phân biệt chữ hoa chữ thường và các hệ thống tệp thuộc loại này yêu cầu khớp chính xác, nên đường dẫn / tệp được yêu cầu của máy chủ web phải khớp chính xác với những gì tồn tại trên ổ cứng. Lý do cho điều này là đơn giản. Máy chủ web không đoán được ý của bạn. Không có máy tính nào làm như vậy mà không được lập trình. Máy chủ web chỉ cần xử lý các yêu cầu khi họ nhận được chúng. Nếu phần đường dẫn / tệp của yêu cầu URL được truyền trực tiếp vào hệ thống tệp không khớp với những gì trên ổ cứng, thì hệ thống tệp sẽ đưa ra một ngoại lệ và máy chủ web trả về lỗi 404 Không tìm thấy.

Nó thực sự là những người đơn giản. Đây không phải là khoa học tên lửa. Có một mối quan hệ tuyệt đối giữa phần đường dẫn / tệp của URL và hệ thống tệp.


1
Tôi nghĩ rằng bạn tranh luận là thiếu sót. Trong khi Berners-Lee không có lựa chọn nào về độ nhạy trường hợp của các URL ftp. Anh ấy đã thiết kế URL http. Anh ta có thể chỉ định chúng là US-ASCII và không phân biệt chữ hoa chữ thường. Nếu có bất kỳ máy chủ web nào vừa chuyển đường dẫn URL tới hệ thống tệp thì chúng không an toàn và việc giới thiệu mã hóa URL đã phá vỡ tính tương thích với chúng. Cho rằng đường dẫn đang được xử lý trước khi đưa vào trường hợp đập hệ điều hành sẽ dễ thực hiện. Do đó, tôi nghĩ rằng chúng ta phải coi đây là một quyết định thiết kế chứ không phải là một sự giải quyết.
William Hay

@WilliamHay Điều này không liên quan gì đến Berners-Lee hoặc thiết kế web. Đó là về những hạn chế và yêu cầu của HĐH. Tôi là một kỹ sư nội bộ hệ thống đã nghỉ hưu. Tôi đã làm việc trên các hệ thống này vào thời điểm đó. Tôi đang nói với bạn chính xác lý do tại sao các URL phân biệt chữ hoa chữ thường. Nó không phải là một phỏng đoán. Nó không phải là một ý kiến. Đó là một sự thật. Câu trả lời của tôi đã được cố ý đơn giản hóa. Tất nhiên, có kiểm tra tệp và các quy trình khác có thể được thực hiện trước khi đưa ra bất kỳ tuyên bố mở nào. Và các máy chủ web Có (!) Vẫn không an toàn cho đến ngày nay.
Closnoc

Liệu các URL có phân biệt chữ hoa chữ thường không liên quan gì đến thiết kế của web không? Có thật không? Đối số từ chính quyền theo sau là Đối số bằng khẳng định. Việc các máy chủ web chuyển thành phần đường dẫn của URL ít nhiều trực tiếp đến một cuộc gọi mở là hệ quả của việc thiết kế URL không phải là nguyên nhân của nó. Máy chủ (hoặc máy khách thông minh trong trường hợp FTP) có thể đã che giấu độ nhạy trường hợp của hệ thống tệp khỏi người dùng. Rằng họ không phải là một quyết định thiết kế.
William Hay

@WilliamHay Bạn cần làm chậm phễu cỏ và đọc lại những gì tôi đã viết. Tôi là một kỹ sư nội bộ đã nghỉ hưu, viết các thành phần HĐH, ngăn xếp giao thức và mã bộ định tuyến cho ARPA-Net, v.v. Tôi đã làm việc với các bộ phận nội bộ của Apache, O'Reilly và IIS. Đối số FTP của bạn không giữ nước vì ít nhất các máy chủ FTP chính vẫn phân biệt chữ hoa chữ thường vì lý do tương tự. Tôi không nói gì về thiết kế URL / URI. Tôi đã không nói rằng các máy chủ web đã vượt qua các giá trị mà không cần xử lý. Tôi đã nói rằng các dịch vụ HĐH thường được sử dụng và hệ thống tệp yêu cầu khớp chính xác để thành công.
Closnoc

@WilliamHay Xin hãy hiểu rằng bạn và tôi đang nghĩ về những mục đích chéo. Tất cả những gì tôi đã nói trong câu trả lời của mình là đối với một số HĐH, các cuộc gọi hệ thống tệp có phân biệt chữ hoa chữ thường theo thiết kế. Các ứng dụng sử dụng các cuộc gọi hệ thống và hầu hết đều bị giới hạn trong việc thực thi các quy tắc của HĐH - trong trường hợp này là độ nhạy trường hợp. Không thể bỏ qua quy tắc này. Trong thực tế, điều này có thể hơi tầm thường trong một số trường hợp mặc dù không thực tế. Tôi thường xuyên bỏ qua hệ thống tệp trong công việc của mình để sắp xếp lại các ổ đĩa cứng bị hỏng vì lý do này hay lý do khác hoặc để phân tích nội bộ tệp cơ sở dữ liệu, v.v.
Closnoc

21
  1. Các URL tự xưng là công cụ định vị tài nguyên UNIFORM và có thể trỏ đến các tài nguyên có trước web. Một số trong số này phân biệt chữ hoa chữ thường (ví dụ: nhiều máy chủ ftp) và URL cần có thể thể hiện các tài nguyên này theo cách trực quan hợp lý.

  2. Không nhạy cảm trường hợp đòi hỏi nhiều công việc hơn khi tìm kiếm một trận đấu (trong hệ điều hành hoặc trên nó).

  3. Nếu bạn xác định URL là các máy chủ riêng lẻ phân biệt chữ hoa chữ thường có thể triển khai chúng dưới dạng không phân biệt chữ hoa chữ thường nếu muốn. Điều ngược lại là không đúng sự thật.

  4. Không nhạy cảm trường hợp có thể là không tầm thường trong bối cảnh quốc tế: https://en.wikipedia.org/wiki/Diated_and_dotless_I . Ngoài ra RFC1738 cho phép sử dụng các ký tự ngoài phạm vi ASCII miễn là chúng được mã hóa nhưng không chỉ định bộ ký tự. Điều này khá quan trọng đối với một cái gì đó tự gọi mình là web toàn thế giới. Xác định URL là trường hợp không nhạy cảm sẽ mở ra rất nhiều phạm vi cho các lỗi.

  5. Nếu bạn đang cố gắng đóng gói nhiều dữ liệu vào một URI (ví dụ: URI dữ liệu ), bạn có thể đóng gói nhiều hơn nếu chữ hoa và chữ thường khác nhau.


1
Tôi khá chắc chắn rằng các URL đã bị giới hạn trong lịch sử đối với ASCII. Vì vậy, quốc tế hóa không chắc là một lý do ban đầu. Lịch sử của Unix là trường hợp nhạy cảm, OTOH, có thể đóng một vai trò rất lớn.
derobert

Mặc dù chỉ có thể sử dụng một tập hợp con của ASCII không được mã hóa trong URL RFC1738 nói rõ các ký tự bên ngoài phạm vi ASCII có thể được sử dụng được mã hóa. Nếu không chỉ định bộ ký tự, không thể biết các octet nào đại diện cho cùng một ký tự trừ trường hợp. Đã cập nhật.
William Hay

1
Re # 4: Nó thực sự tồi tệ hơn thế. Chấm chấm và không có dấu chấm Tôi là một minh chứng cho nguyên tắc chung hơn rằng, ngay cả khi mọi thứ là UTF-8 (hoặc một số UTF khác), bạn không thể viết hoa hoặc viết thường mà không biết ngôn ngữ mà văn bản thuộc về. Trong ngôn ngữ mặc định, một chữ cái Latinh viết hoa chữ thường viết hoa thành một chữ cái Latinh chữ thường i, sai trong tiếng Thổ Nhĩ Kỳ vì nó thêm một dấu chấm (không có điểm mã "tiếng Thổ Nhĩ Kỳ không dấu" của Thổ Nhĩ Kỳ; bạn có nghĩa là sử dụng mã ASCII điểm). Ném vào sự khác biệt về mã hóa, và điều này chuyển từ "thực sự khó khăn" sang "hoàn toàn khó hiểu".
Kevin

5

Tôi đã đánh cắp từ blog một điều mới về thói quen tiếp cận các câu hỏi có dạng "tại sao lại có chuyện đó xảy ra?" với câu hỏi ngược lại "thế giới sẽ như thế nào, nếu không phải như vậy?"

Giả sử tôi đã thiết lập một máy chủ web để tự phục vụ các tệp tài liệu của mình từ một thư mục để tôi có thể đọc chúng trên điện thoại khi tôi ra khỏi văn phòng. Bây giờ, trong thư mục tài liệu của tôi, tôi có ba tác phẩm, todo.txt, ToDo.txtTODO.TXT(tôi biết, nhưng nó có ý nghĩa với tôi khi tôi thực hiện các tập tin).

URL nào tôi muốn có thể sử dụng, để truy cập các tệp này? Tôi muốn truy cập chúng một cách trực quan, bằng cách sử dụng http://www.example.com/docs/filename.

Giả sử tôi có một tập lệnh cho phép tôi thêm một liên hệ vào sổ địa chỉ của mình, điều này tôi cũng có thể thực hiện trên web. Làm thế nào mà nên lấy tham số của nó? Chà, tôi muốn sử dụng nó như : http://www.example.com/addcontact.php?name=Tom McHenry von der O'Reilly. Nhưng nếu không có cách nào để tôi chỉ định tên theo từng trường hợp, tôi sẽ làm thế nào?

Làm cách nào để phân biệt các trang wiki cho Cat và CAT, Text và TEXT, latex và LaTeX? Các trang Disambig, tôi đoán, nhưng tôi thích chỉ nhận được những gì tôi yêu cầu.

Nhưng tất cả những gì cảm thấy như nó trả lời sai câu hỏi, dù sao.

Câu hỏi tôi nghĩ bạn đã thực sự hỏi là "Tại sao máy chủ web 404 bạn chỉ vì sự khác biệt trong trường hợp, khi chúng là máy tính, được thiết kế để làm cho cuộc sống đơn giản hơn và chúng hoàn toàn có khả năng tìm thấy ít nhất các biến thể trường hợp rõ ràng nhất trong URL tôi gõ sẽ hoạt động? "

Câu trả lời là trong khi một số trang web đã làm điều này (và tốt hơn, họ cũng kiểm tra các lỗi chính tả khác), không ai nghĩ rằng nên thay đổi trang lỗi 404 mặc định của máy chủ web để làm điều đó ... nhưng có lẽ họ nên làm vậy?


1
Một số trang web sử dụng một số loại cơ chế để chuyển đổi bất kỳ truy vấn nào thành tất cả chữ thường hoặc một cái gì đó phù hợp. Theo một cách nào đó, điều này là thông minh.
Closnoc

Không, họ không nên. Chức năng này có thể, và thường được thêm vào khi nó được mong muốn (ví dụ: bởi các mô-đun trong apache.) Để áp dụng loại thay đổi này là hành vi mặc định - hoặc tệ hơn, hành vi bất biến - sẽ gây rối hơn so với tương đối hiếm nhân dịp ai đó phải nhập thủ công một URL ngoài tên máy chủ. Để có một ví dụ tốt về lý do tại sao không làm điều này, hãy nhớ lại fiasco khi Giải pháp mạng "sửa" các lỗi miền không tồn tại từ các truy vấn DNS công cộng.
SirNickity

@SirNickity Không ai đề xuất tính bất biến ở mọi cấp độ và các trang lỗi máy chủ web có thể định cấu hình trên mọi máy chủ web tôi từng sử dụng; không ai đề xuất thay thế 404 bằng mã 30 *, mà chỉ thêm một danh sách các liên kết gợi ý có thể nhấp của con người vào trang lỗi; tên miền là một chủ đề rất khác nhau và vấn đề không phân biệt chữ hoa chữ thường và trong một bối cảnh bảo mật khác; và IIS đã tự động "sửa" (bằng cách bỏ qua) các khác biệt về trường hợp trong phần đường dẫn hoặc tên tệp của URI.
Dewi Morgan

Từ năm 1996, Apache đã cho phép bạn làm điều này với mod_speling . Nó dường như không phải là một điều rất phổ biến để làm. Người Unix / Linux coi trường hợp không nhạy cảm là quy tắc, trường hợp không nhạy cảm là ngoại lệ.
Revierpost

4

Mặc dù câu trả lời trên là chính xác và tốt. Tôi muốn thêm một số điểm.

Để hiểu rõ hơn, người ta nên hiểu sự khác biệt cơ bản giữa máy chủ Unix (Linux) Vs Windows. Unix là trường hợp nhạy cảm & Windows là hệ điều hành không phân biệt chữ hoa chữ thường.

Giao thức HTTP đã được phát triển hoặc bắt đầu triển khai vào khoảng năm 1990. Giao thức HTTP được thiết kế bởi các kỹ sư làm việc tại các viện Cern, hầu hết những ngày đó nhà khoa học sử dụng máy Unix chứ không phải Windows.

Hầu hết các nhà khoa học đều quen thuộc với Unix, vì vậy họ có thể đã bị ảnh hưởng với hệ thống tệp kiểu Unix.

Máy chủ Windows được phát hành sau năm 2000. rất nhiều trước khi máy chủ windows trở thành giao thức HTTP phổ biến đã hoàn thiện tốt và thông số kỹ thuật đã hoàn tất.

Đây có thể là lý do.


2
"Máy chủ Windows được phát hành sau năm 2000." Nhóm Windows NT 3.1 sẽ không đồng ý với bạn vào năm 1993. NT 3.51 vào năm 1995 có lẽ là khi NT bắt đầu trưởng thành và đủ vững chắc để hỗ trợ các ứng dụng máy chủ quan trọng trong kinh doanh.
một CVn

NT 3.51 có giao diện Win 3.1. Windows đã không thực sự cất cánh cho đến Windows 95 và phải mất NT 4.0 để có cùng giao diện.
Thorbjørn Ravn Andersen

Michael Kjorling, đồng ý. Hãy để tôi sửa đổi nó.
Mani

1
@ ThorbjørnRavnAndersen Trong thị trường máy chủ, NT 3.51 đã thành công một cách hợp lý. Trong thị trường tiêu dùng / số lượng, phải đến Windows 2000 (NT 5.0) trước khi dòng NT bắt đầu đạt được lực kéo nghiêm trọng.
một CVn

Thật vậy, WorldWideWeb ban đầu được phát triển trên các hệ thống dựa trên Unix, có hệ thống tệp phân biệt chữ hoa chữ thường và hầu hết các URL được ánh xạ trực tiếp tới các tệp trên hệ thống tệp.
Revierpost

4

Làm thế nào người ta nên đọc một "tại sao nó được thiết kế theo cách này?" câu hỏi? Bạn đang yêu cầu một tài khoản chính xác về mặt lịch sử của quá trình ra quyết định, hoặc bạn đang hỏi "tại sao mọi người sẽ thiết kế nó theo cách này?"?

Rất hiếm khi có được một tài khoản chính xác về mặt lịch sử. Đôi khi, khi các quyết định được đưa ra trong các ủy ban tiêu chuẩn, có một đoạn phim tài liệu về cách tranh luận được tiến hành, nhưng trong những ngày đầu, các quyết định trên web đã được đưa ra một cách vội vã bởi một vài cá nhân - trong trường hợp này có lẽ là do chính TimBL - và lý do không thể xảy ra đã được viết ra. Nhưng TimBL đã thừa nhận rằng anh ta đã mắc lỗi trong thiết kế URL - xem http://www.dailymail.co.uk/sciencetech/article-1220286/Sir-Tim-Berners-Lee-admits-forward-slashes-web-address -mistake.html

Trong những ngày đầu, URL ánh xạ rất trực tiếp đến tên tệp và các tệp nói chung trên các máy giống Unix và các máy giống Unix có tên tệp phân biệt chữ hoa chữ thường. Vì vậy, dự đoán của tôi là nó chỉ xảy ra theo cách đó để thuận tiện cho việc triển khai và tính khả dụng (đối với người dùng cuối) thậm chí không bao giờ được xem xét. Một lần nữa, trong những ngày đầu, người dùng đều là lập trình viên Unix.


Người dùng cuối cũng là người dùng Unix (không nhất thiết phải là lập trình viên, nhưng là nhà vật lý năng lượng cao và tương tự), vì vậy họ cũng đã quen với trường hợp không nhạy cảm.
Revierpost

3

Điều này không liên quan gì đến nơi bạn đã mua tên miền của mình, DNS không phân biệt chữ hoa chữ thường. Nhưng, hệ thống tập tin trên máy chủ bạn đang sử dụng để lưu trữ là.

Đây thực sự không phải là một vấn đề và nó khá phổ biến trên các máy chủ * nix. Chỉ cần đảm bảo rằng tất cả các liên kết bạn viết trên các trang của bạn là chính xác và bạn sẽ không gặp vấn đề gì. Để dễ dàng hơn, tôi khuyên bạn luôn luôn đặt tên trang của mình trong tất cả các chữ thường thì bạn không bao giờ cần phải kiểm tra lại tên khi viết liên kết.


2

Closetnoc nói đúng về HĐH. Một số hệ thống tệp xử lý cùng tên với các vỏ khác nhau như các tệp khác nhau.

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?

Đúng. để tránh các vấn đề nội dung trùng lặp.

Nếu bạn có ví dụ về các URL sau:

http://example.com/page-1
http://example.com/Page-1
http://example.com/paGe-1
http://example.com/PAGE-1
http://example.com/pAGE-1

và tất cả chúng đều trỏ đến cùng một trang với cùng một nội dung, sau đó bạn sẽ có nội dung trùng lặp và tôi chắc chắn nếu bạn có tài khoản bảng điều khiển tìm kiếm Google (công cụ quản trị trang web), Google sẽ chỉ ra điều này cho bạn.

Điều tôi khuyên bạn nên làm nếu bạn ở trong tình huống đó là sử dụng tất cả các URL chữ thường, sau đó chuyển hướng các URL có ít nhất một chữ in hoa trong đó sang phiên bản chữ thường. Vì vậy, trong danh sách các URL ở trên, hãy chuyển hướng tất cả các URL đến URL đầu tiên.


"Có. Để tránh các vấn đề nội dung trùng lặp." - Nhưng điều ngược lại dường như là sự thật? Thực tế là các URL có thể phân biệt chữ hoa chữ thường (và đây là cách các công cụ tìm kiếm xử lý chúng) gây ra các vấn đề trùng lặp nội dung mà bạn đề cập. Nếu các URL không phân biệt chữ hoa chữ thường thì sẽ không có vấn đề trùng lặp nội dung với các trường hợp khác nhau. page-1sẽ giống như PAGE-1.
MrWhite

Tôi nghĩ rằng một cấu hình máy chủ kém là những gì có thể gây ra nội dung trùng lặp khi nói đến vỏ. Ví dụ: câu lệnh RewriteRule ^request-uri$ /targetscript.php [NC]được lưu trữ trong .htaccess sẽ khớp http://example.com/request-urihttp://example.com/ReQuEsT-Uribởi vì [NC]chỉ ra rằng vỏ không quan trọng khi đánh giá một biểu thức chính quy đó.
Mike

1

Trường hợp nhạy cảm có giá trị.

Nếu có 26 chữ cái, mỗi chữ cái có khả năng viết hoa, đó là 52 ký tự.

4 ký tự có khả năng kết hợp 52 * 52 * 52 * 52, bằng 731616 kết hợp.

Nếu bạn không thể viết hoa các ký tự, số lượng kết hợp là 26 * 26 * 26 * 26 = 456976

Các kết hợp nhiều hơn 14 lần cho 52 ký tự so với 26 ký tự. Vì vậy, để lưu trữ dữ liệu, Url có thể ngắn hơn và nhiều thông tin có thể được truyền qua các mạng có ít dữ liệu được truyền hơn.

Đây là lý do tại sao bạn thấy youtube sử dụng các URL như https://www.youtube.com/watch?v=xXxxXxxX

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.