2009-05-02 22 views
20

Có bất kỳ hạn chế chính thức nào về việc ký tự nào được phép trong tên thông số URL không?URL HTTP - các ký tự được phép trong tên thông số

Tôi đã đọc RFC3986 ("Mã định danh tài nguyên đồng nhất (URI): Cú pháp chung") nhưng không có kết luận dứt khoát.

Tôi biết có những hạn chế thực tế, nhưng nó sẽ thực sự bị cấm làm điều gì đó như:

param with\funny<chars>=some_value

miễn là tôi thoát khỏi nó một cách chính xác:

ký tự
param%20with%1cfunny%3cchars%3e=some_value

Trả lời

9

Không có giới hạn về tên thông số thoát trong thông số URI. Tuy nhiên, có thể có những hạn chế trong phần mềm phía máy chủ mà bạn sử dụng. Điều này đặc biệt đúng nếu bạn sử dụng các kịch bản "tự chế" để giải thích các URI.

+0

Đó chính xác là lý do tôi đã hỏi ... http://stackoverflow.com/questions/814613/how-to-read-data-from-url-using-javascript - Tôi đoán câu trả lời của tôi sẽ cần sửa chữa lớn để làm cho nó chính xác trong các tình huống bất thường. – Tomalak

+0

Ah, điều đó làm phức tạp tình hình một cách đáng kể. Đặc biệt khi sử dụng '&' làm dấu phân cách chỉ là một quy ước; một số khác có thể được sử dụng thay thế, ví dụ: ',' và ';' thường được sử dụng khá nhiều. Ngoài ra, nhiều công cụ máy chủ (PHP, Rails,…) hỗ trợ các đối số lồng nhau, vì vậy đây sẽ là một URI hợp pháp với truy vấn: http://example.com/?a=b;c[1]=x;c[2] = y… Rất nhiều ứng dụng web thực sự sử dụng ký hiệu truy vấn này cho dữ liệu biểu mẫu (tùy chọn, hộp kiểm ...) để nhận dữ liệu giống mảng. –

+0

Vì vậy, tôi đoán nó tóm tắt "không có chức năng chính xác nào để lấy tham số ra khỏi URL" - trừ khi bạn chuẩn bị chấp nhận rằng "c [1] = x" là một quy ước phía máy chủ và tham số bạn đang tìm kiếm là * trên thực tế * được gọi là "c [1]" trên máy khách (điều này sẽ đúng về mặt thực tế, nhưng đến kỳ lạ đối với những người quen với lập trình phía máy chủ ...). – Tomalak

1

Có được dành riêng cho các URL , nhưng miễn là bạn thoát (urlencode) thì bạn sẽ ổn thôi.

Tùy thuộc vào khung được sử dụng, bạn có thể nhận được ngoại lệ nếu bạn cố gửi các giá trị đáng ngờ. ASP.NET có lọc nội dung sẽ ném ngoại lệ nếu bạn cố gắng gửi dữ liệu "không an toàn", như tập lệnh hoặc HTML. Đó là một tính năng của khung công tác mặc dù thay vì giới hạn hoặc quy tắc được thực thi bởi cú pháp URL.

4

Bạn cũng nên đọc RFC2396. Dường như có nhiều thông tin hơn RFC3986.

+1

Mục 3.4. ("Thành phần truy vấn") có nó: "Thành phần truy vấn là một chuỗi thông tin được giải thích bởi tài nguyên." Điều này về cơ bản có nghĩa là "bất cứ điều gì đi", đúng như tôi nghĩ. – Tomalak

+0

Nó không chỉ là HTTP cụ thể, thật không may. Nhưng tôi đoán không có tiêu chuẩn ở đây, chỉ là quy ước. – Tomalak

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