Tôi không thấy 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 và khi nào nên được sử dụng trên hơn?Sự khác nhau giữa thông số URL và chuỗi truy vấn là gì?
Trả lời
query component được biểu thị bằng ?
đầu tiên trong URI. "Chuỗi truy vấn" có thể là một từ đồng nghĩa (cụm từ 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/[email protected]_=???/1:
http://example.com/?bar1=a&bar2=b
(list of allowed characters in the query component)
Các "định dạng" của thành phần truy vấn tùy thuộc vào các tác giả URI. Một quy ước chung (but nothing more than a convention, as far as the URI standard is concerned ¹) là sử dụng thành phần truy vấn cho các cặp khóa-giá trị, aka. thông số, như trong ví dụ cuối cùng ở trên.
¹ Tiêu chuẩn URI says: "[...] thành phần truy vấn thường được sử dụng để thực hiện việc xác định thông tin theo hình thức 'chìa khóa = giá trị' cặp [...]"
thông số là 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ả tham số và chuỗi truy vấn đều chứa cặp khóa-giá trị.
Trong một yêu cầu GET
, các thông số xuất hiện trong URL thân:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
Trong một yêu cầu POST
, thông số có thể xuất hiện trong URL chính nó, mà còn trong datastream (như được gọi là nội dung).
Chuỗi truy vấn luôn là một phần của URL.
Thông số có thể được chôn trong form-data
datastream khi sử dụng phương thức POST để chúng có thể không xuất hiện trong URL. Có yêu cầu POST
có thể xác định thông 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ì thông số có thể có nhiều giá trị.
Tôi không tìm thấy giải thích cho hành vi này cho đến nay. Đôi khi, đôi khi có thể hữu ích khi "bỏ ẩn" thông số từ yêu cầu POST
hoặc thậm chí cho phép mã xử lý yêu cầu GET
chia sẻ một số phần với mã xử lý POST
. Tất nhiên điều này chỉ có thể làm việc với mã máy chủ hỗ trợ các tham số trong một URL.
Cho đến khi bạn có thông tin chi tiết tốt hơn, tôi khuyên bạn chỉ nên sử dụng thông số trong form-data
luồng dữ liệu của yêu cầu POST
.
Nguồn:
- 1. Sự khác nhau giữa các truy vấn SQL là gì?
- 2. Sự khác nhau giữa Request.Url.Query và Request.QueryString là gì?
- 3. Sự khác nhau giữa .serialize() và .serializeArray() là gì?
- 4. Sự khác nhau giữa truy vấn cụm từ và sử dụng bộ lọc zona là gì?
- 5. Sự khác nhau giữa "bao gồm" và "tham gia" trong truy vấn ActiveRecord là gì?
- 6. Sự khác nhau giữa phải và bộ lọc trong Truy vấn DSL trong elasticsearch là gì?
- 7. Sự khác nhau giữa BatchGetItem và Truy vấn trong DynamoDB là gì?
- 8. Sự khác nhau giữa WebConfigurationManager và ConfigurationManager là gì?
- 9. Sự khác nhau giữa tham số truy vấn HTTP và tham số biểu mẫu HTTP?
- 10. Sự khác nhau giữa window.location = và window.location.replace() là gì?
- 11. Sự khác nhau giữa @ViewChild và @ContentChild là gì?
- 12. Sự khác nhau giữa API Gateway và ESB là gì?
- 13. Sự khác nhau giữa NHibernate và iBATIS.NET là gì?
- 14. Sự khác nhau giữa Json và Jsonp là gì?
- 15. Sự khác nhau chính giữa HTTP và COAP là gì?
- 16. Sự khác nhau giữa Uri.ToString() và Uri.AbsoluteUri là gì?
- 17. Sự khác nhau giữa Request.UserAgent và Request.Browser là gì?
- 18. Sự khác nhau giữa XSL Pattern và XPath là gì?
- 19. Sự khác nhau giữa @dynamic và @synthesize là gì?
- 20. Sự khác nhau giữa NaN và None là gì?
- 21. Sự khác nhau giữa Chuỗi (giá trị) và giá trị là Chuỗi là gì?
- 22. Sự khác nhau giữa Pyrus và Composer là gì?
- 23. Sự khác nhau giữa angular.copy() và gán (=) là gì?
- 24. Sự khác nhau giữa BaseAdapter và ArrayAdapter là gì?
- 25. sự khác nhau giữa CloseableHttpResponse.close() và httpPost.releaseConnection() là gì?
- 26. Sự khác nhau giữa Matcher.lookingAt() và find() là gì?
- 27. Sự khác nhau giữa HTTP 1.0 và 1.1 là gì?
- 28. Sự khác nhau giữa ODBC và OleDB là gì?
- 29. Sự khác nhau giữa PermGen và Metaspace là gì?
- 30. Sự khác nhau giữa __stdcall và _stdcal là gì?
Bạn có một bối cảnh, vì như xa như tôi biết thì hai thường được sử dụng cho cùng - nhưng trường hợp của bạn có thể là bối cảnh cụ thể. –
Tôi không có một ngữ cảnh cụ thể, là một câu hỏi chung. Trong trường hợp nào tôi nên sử dụng một cách thay vì cách khác. Phải có cách sử dụng khác nhau của hai loại đó. – Konst
Cá nhân - Tôi chủ yếu sử dụng tham số từ khi thực hiện chúng trong ngữ cảnh biến hoặc phương thức gọi và chuỗi truy vấn khi nói về chúng trong ngữ cảnh URL. (ví dụ: chuỗi truy vấn được chia thành các tham số cho phương thức). Nhưng nó chỉ là ngôn ngữ để bối cảnh và tình huống khác nhau và tôi nghi ngờ bất cứ ai sẽ săn bạn xuống để sử dụng một trong hai khi bạn "cảm thấy" như nó :). –