| Differences from ``zope.server`` |
| -------------------------------- |
| |
| - Has no non-stdlib dependencies. |
| |
| - No support for non-WSGI servers (no FTP, plain-HTTP, etc); refactorings and |
| slight interface changes as a result. Non-WSGI-supporting code removed. |
| |
| - Slight cleanup in the way application response headers are handled (no more |
| "accumulated headers"). |
| |
| - Supports the HTTP 1.1 "expect/continue" mechanism (required by WSGI spec). |
| |
| - Calls "close()" on the app_iter object returned by the WSGI application. |
| |
| - Allows trusted proxies to override ``wsgi.url_scheme`` for particular |
| requests by supplying the ``X_FORWARDED_PROTO`` header. |
| |
| - Supports an explicit ``wsgi.url_scheme`` parameter for ease of deployment |
| behind SSL proxies. |
| |
| - Different adjustment defaults (less conservative). |
| |
| - Python 3 compatible. |
| |
| - More test coverage (unit tests added, functional tests refactored and more |
| added). |
| |
| - Supports convenience ``waitress.serve`` function (e.g. ``from waitress |
| import serve; serve(app)`` and convenience ``server.run()`` function. |
| |
| - Returns a "real" write method from start_response. |
| |
| - Provides a getsockname method of the server FBO figuring out which port the |
| server is listening on when it's bound to port 0. |
| |
| - Warns when app_iter bytestream numbytes less than or greater than specified |
| Content-Length. |
| |
| - Set content-length header if len(app_iter) == 1 and none provided. |
| |
| - Raise an exception if start_response isnt called before any body write. |
| |
| - channel.write does not accept non-byte-sequences. |
| |
| - Put maintenance check on server rather than channel to avoid a class of |
| DOS. |
| |
| - wsgi.multiprocess set (correctly) to False. |
| |
| - Ensures header total can not exceed a maximum size. |
| |
| - Ensures body total can not exceed a maximum size. |
| |
| - Broken chunked encoding request bodies don't crash the server. |
| |
| - Handles keepalive/pipelining properly (no out of order responses, no |
| premature channel closes). |
| |
| - Send a 500 error to the client when a task raises an uncaught exception |
| (with optional traceback rendering via "expose_traceback" adjustment). |
| |
| - Supports HTTP/1.1 chunked responses when application doesn't set a |
| Content-Length header. |
| |
| - Dont hang a thread up trying to send data to slow clients. |
| |
| - Supports ``wsgi.file_wrapper`` protocol. |