1 Ticket numbers in this file can be looked up by visiting
2 http://twistedmatrix.com/trac/ticket/<number>
4 Twisted Web 12.1.0 (2012-06-02)
5 ===============================
9 - twisted.web.client.Agent and ProxyAgent now support persistent
11 - Added twisted.web.template.renderElement, a function which renders
12 an Element to a response. (#5395)
13 - twisted.web.client.HTTPConnectionPool now ensures that failed
14 queries on persistent connections are retried, when possible.
16 - twisted.web.template.XMLFile now supports FilePath objects. (#5509)
17 - twisted.web.template.renderElement takes a doctype keyword
18 argument, which will be written as the first line of the response,
19 defaulting to the HTML5 doctype. (#5560)
23 - twisted.web.util.formatFailure now quotes all data in its output to
24 avoid it being mistakenly interpreted as markup. (#4896)
25 - twisted.web.distrib now lets distributed servers set the response
28 Deprecations and Removals
29 -------------------------
30 - PHP3Script and PHPScript were removed from twisted.web.twcgi,
31 deprecated since 10.1. Use twcgi.FilteredScript instead. (#5456)
32 - twisted.web.template.XMLFile's support for file objects and
33 filenames is now deprecated. Use the new support for FilePath
35 - twisted.web.server.date_time_string and
36 twisted.web.server.string_date_time are now deprecated in favor of
37 twisted.web.http.datetimeToString and twisted.web.
38 http.stringToDatetime (#5535)
42 - #4966, #5460, #5490, #5591, #5602, #5609, #5612
45 Twisted Web 12.0.0 (2012-02-10)
46 ===============================
50 - twisted.web.util.redirectTo now raises TypeError if the URL passed
51 to it is a unicode string instead of a byte string. (#5236)
52 - The new class twisted.web.template.CharRef provides support for
53 inserting numeric character references in output generated by
54 twisted.web.template. (#5408)
56 Improved Documentation
57 ----------------------
58 - The Twisted Web howto now has a section on proxies and reverse
60 - The web client howto now covers ContentDecoderAgent and links to an
61 example of its use. (#5415)
68 Twisted Web 11.1.0 (2011-11-15)
69 ===============================
73 - twisted.web.client.ProxyAgent is a new HTTP/1.1 web client which
74 adds proxy support. (#1774)
75 - twisted.web.client.Agent now takes optional connectTimeout and
76 bindAddress arguments which are forwarded to the subsequent
77 connectTCP/connectSSL call. (#3450)
78 - The new class twisted.web.client.FileBodyProducer makes it easy to
79 upload data in HTTP requests made using the Agent client APIs.
81 - twisted.web.xmlrpc.XMLRPC now allows its lookupProcedure method to
82 be overridden to change how XML-RPC procedures are dispatched.
84 - A new HTTP cookie-aware Twisted Web Agent wrapper is included in
85 twisted.web.client.CookieAgent (#4922)
86 - New class twisted.web.template.TagLoader provides an
87 ITemplateLoader implementation which loads already-created
88 twisted.web.iweb.IRenderable providers. (#5040)
89 - The new class twisted.web.client.RedirectAgent adds redirect
90 support to the HTTP 1.1 client stack. (#5157)
91 - twisted.web.template now supports HTML tags from the HTML5
92 standard, including <canvas> and <video>. (#5306)
96 - twisted.web.client.getPage and .downloadPage now only fire their
97 result Deferred after the underlying connection they use has been
99 - twisted.web.server now omits the default Content-Type header from
100 NOT MODIFIED responses. (#4156)
101 - twisted.web.server now responds correctly to 'Expect: 100-continue'
102 headers, although this is not yet usefully exposed to user code.
104 - twisted.web.client.Agent no longer raises an exception if a server
105 responds and closes the connection before the request has been
106 fully transmitted. (#5013)
107 - twisted.web.http_headers.Headers now correctly capitalizes the
108 header names Content-MD5, DNT, ETag, P3P, TE, and X-XSS-Protection.
110 - twisted.web.template now escapes more inputs to comments which
111 require escaping in the output. (#5275)
113 Improved Documentation
114 ----------------------
115 - The twisted.web.template howto now documents the common idiom of
116 yielding tag clones from a renderer. (#5286)
117 - CookieAgent is now documented in the twisted.web.client how-to.
120 Deprecations and Removals
121 -------------------------
122 - twisted.web.google is now deprecated. (#5209)
126 - #4951, #5057, #5175, #5288, #5316
129 Twisted Web 11.0.0 (2011-04-01)
130 ===============================
134 - twisted.web._newclient.HTTPParser (and therefore Agent) now handles
135 HTTP headers delimited by bare LF newlines. (#3833)
136 - twisted.web.client.downloadPage now accepts the `afterFoundGet`
137 parameter, with the same meaning as the `getPage` parameter of the
139 - twisted.web.xmlrpc.Proxy constructor now takes additional 'timeout'
140 and 'reactor' arguments. The 'timeout' argument defaults to 30
142 - Twisted Web now has a templating system, twisted.web.template,
143 which is a direct, simplified derivative of Divmod Nevow. (#4939)
147 - HTTPPageGetter now adds the port to the host header if it is not
148 the default for that scheme. (#3857)
149 - twisted.web.http.Request.write now raises an exception if it is
150 called after response generation has already finished. (#4317)
151 - twisted.web.client.HTTPPageGetter and twisted.web.client.getPage
152 now no longer make two requests when using afterFoundGet. (#4760)
153 - twisted.web.twcgi no longer adds an extra "content-type" header to
154 CGI responses. (#4786)
155 - twisted.web will now properly specify an encoding (UTF-8) on error,
156 redirect, and directory listing pages, so that IE7 and previous
157 will not improperly guess the 'utf7' encoding in these cases.
158 Please note that Twisted still sets a *default* content-type of
159 'text/html', and you shouldn't rely on that: you should set the
160 encoding appropriately in your application. (#4900)
161 - twisted.web.http.Request.setHost now sets the port in the host
162 header if it is not the default. (#4918)
163 - default NOT_IMPLEMENTED and NOT_ALLOWED pages now quote the request
164 method and URI respectively, to protect against browsers which
165 don't quote those values for us. (#4978)
167 Improved Documentation
168 ----------------------
169 - The XML-RPC howto now includes an example demonstrating how to
170 access the HTTP request object in a server-side XML-RPC method.
172 - The Twisted Web client howto now uses the correct, public name for
173 twisted.web.client.Response. (#4769)
174 - Some broken links were fixed, descriptions were updated, and new
175 API links were added in the Resource Templating documentation
176 (resource-templates.xhtml) (#4968)
180 - #2271, #2386, #4162, #4733, #4855, #4911, #4973
183 Twisted Web 10.2.0 (2010-11-29)
184 ===============================
188 - twisted.web.xmlrpc.XMLRPC.xmlrpc_* methods can now be decorated
189 using withRequest to cause them to be passed the HTTP request
194 - twisted.web.xmlrpc.QueryProtocol.handleResponse now disconnects
195 from the server, meaning that Twisted XML-RPC clients disconnect
196 from the server as soon as they receive a response, rather than
197 relying on the server to disconnect. (#2518)
198 - twisted.web.twcgi now generates responses containing all
199 occurrences of duplicate headers produced by CGI scripts, not just
200 the last value. (#4742)
202 Deprecations and Removals
203 -------------------------
204 - twisted.web.trp, which has been deprecated since Twisted 9.0, was
209 - #4576, #4577, #4709, #4723
212 Twisted Web 10.1.0 (2010-06-27)
213 ===============================
217 - twisted.web.xmlrpc.XMLRPC and twisted.web.xmlrpc.Proxy now expose
218 xmlrpclib's support of datetime.datetime objects if useDateTime is
220 - HTTP11ClientProtocol now has an abort() method for cancelling an
221 outstanding request by closing the connection before receiving the
222 entire response. (#3811)
223 - twisted.web.http_headers.Headers initializer now rejects
224 incorrectly structured dictionaries. (#4022)
225 - twisted.web.client.Agent now supports HTTPS URLs. (#4023)
226 - twisted.web.xmlrpc.Proxy.callRemote now returns a Deferred which
227 can be cancelled to abort the attempted XML-RPC call. (#4377)
231 - twisted.web.guard now logs out avatars even if a request completes
232 with an error. (#4411)
233 - twisted.web.xmlrpc.XMLRPC will now no longer trigger a RuntimeError
234 by trying to write responses to closed connections. (#4423)
236 Improved Documentation
237 ----------------------
238 - Fix broken links to deliverBody and iweb.UNKNOWN_LENGTH in
239 doc/web/howto/client.xhtml. (#4507)
241 Deprecations and Removals
242 -------------------------
243 - twisted.web.twcgi.PHP3Script and twisted.web.twcgi.PHPScript are
244 now deprecated. (#516)
251 Twisted Web 10.0.0 (2010-03-01)
252 ===============================
256 - Twisted Web in 60 Seconds, a series of short tutorials with self-
257 contained examples on a range of common web topics, is now a part
258 of the Twisted Web howto documentation. (#4192)
262 - Data and File from twisted.web.static and
263 twisted.web.distrib.UserDirectory will now only generate a 200
264 response for GET or HEAD requests.
265 twisted.web.client.HTTPPageGetter will no longer ignore the case of
266 a request method when considering whether to apply special HEAD
267 processing to a response. (#446)
269 - twisted.web.http.HTTPClient now supports multi-line headers.
272 - Resources served via twisted.web.distrib will no longer encounter a
273 Banana error when writing more than 640kB at once to the request
276 - The Error, PageRedirect, and InfiniteRedirection exception in
277 twisted.web now initialize an empty message parameter by mapping
278 the HTTP status code parameter to a descriptive string. Previously
279 the lookup would always fail, leaving message empty. (#3806)
281 - The 'wsgi.input' WSGI environment object now supports -1 and None
282 as arguments to the read and readlines methods. (#4114)
284 - twisted.web.wsgi doesn't unquote QUERY_STRING anymore, thus
285 complying with the WSGI reference implementation. (#4143)
287 - The HTTP proxy will no longer pass on keep-alive request headers
288 from the client, preventing pages from loading then "hanging"
289 (leaving the connection open with no hope of termination). (#4179)
291 Deprecations and Removals
292 -------------------------
293 - Remove '--static' option from twistd web, that served as an alias
294 for the '--path' option. (#3907)
298 - #3784, #4216, #4242
301 Twisted Web 9.0.0 (2009-11-24)
302 ==============================
306 - There is now an iweb.IRequest interface which specifies the interface that
307 request objects provide (#3416)
308 - downloadPage now supports the same cookie, redirect, and timeout features
309 that getPage supports (#2971)
310 - A chapter about WSGI has been added to the twisted.web documentation (#3510)
311 - The HTTP auth support in the web server now allows anonymous sessions by
312 logging in with ANONYMOUS credentials when no Authorization header is
313 provided in a request (#3924, #3936)
314 - HTTPClientFactory now accepts a parameter to enable a common deviation from
315 the HTTP 1.1 standard by responding to redirects in a POSTed request with a
316 GET instead of another POST (#3624)
317 - A new basic HTTP/1.1 client API is included in twisted.web.client.Agent
322 - Requests for "insecure" children of a static.File (such as paths containing
323 encoded directory separators) will now result in a 404 instead of a 500
325 - When specifying a followRedirect argument to the getPage function, the state
326 of redirect-following for other getPage calls should now be unaffected. It
327 was previously overwriting a class attribute which would affect outstanding
328 getPage calls (#3192)
329 - Downloading an URL of the form "http://example.com:/" will now work,
330 ignoring the extraneous colon (#2402)
331 - microdom's appendChild method will no longer issue a spurious warning, and
332 microdom's methods in general should now issue more meaningful exceptions
333 when invalid parameters are passed (#3421)
334 - WSGI applications will no longer have spurious Content-Type headers added to
335 their responses by the twisted.web server. In addition, WSGI applications
336 will no longer be able to specify the server-restricted headers Server and
338 - http_headers.Headers now normalizes the case of raw headers passed directly
339 to it in the same way that it normalizes the headers passed to setRawHeaders
341 - The distrib module no longer relies on the deprecated woven package (#3559)
342 - twisted.web.domhelpers now works with both microdom and minidom (#3600)
343 - twisted.web servers will now ignore invalid If-Modified-Since headers instead
344 of returning a 500 error (#3601)
345 - Certain request-bound memory and file resources are cleaned up slightly
346 sooner by the request when the connection is lost (#1621, #3176)
347 - xmlrpclib.DateTime objects should now correctly round-trip over twisted.web's
348 XMLRPC support in all supported versions of Python, and errors during error
349 serialization will no longer hang a twisted.web XMLRPC response (#2446)
350 - request.content should now always be seeked to the beginning when
351 request.process is called, so application code should never need to seek
352 back manually (#3585)
353 - Fetching a child of static.File with a double-slash in the URL (such as
354 "example//foo.html") should now return a 404 instead of a traceback and
356 - downloadPage will now fire a Failure on its returned Deferred instead of
357 indicating success when the connection is prematurely lost (#3645)
358 - static.File will now provide a 404 instead of a 500 error when it was
359 constructed with a non-existent file (#3634)
360 - microdom should now serialize namespaces correctly (#3672)
361 - The HTTP Auth support resource wrapper should no longer corrupt requests and
362 cause them to skip a segment in the request path (#3679)
363 - The twisted.web WSGI support should now include leading slashes in PATH_INFO,
364 and SCRIPT_NAME will be empty if the application is at the root of the
365 resource tree. This means that WSGI applications should no longer generate
366 URLs with double-slashes in them even if they naively concatenate the values
368 - WSGI applications should now receive the requesting client's IP in the
369 REMOTE_ADDR environment variable (#3730)
370 - The distrib module should work again. It was unfortunately broken with the
371 refactoring of twisted.web's header support (#3697)
372 - static.File now supports multiple ranges specified in the Range header
374 - static.File should now generate a correct Content-Length value when the
375 requested Range value doesn't fit entirely within the file's contents (#3814)
376 - Attempting to call request.finish() after the connection has been lost will
377 now immediately raise a RuntimeError (#4013)
378 - An HTTP-auth resource should now be able to directly render the wrapped
379 avatar, whereas before it would only allow retrieval of child resources
381 - twisted.web's wsgi support should no longer attempt to call request.finish
382 twice, which would cause errors in certain cases (#4025)
383 - WSGI applications should now be able to handle requests with large bodies
385 - Exceptions raised from WSGI applications should now more reliably be turned
386 into 500 errors on the HTTP level (#4019)
387 - DeferredResource now correctly passes through exceptions raised from the
388 wrapped resource, instead of turning them all into 500 errors (#3932)
389 - Agent.request now generates a Host header when no headers are passed at
392 Deprecations and Removals
393 -------------------------
394 - The unmaintained and untested twisted.web.monitor module was removed (#2763)
395 - The twisted.web.woven package has been removed (#1522)
396 - All of the error resources in twisted.web.error are now in
397 twisted.web.resource, and accessing them through twisted.web.error is now
399 - To facilitate a simplification of the timeout logic in server.Session,
400 various things have been deprecated (#3457)
401 - the loopFactory attribute is now ignored
402 - the checkExpired method now does nothing
403 - the lifetime parameter to startCheckingExpiration is now ignored
404 - The twisted.web.trp module is now deprecated (#2030)
408 - #2763, #3540, #3575, #3610, #3605, #1176, #3539, #3750, #3761, #3779, #2677,
409 #3782, #3904, #3919, #3418, #3990, #1404, #4050
412 Web 8.2.0 (2008-12-16)
413 ======================
417 - The web server can now deal with multi-value headers in the new attributes of
418 Request, requestHeaders and responseHeaders (#165)
419 - There is now a resource-wrapper which implements HTTP Basic and Digest auth
420 in terms of twisted.cred (#696)
421 - It's now possible to limit the number of redirects that client.getPage will
423 - The directory-listing code no longer uses Woven (#3257)
424 - static.File now supports Range headers with a single range (#1493)
425 - twisted.web now has a rudimentary WSGI container (#2753)
426 - The web server now supports chunked encoding in requests (#3385)
430 - The xmlrpc client now raises an error when the server sends an empty
432 - HTTPPageGetter no longer duplicates default headers when they're explicitly
433 overridden in the headers parameter (#1382)
434 - The server will no longer timeout clients which are still sending request
436 - microdom's isEqualToNode now returns False when the nodes aren't equal
439 Deprecations and Removals
440 -------------------------
442 - Request.headers and Request.received_headers are not quite deprecated, but
443 they are discouraged in favor of requestHeaders and responseHeaders (#165)
447 - #909, #687, #2938, #1152, #2930, #2025, #2683, #3471
456 - Fixed an XMLRPC bug whereby sometimes a callRemote Deferred would
457 accidentally be fired twice when a connection was lost during the handling of
459 - Fixed a bug in the "Using Twisted Web" document which prevented an example
460 resource from being renderable (#3147)
461 - The deprecated mktap API is no longer used (#3127)
469 - Add support to twisted.web.client.getPage for the HTTP HEAD method. (#2750)
473 - Set content-type in xmlrpc responses to "text/xml" (#2430)
474 - Add more error checking in the xmlrpc.XMLRPC render method, and enforce
475 POST requests. (#2505)
476 - Reject unicode input to twisted.web.client._parse to reject invalid
477 unicode URLs early. (#2628)
478 - Correctly re-quote URL path segments when generating an URL string to
479 return from Request.prePathURL. (#2934)
480 - Make twisted.web.proxy.ProxyClientFactory close the connection when
481 reporting a 501 error. (#1089)
482 - Fix twisted.web.proxy.ReverseProxyResource to specify the port in the
483 host header if different from 80. (#1117)
484 - Change twisted.web.proxy.ReverseProxyResource so that it correctly encodes
485 the request URI it sends on to the server for which it is a proxy. (#3013)
486 - Make "twistd web --personal" use PBServerFactory (#2681)
490 - #1996, #2382, #2211, #2633, #2634, #2640, #2752, #238, #2905
498 - Python 2.5 is now supported (#1867)
499 - twisted.web.xmlrpc now supports the <nil/> xml-rpc extension type
500 in both the server and the client (#469)
504 - Microdom and SUX now manages certain malformed XML more resiliently
505 (#1984, #2225, #2298)
506 - twisted.web.client.getPage can now deal with an URL of the form
507 "http://example.com" (no trailing slash) (#1080)
508 - The HTTP server now allows (invalid) URLs with multiple question
510 - '=' can now be in the value of a cookie (#1051)
511 - Microdom now correctly handles xmlns="" (#2184)
513 Deprecations and Removals
514 -------------------------
515 - websetroot was removed, because it wasn't working anyway (#945)
516 - woven.guard no longer supports the old twisted.cred API (#1440)
520 The following changes are minor or closely related to other changes.
522 - #1636, #1637, #1638, #1936, #1883, #447
530 - Basic auth support for the XMLRPC client (#1474).
534 - More correct datetime parsing.
535 - Efficiency improvements (#974)
536 - Handle popular non-RFC compliant formats for If-Modified-Since
538 - Improve support for certain buggy CGI scripts.
539 - CONTENT_LENGTH is now available to CGI scripts.
540 - Support for even worse HTML in microdom (#1358).
541 - Trying to view a user's home page when the user doesn't have a
542 ~/public_html no longer displays a traceback (#551).
543 - Misc: #543, #1011, #1005, #1287, #1337, #1383, #1079, #1492, #1189,
549 - Client properly reports timeouts as error
550 - "Socially deprecate" woven
551 - Fix memory leak in _c_urlarg library
552 - Stop using _c_urlarg library
553 - Fix 'gzip' and 'bzip2' content-encodings
554 - Escape log entries so remote user cannot corrupt the log
555 - Commented out range support because it's broken
556 - Fix HEAD responses without content-length