CGI: how to get referer header?

nihilo exnihilo at
Thu Mar 27 05:49:59 CET 2003

Tim Roberts wrote:
> nihilo <exnihilo at> wrote:
>>Skip Montanaro wrote:
>>>    Skip> They should be available in the environment as HTTP_USER_AGENT and
>>>    Skip> HTTP_REFERER.  Take a look at
>>>    >> Thanks for the help. I tried using HTTP_USER_AGENT and HTTP_REFERER,
>>>    >> but I get similar results, a tuple containing an empty dictionary.
>>>Sorry, I should have given a specific example.  Try this:
>>>    import os
>>>    print "Referer:", os.environ.get("HTTP_REFERER", "<not present>")
>>>    print "User Agent:", os.environ.get("HTTP_USER_AGENT", "<unknown>")
>>This works great. Thanks so much for the help ;-)
> But do you understand why?  I think it's important to understand why one
> works and the other doesn't.  This particular issue, for example, is not a
> Python issue in any way: it is a CGI issue.
> In CGI, you do not get direct access to the HTTP headers at all.
> Everything in the HTTP headers is disbursed to environment variables before
> the CGI program is invoked.  The content of the request is routed to the
> stdin of the CGI program.
> Thus, cgi.parse_header does not fetch a header and parse it.  Rather, you
> give it a STRING to be parsed.  That string usually comes from an
> environment variable, which came originally from the HTTP headers, but
> cgi.parse_header doesn't actually go looking for a header.

Thanks for the explanation. I did indeed wonder why I was getting HTTP 
header stuff from the environment, but it makes sense now.



More information about the Python-list mailing list