I'm reading RFC2396 on URLs which says
Many URI include components consisting of or delimited by, certain special characters. These characters are called "reserved", since their usage within the URI component is limited to their reserved purpose.
But the section on the query part of url (between ? and #) says
3.4. Query Component The query component is a string of information to be interpreted by the resource.
query = *uric
Within a query component, the characters ";", "/", "?", ":", "@", "&", "=", "+", ",", and "$" are reserved.
What is the "reserved purpose of each of those characters? I understand what &, =, and + are used for in the query, but what about the other characters?
More practically, should I always url encode those characters when they're in the query? Browsers and servers that I've seen handle : and ; and other characters without being encoded