I'm sure all of you have seen something like this:

"POST /root/level1/blabla.php?login=admin&password=password HTTP/1.0"

My questions...

Where is it specified that we have to use '?' and '&' in this way. Is it a specification of CGI of HTML or what?
Why can't we use spaces and have to use these characters? There is space before HTTP/1.0, is it not?
Are these the same characters that you'd use in telnet to retrieve the pages or do they (telnet) conform to a different set of rules?
Are there more characters to use in CGI like this?

Pls post any good links. I read the http://www.ietf.org/rfc/rfc2616.txt but i feel that it doesn't explain things in a manner I'd understand from my background (LAN, Java). I'd really like to learn about how is the CGI build and what are other ways to enable user/website communication.