2013-12-11 25 views
24

Tôi có một câu hỏi liên quan đến URL:URL có // trong phần đường dẫn có hợp lệ không?

Tôi đã đọc các RFC 3986 và vẫn có một câu hỏi về một URL:

Nếu một URI có chứa một thành phần chính quyền, sau đó các thành phần đường dẫn
phải hoặc trống hoặc bắt đầu bằng ký tự gạch chéo ("/"). Nếu URI không chứa thành phần có thẩm quyền thì đường dẫn không thể bắt đầu
với hai ký tự gạch chéo ("//"). Ngoài ra, tham chiếu URI
(Phần 4.1) có thể là tham chiếu đường dẫn tương đối, trong trường hợp này,
đoạn đường dẫn đầu tiên không được chứa ký tự đại tràng (":"). ABNF
yêu cầu năm quy tắc riêng biệt để phân biệt các trường hợp này, chỉ một trong số sẽ phù hợp với chuỗi con đường dẫn trong một tham chiếu URI đã cho. Chúng tôi sử dụng cụm từ chung "thành phần đường dẫn" để mô tả chuỗi con URI
được trình phân tích cú pháp khớp với một trong các quy tắc này.

tôi biết, rằng //server.com:80/path/info là hợp lệ (đó là một URL có liên quan schema)

tôi cũng biết rằng http://server.com:80/path//info là hợp lệ.

Nhưng tôi không chắc chắn liệu một Sau đây là hợp lệ:

http://server.com:80//path/info 

Vấn đề đằng sau câu hỏi của tôi là, rằng một cookie không được gửi đến http://server.com:80//path/info, khi tạo ra bởi URI http://server.com:80/path/info với hạn chế để /path

Trả lời

21

Xem url with multiple forward slashes, does it break anything?, Are there any downsides to using double-slashes in URLs?, What does the double slash mean in URLs?RFC 3986 - Uniform Resource Identifier (URI): Generic Syntax.

Đồng thuận: trình duyệt sẽ thực hiện yêu cầu, chúng sẽ không thay đổi yêu cầu. Nhân vật / là tách con đường, nhưng như các đoạn đường được định nghĩa là:

path-abempty = *("/" segment) 
segment  = *pchar 

Có nghĩa là các dấu gạch chéo sau http://example.com/ trực tiếp có thể được theo sau bởi một dấu gạch chéo, vô cùng tận. Máy chủ có thể bỏ qua nó, nhưng trình duyệt không, như bạn đã tìm ra.

Cụm từ:

Nếu một URI không chứa một thành phần chính quyền, sau đó con đường có thể không bắt đầu với hai nhân vật dấu gạch chéo ("//").

Cho phép protocol-relative URLs, nhưng cụ thể trong trường hợp đó không có thẩm quyền (server.com:80 trong ví dụ của bạn) có thể có mặt.

Vì vậy: có, nó hợp lệ, không, không sử dụng.

+0

Vì vậy, đây là lỗi trình duyệt, rằng cookie cho // đường dẫn không được gửi đến/path? –

+0

@Christian không phải là lỗi, '// path' khác với'/path' như '/ foo/path' và' /// path'. Có một "thư mục con" không có tên trong '// path', có giá trị.Vì vậy, nếu bạn thiết lập một cookie cho '// path', nó không thể được đọc từ'/path', cũng như cách khác. :) – CodeCaster

+1

Âm thanh hợp pháp. Tôi nghĩ rằng tôi sẽ đợi một hoặc hai ngày, nếu có một câu trả lời hoặc ý kiến ​​khác và chấp nhận câu trả lời nếu không. –

Các vấn đề liên quan