# WebKit 0.6 Release Notes

Webware for Python 0.6

## Introduction

- Version 0.6 was released on 12/2/2001.

## Major Changes

- The Page class interface was refactored with regards to various writeFoo() methods. The changes make it much easier for a subclass to customize and extend what it inherits from its superclass.

  If you have existing subclasses, you will need to make some quick changes before your pages look right. The largest change is to rename writeBody() methods to writeContent(). Also, if you override writeHeader(), you will want to refactor it, possibly by overriding writeStyleSheet() and writeHeadParts() (taking care to invoke super before adding your customizations).

  Please review the Page summary and doc strings in the source code for details.

  If you feel burdened by updating your existing page methods, you can quickly change their inheritance to Page051 (summary, source), a new class which sports the old style of write methods found in WebKit 0.5.1.

- Removed the unstable Async*.py classes which offered a different approach to handling requests as well as implementing the HTTP protocol. As with earlier versions of WebKit, you will need to run a web server such as Apache. [Chuck]
- Extracted Cans into a preliminary CanKit, delivered to Jay Love <jsliv@jslove.org>. These were under developed and should be a separate component anyway. [Chuck]

## New Features

- The app server can be run in a directory other than the WebKit directory. This allows multiple running Webware instances to share the same code. Added MakeAppWorkDir.py tool to create such a runtime environment. [Robin D]

## Improvements and Refinements

- Added settings IncludeFancyTraceback and FancyTracebackContext which affect the error report generated when WebKit catches an exception (using the cgitb.py module). See Application config in the User's Guide for more information.
- The Request object will parse GET style variables even in a POST request. So parameters can be passed to WebKit both as POST variables and as part of the URL in the same request.
- You can use session IDs embedded in URLs instead of requiring the user to have cookies enabled in order to use sessions. To use it, set UseAutomaticPathSessions to 1 in Application.config. [Geoff T, Heiko Hees]
- The headers in HTTPResponse are now case insensitive.
- UnknownFileTypeServlet can response to HEAD and will not include the contents of the file. [Ken L]
- HTTPServlet now implements a basic HEAD request. (The GNU wget program will now work on a WebKit site.) [Ken L]
- WebKit now works with Python 2.2b2 and still Python 1.5.2. This is the last release (other than any 0.6.x maintenance releases) that will support Python 1.5.2. Future versions will require Python 2.0 which has been out for over a year now. [Chuck]
- SecurePage is easier to use with pages that have forms. [Geoff T]
- When using SessionFileStore, session writing is controlled by a lock. [Geoff T]

## Security

- Sessions ids are harder to guess. [Ken L]

## Minor API Changes

We don't track every change to the interface, but here are some notables:

- Added Session.invalidate() method to clear out a session.
- Added HTTPRequest.isSessionExpired(). [Geoff T]
- Added dictionary style access to Session object values. [Jay L]
- HTTPServlet will now invoke respondToFoo() for any FOO HTTP request method. If not implemented, the response is now an HTTP 501 Not Implemented (prior WebKits raised a SubclassResponsibilityError). [Ken L]

## Bugfixes

- Make Application.isSessionIDProblematic use the session's custom timeout.
- Fixed bugs in cookie handling for Python 2.1 and earlier.
- Fixed wkcgi.exe so that it works with IIS as well as Apache.
- Fixed ThreadedAppServer.py and OneShotAdapter.py so that binary file uploads work properly on Windows. [Geoff]