Index: twisted/web/http.py
===================================================================
--- twisted/web/http.py	(revision 26065)
+++ twisted/web/http.py	(working copy)
@@ -715,6 +715,7 @@
                         self.channel.transport.loseConnection()
                         return
                     raise
+            self.content.seek(0, 0)
 
         self.process()
 
Index: twisted/web/test/test_http.py
===================================================================
--- twisted/web/test/test_http.py	(revision 26065)
+++ twisted/web/test/test_http.py	(working copy)
@@ -809,6 +809,11 @@
                 testcase.assertEquals(self.args["key"], ["value"])
                 testcase.assertEquals(self.args["empty"], [""])
                 testcase.assertEquals(self.args["multiple"], ["two words", "more words"])
+                # This assertion should come last in case the self.args
+                # attribute is someday set on demand; in that case,
+                # self.content would be consumed on the first access
+                # to self.args in the assertions above.
+                testcase.assertEquals(self.content.read(), query)
                 testcase.didRequest = 1
                 self.finish()
 
