Just so we're on the same page, a typical POST request looks something like this:
POST /some/page HTTP/1.1 <-- request line
Host: www.example.com <-------------------\
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; en-US) <--| headers
Content-Length: 27 <-------------------/
... some other headers ...
<-- blank line
username=peter&password=123 <-- POST data, if any
The environment variables beginning HTTP_
are a hangover from the days when CGI scripts were the main way to serve dynamic content, and they indicate to your server-side code that the client supplied a particular header as part of the request. From the CGI spec:
Meta-variables with names beginning with "HTTP_
" contain values read from the client request header fields, if the protocol used is HTTP. The HTTP header field name is converted to upper case, has all occurrences of "-
" replaced with "_
" and has "HTTP_
" prepended to give the meta-variable name.
The Authorization:
header used in a number of HTTP authentication mechanisms; the usual flow is:
- browser attempts to request a page
- server responds with "401 Unauthorized" and a
WWW-Authenticate:
header containing a scheme and (sometimes) a challenge
- browser prompts user for credentials, then re-sends the request with an
Authorization:
header containing a response to the challenge
The exact format of the challenge and response differs depending on which authentication scheme is in use; RFC2617 (which gpcz linked to) covers "basic" (most common, sends base64-encoded "username:password") and "digest" (contains a cryptographic hash), and NTLM is another that's seen in some Windows environments.