2012-04-01 19 views
9

Tôi muốn biết lý do tại sao nhà thiết kế của tiêu chuẩn URI chọn có // trong định nghĩa của URI như http://."//" trong "http: //"

Tại sao làm cho quá phức tạp? Tại sao không chỉ sử dụng http:?

+1

Vâng, Windows cũng sử dụng '\\ ComputerName \ Resource' để xác định tài nguyên, vì vậy nó không phải là một quy ước lạ ... – Mehrdad

+0

ssh không sử dụng // hoặc \\. – Vincent

+2

Tôi không quan tâm đến '//'. Nó cho phép chúng ta làm những việc như '// example.com/image.png'. –

Trả lời

28

Đây là the answer (Nhà phát minh web Regrets One Thing).

Trong thời gian sau, Tim Berners-Lee cũng sẽ xóa nó.

Lý do nó đã được bao gồm:

Các dấu gạch chéo kép, mặc dù một quy ước lập trình vào thời điểm đó, hóa ra không phải là thực sự cần thiết.

+1

Câu trả lời rất hay. Cảm ơn bạn. – Vincent

+1

Làm thế nào trên thế giới bạn tìm thấy điều này, tôi không có ý tưởng ... – Mehrdad

+3

Tôi nhớ đọc nó một thời gian trước đây. –

10

RFC 2396 bao gồm điều này, FWIW.

http://www.ietf.org/rfc/rfc2396.txt

Các giả trong phần 7 của phần 5.2 đặc biệt là tốt nhất trả lời câu hỏi của bạn, rằng "//" ở đó để biểu thị rằng những gì sau đó là phần thẩm quyền của URI (kể từ khi giả cũng làm cho nó rõ ràng rằng nó không phải là một phần yêu cầu của URI).

if authority is defined then 
     append "//" to result 
     append authority to result 

Bên cạnh đó, nó giải thích rõ ràng hơn một chút trong RFC 3986 phần 3.

Khi quyền là không có mặt, con đường không thể bắt đầu với hai nhân vật dấu gạch chéo ("//"). Những hạn chế này dẫn đến năm các quy tắc ABNF khác nhau cho một đường dẫn (Mục 3.3), chỉ một trong số đó sẽ khớp với bất kỳ tham chiếu URI đã cho nào.

+0

Cảm ơn bạn. Tuy nhiên, nó không giải thích lý do của sự lựa chọn thiết kế này, trong khi ':' có thể là đủ. +1 cho nỗ lực tìm kiếm :) – Vincent

+3

@Vincent - đã thêm tham chiếu 3986 giải thích rõ hơn về nó. Cú pháp URI hỗ trợ phần thẩm quyền không có ở đó (vì vậy, bạn có thể có một tham chiếu như http: foo/bar.html mà có lẽ sẽ có cùng quyền hạn như ngữ cảnh/trang hiện tại). Bây giờ, vì nó không phải là một tính năng thường được sử dụng, như Simeon đã chỉ ra, TBL sẽ làm tốt để tối ưu hóa cho trường hợp phổ biến và loại bỏ chúng, nhưng nó vẫn là một tính năng của cú pháp chứ không phải lỗi.:) –

+0

Tôi đã chọn câu trả lời của bạn vì nó chứa nhiều chi tiết hơn, nhưng câu trả lời của Simeon là tốt. – Vincent