2016-09-01 16 views
19

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ì?

+1

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ể. –

+0

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

+0

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ó :). –

Trả lời

15

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 [...]"

8

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 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:

What Every Developer Should Know About URLs

RFC 3986

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