2010-10-21 28 views
8

Tôi biết rằng% 20 và + cả hai giải mã với cùng một giá trị nhị phân (một khoảng trắng) và đối với hầu hết các máy chủ web, đặc biệt là các máy ánh xạ tới các tệp vật lý mà chúng trỏ đến cùng một tài nguyên.Có phải% 20 và + giống nhau trong url http không?

Nhưng câu hỏi của tôi là, phải có một url như http://www.example.org/hello%20world trỏ đến cùng một tài nguyên như http://www.example.org/hello+world, chúng có giống nhau không?

Trong HTTP/1.0 + không ánh xạ tới không gian, vì vậy tôi đặc biệt hỏi về HTTP/1.1.

+0

Không bao giờ được xem xét trước đây, sẽ rất thú vị khi xem câu trả lời đúng về câu hỏi hay này. – Dave

Trả lời

4

Chỉ trong chuỗi truy vấn: dấu cộng là ký tự dành riêng, vì vậy phải được mã hóa để chuyển '+' thực tế trong đường dẫn hoặc chuỗi truy vấn. Nó sử dụng như là một thay thế cho không gian là một W3C Recommendation mà chỉ áp dụng cho các chuỗi truy vấn:

Trong chuỗi truy vấn, dấu cộng được dành riêng như ký hiệu viết tắt cho một không gian. Do đó, các dấu cộng thực sự phải được mã hóa. Phương pháp này đã được sử dụng để làm cho URI truy vấn dễ dàng vượt qua trong các hệ thống không cho phép khoảng trắng.

URI so sánh (RFC 2616):

Khi so sánh hai URI để quyết định xem chúng phù hợp hay không, một khách hàng NÊN sử dụng một case-sensitive octet-by-octet so sánh của toàn bộ URI, với những trường hợp ngoại lệ:

- A port that is empty or not given is equivalent to the default 
    port for that URI-reference; 

    - Comparisons of host names MUST be case-insensitive; 

    - Comparisons of scheme names MUST be case-insensitive; 

    - An empty abs_path is equivalent to an abs_path of "/". 

nhân vật khác hơn là những người trong "dành riêng" và " các bộ không an toàn (xem RFC 2396 [42]) tương đương với mã hóa ""% "HEX HEX" của chúng.

ký tự Reserved (RFC 2396)

";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

Vì vậy, trên chuyến đi thứ ba: không có gì chính thức tuyên bố chúng giống nhau. Sử dụng '+' theo nghĩa đen để trực tiếp http://example.org/hello+world vào một thư mục có tên là hello+world không chính xác, nhưng không có gì để nói thay vào đó nó được coi là tương đương với khoảng trắng.

+1

Trong phần được trích dẫn, nó nói "** Trong chuỗi truy vấn, ** dấu cộng được dành riêng làm kí hiệu viết tắt cho một khoảng trắng." Trong chuỗi truy vấn không giống như trong url nói chung. Trong trường hợp chung câu trả lời là không, tuy nhiên nó có thể là – Davy8

+1

Trong ví dụ của OP về 'http: // www.example.org/hello% 20world' và' http: // www.example.org/hello + world' Phần bạn trích dẫn không áp dụng vì nó không phải là một phần của chuỗi truy vấn. – Davy8

+0

@ Davy8 - Tôi nghĩ bạn đã đá tôi qua câu trả lời chính xác ngay bây giờ :) –

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