chiark / gitweb /
cgi.py: Implement the `HEAD' request method.
[chopwood] / cgi.py
diff --git a/cgi.py b/cgi.py
index 1aa2917950ad99350c143c70bf6486119eccc338..01fb868862dca5ad83ffaf8d76a8232cecca1b25 100644 (file)
--- a/cgi.py
+++ b/cgi.py
@@ -123,6 +123,8 @@ class HTTPOutput (O.FileOutput):
     for h in O.http_headers(content_type = content_type, **kw):
       me.writeln(h)
     me.writeln('')
+    if METHOD == 'HEAD':
+      HEADER_DONE()
 
 def cookie(name, value, **kw):
   """
@@ -318,6 +320,7 @@ PARAM = []
 PARAMDICT = {}
 PATH = []
 SSLP = False
+HEADER_DONE = lambda: None
 
 ## Regular expressions for splitting apart query and cookie strings.
 R_QSPLIT = RX.compile('[;&]')
@@ -388,7 +391,7 @@ def cgiparse():
   METHOD = getenv('REQUEST_METHOD')
 
   ## Acquire the query string.
-  if METHOD == 'GET':
+  if METHOD in ['GET', 'HEAD']:
     q = getenv('QUERY_STRING')
 
   elif METHOD == 'POST':
@@ -465,6 +468,8 @@ class Subcommand (SC.Subcommand):
     the list of path elements is non-empty.
     """
 
+    global HEADER_DONE
+
     ## We're going to make a pass over the supplied parameters, and we'll
     ## check them off against the formal parameters as we go; so we'll need
     ## to be able to look them up.  We'll also keep track of the ones we've