Query is part of the URL
The query string is key=value pairs after a ?, joined by &. It is the cheapest way to ask for a subset, because it needs no body and no special method. A GET with a query is still a GET, still cacheable.
Values must be escaped
A URL cannot hold a raw space, &, or = in a value, because those mean structure. Percent-encoding replaces them. A library that builds the query escapes for you; hand-built strings are where the escaping bug lives.