2011-08-19 18 views
6

Có thể sử dụng các ký tự dấu câu khác nhau trong đường dẫn URL HTTP không khôn ngoan? Tôi đang trong quá trình xác định URL tài nguyên cho API. Các URL tài nguyên này sẽ phải được truy cập, lưu trữ và truyền bởi nhiều khách hàng và phần mềm trung gian, vì vậy điều quan trọng là chúng không chứa các ký tự có khả năng gây ra sự cố.Thực tiễn tốt nhất cho các dấu phân cách trong đường dẫn URL HTTP

RFC 3986, section 2.2. "Reserved Characters" quy định cụ thể các ký tự sau như tiểu delims: $ & '() * +,; =

Are bất kỳ trong số này bất hợp pháp để sử dụng tùy ý trong đường dẫn URL trong chương trình HTTP!?

Ngay cả khi chúng là hợp pháp theo các tiêu chuẩn, bất kỳ điều nào trong số này đều có khả năng gây ra các sự cố tương thích trong thế giới thực do phần mềm không tuân thủ không?

Có bất kỳ thông tin chi tiết phụ cụ thể nào mà trước đó bạn đã sử dụng mà không gặp sự cố trong API được triển khai rộng rãi hay không (điều này sẽ cung cấp bằng chứng cho thấy bạn sử dụng an toàn)?

Động lực là chúng ta cần phải phân định cặp khóa-giá trị không có ngữ nghĩa phân cấp. Chúng tôi đang xem xét thực hiện điều này: http://doriantaylor.com/policy/http-url-path-parameter-syntax. Tuy nhiên, nếu điều này có khả năng là một vấn đề, chúng tôi sẽ chỉ làm http://example.com/key1/value1/key2/value2

nhờ

+0

Tôi sẽ đi với lược đồ Dorian Taylor cho đến khi một cái gì đó bị hỏng, và sau đó thêm '/ khóa/giá trị/khóa/giá trị' dưới dạng _alternative_ nhưng giữ cái cũ làm việc để tương thích. – zwol

Trả lời

0

Tùy theo cách bạn đi, hãy chắc chắn của nó; thay đổi các API có thể có vấn đề, ngay cả với một phiên bản được chỉ định. Đó là ý tưởng tồi để có nhiều vị trí cho cùng một tài nguyên - phải có một vị trí kinh điển. Mặc dù trong lý thuyết bạn có thể sử dụng chuyển hướng HTTP 301, nếu bạn lo ngại về tính tương thích thì tốt nhất nên tránh.

Lược đồ thiết lập Dorian Taylor có vẻ hợp lý (và hoàn toàn hợp pháp) và không được đưa ra bất kỳ vấn đề tương thích nào với bất kỳ hệ thống nào (hoặc bất kỳ lỗi nào không phải là lỗi).

Nếu URL của bạn cần được sử dụng làm thông số trong URL mới thì dấu gạch chéo và bằng sẽ là percent encoded, nhưng điều đó đúng cho cả chuỗi truy vấn chuẩn (?&=) và phương án thay thế của bạn, cũng như :// nếu giao thức được bao gồm. Rõ ràng, nếu bạn muốn sử dụng ;,= trong các giá trị của bạn, bạn sẽ cần phải mã hóa chúng.

Vấn đề duy nhất tôi có thể thấy là nếu URL của bạn được lưu trữ trong CSV, nhưng thư viện CSV là phổ biến và trích dẫn các ký tự đặc biệt được xác định rõ.