What is the difference between URL parameters and query strings?

UrlQuery StringUrl Parameters

Url Problem Overview


I don't see much of a difference between the parameters and the query strings, in the URL. So what is the difference and when should one be used over the other?

Url Solutions


Solution 1 - Url

The query component is indicated by the first ? in a URI. "Query string" might be a synonym (this term is not used in the URI standard).

Some examples for HTTP URIs with query components:

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

(list of allowed characters in the query component)

The "format" of the query component is up to the URI authors. A common convention (but nothing more than a convention, as far as the URI standard is concerned¹) is to use the query component for key-value pairs, aka. parameters, like in the last example above: bar1=a&bar2=b.

Such parameters could also appear in the other URI components, i.e., the path² and the fragment. As far as the URI standard is concerned, it’s up to you which component and which format to use.

Example URI with parameters in the path, the query, and the fragment:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ The URI standard says about the query component:

> […] query components are often used to carry identifying information in the form of "key=value" pairs […]

² The URI standard says about the path component:

> […] the semicolon (";") and equals ("=") reserved characters are often used to delimit parameters and parameter values applicable to that segment. The comma (",") reserved character is often used for similar purposes.

Solution 2 - Url

Parameters are key-value pairs that can appear inside URL path, and start with a semicolon character (;).

Query string appears after the path (if any) and starts with a question mark character (?).

Both parameters and query string contain key-value pairs.

In a GET request, parameters appear in the URL itself:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

In a POST request, parameters can appear in the URL itself, but also in the datastream (as known as content).

Query string is always a part of the URL.

Parameters can be buried in form-data datastream when using POST method so they may not appear in the URL. Yes a POST request can define parameters as form data and in the URL, and this is not inconsistent because parameters can have several values.

I've found no explaination for this behavior so far. I guess it might be useful sometimes to "unhide" parameters from a POST request, or even let the code handling a GET request share some parts with the code handling a POST. Of course this can work only with server code supporting parameters in a URL.

Until you get better insights, I suggest you to use parameters only in form-data datastream of POST requests.

Sources:

What Every Developer Should Know About URLs

RFC 3986

Solution 3 - Url

PATH PARAMS vs QUERY PARAMS

Let say we have base url https://gov.philippines.com, example of path params;

https://gov.philippines.com/sign-up
https://gov.philippines.com/sign-in

So basically path params are the /sign-up or /sign-in, in short, it is the extended path in base-url, while the query params;

https://gov.philippines.com/sign-up?for=membership
https://gov.philippines.com/sign-in?as=admin

The ?for=membership and ?as=admin are the query params wth key and value, that most use case of this, is for filtering the request

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionkoninosView Question on Stackoverflow
Solution 1 - UrlunorView Answer on Stackoverflow
Solution 2 - UrlLaurent CailletteView Answer on Stackoverflow
Solution 3 - UrlMarvinView Answer on Stackoverflow