Tôi không thấy có nhiều sự khác biệt giữa các tham số và chuỗi truy vấn, trong URL. Vì vậy, sự khác biệt là gì và khi nào nên sử dụng cái này hơn cái kia?
Tôi không thấy có nhiều sự khác biệt giữa các tham số và chuỗi truy vấn, trong URL. Vì vậy, sự khác biệt là gì và khi nào nên sử dụng cái này hơn cái kia?
Câu trả lời:
Thành phần truy vấn được chỉ định bởi thành phần đầu tiên ?
trong URI. "Chuỗi truy vấn" có thể là một từ đồng nghĩa (thuật ngữ này không được sử dụng trong tiêu chuẩn URI).
Một số ví dụ cho URI HTTP với các thành phần truy vấn:
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
( danh sách các ký tự được phép trong thành phần truy vấn )
"Định dạng" của thành phần truy vấn tùy thuộc vào tác giả của URI. Một quy ước chung ( nhưng không có gì khác hơn một quy ước, theo như tiêu chuẩn URI có liên quan ¹) là sử dụng thành phần truy vấn cho các cặp khóa-giá trị, hay còn gọi là. thông số , như trong ví dụ cuối cùng trên: bar1=a&bar2=b
.
Các tham số như vậy cũng có thể xuất hiện trong các thành phần URI khác, tức là đường dẫn² và phân mảnh. Về tiêu chuẩn URI, việc sử dụng thành phần nào và định dạng nào là tùy thuộc vào bạn.
Ví dụ về URI với các tham số trong đường dẫn, truy vấn và phân đoạn:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹ Tiêu chuẩn URI nói về thành phần truy vấn :
[…] Các thành phần truy vấn thường được sử dụng để mang thông tin nhận dạng dưới dạng cặp "key = value" […]
² Tiêu chuẩn URI nói về thành phần đường dẫn :
[…] Các ký tự dành riêng cho dấu chấm phẩy (";") và bằng ("=") thường được sử dụng để phân tách các tham số và giá trị tham số áp dụng cho phân đoạn đó. Ký tự dành riêng dấu phẩy (",") thường được sử dụng cho các mục đích tương tự.
Tham số là các cặp khóa-giá trị có thể xuất hiện bên trong đường dẫn URL và bắt đầu bằng ký tự dấu chấm phẩy ( ;
).
Chuỗi truy vấn xuất hiện sau đường dẫn (nếu có) và bắt đầu bằng ký tự dấu chấm hỏi ( ?
).
Cả hai tham số và chuỗi truy vấn đều chứa các cặp khóa-giá trị.
Trong một GET
yêu cầu, các thông số xuất hiện trong chính URL:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
Trong một POST
yêu cầu, các tham số có thể xuất hiện trong chính URL, nhưng cũng có thể xuất hiện trong dòng dữ liệu (được gọi là nội dung).
Chuỗi truy vấn luôn là một phần của URL.
Các tham số có thể được chôn trong dòng form-data
dữ liệu khi sử dụng phương thức POST để chúng có thể không xuất hiện trong URL. Có, một POST
yêu cầu có thể xác định các tham số dưới dạng dữ liệu biểu mẫu và trong URL, và điều này không nhất quán vì các tham số có thể có nhiều giá trị.
Tôi không tìm thấy lời giải thích nào cho hành vi này cho đến nay. Tôi đoán đôi khi có thể hữu ích khi "bỏ ẩn" các tham số khỏi một POST
yêu cầu hoặc thậm chí để mã xử lý GET
yêu cầu chia sẻ một số phần với xử lý mã a POST
. Tất nhiên điều này chỉ có thể hoạt động với các tham số hỗ trợ mã máy chủ trong một URL.
Cho đến khi bạn có được thông tin chi tiết tốt hơn, tôi khuyên bạn chỉ nên sử dụng các tham số trong dòng form-data
dữ liệu POST
yêu cầu.
Nguồn: