Ticket numbers in this file can be looked up by visiting
http://twistedmatrix.com/trac/ticket/<number>

Twisted Web 10.0.0 (2010-03-01)
===============================

Features
--------
 - Twisted Web in 60 Seconds, a series of short tutorials with self-
   contained examples on a range of common web topics, is now a part
   of the Twisted Web howto documentation. (#4192)

Bugfixes
--------
 - Data and File from twisted.web.static and
   twisted.web.distrib.UserDirectory will now only generate a 200
   response for GET or HEAD requests.
   twisted.web.client.HTTPPageGetter will no longer ignore the case of
   a request method when considering whether to apply special HEAD
   processing to a response. (#446)

 - twisted.web.http.HTTPClient now supports multi-line headers.
   (#2062)

 - Resources served via twisted.web.distrib will no longer encounter a
   Banana error when writing more than 640kB at once to the request
   object. (#3212)

 - The Error, PageRedirect, and InfiniteRedirection exception in
   twisted.web now initialize an empty message parameter by mapping
   the HTTP status code parameter to a descriptive string. Previously
   the lookup would always fail, leaving message empty.  (#3806)

 - The 'wsgi.input' WSGI environment object now supports -1 and None
   as arguments to the read and readlines methods. (#4114)

 - twisted.web.wsgi doesn't unquote QUERY_STRING anymore, thus
   complying with the WSGI reference implementation. (#4143)

 - The HTTP proxy will no longer pass on keep-alive request headers
   from the client, preventing pages from loading then "hanging"
   (leaving the connection open with no hope of termination). (#4179)

Deprecations and Removals
-------------------------
 - Remove '--static' option from twistd web, that served as an alias
   for the '--path' option. (#3907)

Other
-----
 - #3784, #4216, #4242


Twisted Web 9.0.0 (2009-11-24)
==============================

Features
--------
 - There is now an iweb.IRequest interface which specifies the interface that
   request objects provide (#3416)
 - downloadPage now supports the same cookie, redirect, and timeout features
   that getPage supports (#2971)
 - A chapter about WSGI has been added to the twisted.web documentation (#3510)
 - The HTTP auth support in the web server now allows anonymous sessions by
   logging in with ANONYMOUS credentials when no Authorization header is
   provided in a request (#3924, #3936)
 - HTTPClientFactory now accepts a parameter to enable a common deviation from
   the HTTP 1.1 standard by responding to redirects in a POSTed request with a
   GET instead of another POST (#3624)
 - A new basic HTTP/1.1 client API is included in twisted.web.client.Agent
   (#886, #3987)

Fixes
-----
 - Requests for "insecure" children of a static.File (such as paths containing
   encoded directory separators) will now result in a 404 instead of a 500
   (#3549, #3469)
 - When specifying a followRedirect argument to the getPage function, the state
   of redirect-following for other getPage calls should now be unaffected.  It
   was previously overwriting a class attribute which would affect outstanding
   getPage calls (#3192)
 - Downloading an URL of the form "http://example.com:/" will now work,
   ignoring the extraneous colon (#2402)
 - microdom's appendChild method will no longer issue a spurious warning, and
   microdom's methods in general should now issue more meaningful exceptions
   when invalid parameters are passed (#3421)
 - WSGI applications will no longer have spurious Content-Type headers added to
   their responses by the twisted.web server. In addition, WSGI applications
   will no longer be able to specify the server-restricted headers Server and
   Date (#3569)
 - http_headers.Headers now normalizes the case of raw headers passed directly
   to it in the same way that it normalizes the headers passed to setRawHeaders
   (#3557)
 - The distrib module no longer relies on the deprecated woven package (#3559)
 - twisted.web.domhelpers now works with both microdom and minidom (#3600)
 - twisted.web servers will now ignore invalid If-Modified-Since headers instead
   of returning a 500 error (#3601)
 - Certain request-bound memory and file resources are cleaned up slightly
   sooner by the request when the connection is lost (#1621, #3176)
 - xmlrpclib.DateTime objects should now correctly round-trip over twisted.web's
   XMLRPC support in all supported versions of Python, and errors during error
   serialization will no longer hang a twisted.web XMLRPC response (#2446)
 - request.content should now always be seeked to the beginning when
   request.process is called, so application code should never need to seek 
   back manually (#3585)
 - Fetching a child of static.File with a double-slash in the URL (such as
   "example//foo.html") should now return a 404 instead of a traceback and
   500 error (#3631)
 - downloadPage will now fire a Failure on its returned Deferred instead of
   indicating success when the connection is prematurely lost (#3645)
 - static.File will now provide a 404 instead of a 500 error when it was
   constructed with a non-existent file (#3634)
 - microdom should now serialize namespaces correctly (#3672)
 - The HTTP Auth support resource wrapper should no longer corrupt requests and
   cause them to skip a segment in the request path (#3679)
 - The twisted.web WSGI support should now include leading slashes in PATH_INFO,
   and SCRIPT_NAME will be empty if the application is at the root of the
   resource tree. This means that WSGI applications should no longer generate
   URLs with double-slashes in them even if they naively concatenate the values
   (#3721)
 - WSGI applications should now receive the requesting client's IP in the
   REMOTE_ADDR environment variable (#3730)
 - The distrib module should work again. It was unfortunately broken with the
   refactoring of twisted.web's header support (#3697)
 - static.File now supports multiple ranges specified in the Range header
   (#3574)
 - static.File should now generate a correct Content-Length value when the
   requested Range value doesn't fit entirely within the file's contents (#3814)
 - Attempting to call request.finish() after the connection has been lost will
   now immediately raise a RuntimeError (#4013)
 - An HTTP-auth resource should now be able to directly render the wrapped
   avatar, whereas before it would only allow retrieval of child resources
   (#4014)
 - twisted.web's wsgi support should no longer attempt to call request.finish
   twice, which would cause errors in certain cases (#4025)
 - WSGI applications should now be able to handle requests with large bodies
   (#4029)
 - Exceptions raised from WSGI applications should now more reliably be turned
   into 500 errors on the HTTP level (#4019)
 - DeferredResource now correctly passes through exceptions raised from the
   wrapped resource, instead of turning them all into 500 errors (#3932)
 - Agent.request now generates a Host header when no headers are passed at
   (#4131)

Deprecations and Removals
-------------------------
 - The unmaintained and untested twisted.web.monitor module was removed (#2763)
 - The twisted.web.woven package has been removed (#1522)
 - All of the error resources in twisted.web.error are now in
   twisted.web.resource, and accessing them through twisted.web.error is now
   deprecated (#3035)
 - To facilitate a simplification of the timeout logic in server.Session,
   various things have been deprecated (#3457)
   - the loopFactory attribute is now ignored
   - the checkExpired method now does nothing
   - the lifetime parameter to startCheckingExpiration is now ignored
 - The twisted.web.trp module is now deprecated (#2030)

Other
-----
 - #2763, #3540, #3575, #3610, #3605, #1176, #3539, #3750, #3761, #3779, #2677,
   #3782, #3904, #3919, #3418, #3990, #1404, #4050


Web 8.2.0 (2008-12-16)
======================

Features
--------
 - The web server can now deal with multi-value headers in the new attributes of
   Request, requestHeaders and responseHeaders (#165)
 - There is now a resource-wrapper which implements HTTP Basic and Digest auth
   in terms of twisted.cred (#696)
 - It's now possible to limit the number of redirects that client.getPage will
   follow (#2412)
 - The directory-listing code no longer uses Woven (#3257)
 - static.File now supports Range headers with a single range (#1493)
 - twisted.web now has a rudimentary WSGI container (#2753)
 - The web server now supports chunked encoding in requests (#3385)

Fixes
-----
 - The xmlrpc client now raises an error when the server sends an empty
   response (#3399)
 - HTTPPageGetter no longer duplicates default headers when they're explicitly
   overridden in the headers parameter (#1382)
 - The server will no longer timeout clients which are still sending request
   data (#1903)
 - microdom's isEqualToNode now returns False when the nodes aren't equal
   (#2542)

Deprecations and Removals
-------------------------

 - Request.headers and Request.received_headers are not quite deprecated, but
   they are discouraged in favor of requestHeaders and responseHeaders (#165)

Other
-----
 - #909, #687, #2938, #1152, #2930, #2025, #2683, #3471


8.1.0 (2008-05-18)
==================

Fixes
-----

 - Fixed an XMLRPC bug whereby sometimes a callRemote Deferred would
   accidentally be fired twice when a connection was lost during the handling of
   a response (#3152)
 - Fixed a bug in the "Using Twisted Web" document which prevented an example
   resource from being renderable (#3147)
 - The deprecated mktap API is no longer used (#3127)


8.0.0 (2008-03-17)
==================

Features
--------
 - Add support to twisted.web.client.getPage for the HTTP HEAD method. (#2750)

Fixes
-----
 - Set content-type in xmlrpc responses to "text/xml" (#2430)
 - Add more error checking in the xmlrpc.XMLRPC render method, and enforce
   POST requests. (#2505)
 - Reject unicode input to twisted.web.client._parse to reject invalid
   unicode URLs early. (#2628)
 - Correctly re-quote URL path segments when generating an URL string to
   return from Request.prePathURL. (#2934)
 - Make twisted.web.proxy.ProxyClientFactory close the connection when
   reporting a 501 error. (#1089)
 - Fix twisted.web.proxy.ReverseProxyResource to specify the port in the
   host header if different from 80. (#1117)
 - Change twisted.web.proxy.ReverseProxyResource so that it correctly encodes
   the request URI it sends on to the server for which it is a proxy. (#3013)
 - Make "twistd web --personal" use PBServerFactory (#2681)

Misc
----
 - #1996, #2382, #2211, #2633, #2634, #2640, #2752, #238, #2905


0.7.0 (2007-01-02)
==================

Features
--------
 - Python 2.5 is now supported (#1867)
 - twisted.web.xmlrpc now supports the <nil/> xml-rpc extension type
   in both the server and the client (#469)

Fixes
-----
 - Microdom and SUX now manages certain malformed XML more resiliently
   (#1984, #2225, #2298)
 - twisted.web.client.getPage can now deal with an URL of the form
   "http://example.com" (no trailing slash) (#1080)
 - The HTTP server now allows (invalid) URLs with multiple question
   marks (#1550)
 - '=' can now be in the value of a cookie (#1051)
 - Microdom now correctly handles xmlns="" (#2184)

Deprecations and Removals
-------------------------
 - websetroot was removed, because it wasn't working anyway (#945)
 - woven.guard no longer supports the old twisted.cred API (#1440)

Other
-----
The following changes are minor or closely related to other changes.

 - #1636, #1637, #1638, #1936, #1883, #447


0.6.0 (2006-05-21)
==================

Features
--------
 - Basic auth support for the XMLRPC client (#1474).

Fixes
-----
 - More correct datetime parsing.
 - Efficiency improvements (#974)
 - Handle popular non-RFC compliant formats for If-Modified-Since
   headers (#976).
 - Improve support for certain buggy CGI scripts.
 - CONTENT_LENGTH is now available to CGI scripts.
 - Support for even worse HTML in microdom (#1358).
 - Trying to view a user's home page when the user doesn't have a
   ~/public_html no longer displays a traceback (#551).
 - Misc: #543, #1011, #1005, #1287, #1337, #1383, #1079, #1492, #1189,
   #737, #872.


0.5.0
=====
 - Client properly reports timeouts as error
 - "Socially deprecate" woven
 - Fix memory leak in _c_urlarg library
 - Stop using _c_urlarg library
 - Fix 'gzip' and 'bzip2' content-encodings
 - Escape log entries so remote user cannot corrupt the log
 - Commented out range support because it's broken
 - Fix HEAD responses without content-length
