*** Version 3.0.20 Beta ***
- Bug fixes:
+ - Client sockets are now properly shutdown and drained before being
+ closed. This fixes page truncation issues with clients that aggressively
+ pipeline data on platforms that otherwise discard already written data.
+ The issue mainly affected Opera users and was initially reported
+ by Kevin in #3464439, szotsaki provided additional information to track
+ down the cause.
- Fix latency calculation for shared connections (disabled by default).
It was broken since their introduction in 2009. The calculated latency
for most connections would be 0 in which case the timeout detection
- New directive tolerate-pipelining can be used to enable client-side
pipelining. If enabled (3.0.20 beta enables it by default), Privoxy will
keep pipelined client requests around to deal with them once the current
- request has been served. At the moment this is only done if the current
- request is known to have no body.
+ request has been served.
- New --config-test option lets Privoxy exit after checking whether or not
the configuration seems valid. The limitations noted in TODO #22 and #23
still apply. Logging the problem to the logfile if one is configured and
before the end of the session. limit-cookie-lifetime{0} creates session
cookies and can thus replace the session-cookies-only action in the future.
Idea originally suggested by Rick Sykes in #1049575.
- - Increase the maximum number of actions files from 10 to 30. This is set by
- the compiler directive MAX_AF_FILES so could always be modified by
- recompilation, but the default value was too low since an unused file slot
- is pretty inexpensive.
+ - Increase the hard-coded maximum number of actions and filter files from
+ 10 to 30 (each). It doesn't significantly affect Privoxy's memory usage
+ and recompiling wasn't an option for all Privoxy users that reached the
+ limit.
- Significantly improved reuse of open connections.
- Add support for chunk-encoded client request bodies. Previously
chunk-encoded request bodies weren't guaranteed to be forwarded correctly,
- After preventing the client from pipelining, don't signal keep-alive
intentions. When looking at the response headers alone, it previously
wasn't obvious from the client's perspective that no additional responses
- should be expected. This might improve compatibility with Opera (#3464439).
- - Use new drain_and_close_socket() when closing client sockets in serve().
- Hopefully this fixes the page truncation issue reported with Opera in
- #3464439. Apparently on some platforms immediately closing a client socket
- with both unread and written-but-not-yet-transmitted data may result in the
- connection being torn down prematurely, in which case the client ends up
- with an incomplete response. To prevent this, drain_and_close_socket()
- shuts down our side of the connection (on platforms with shutdown()),
- drains the unread data on the socket and finally calls close_socket().
+ should be expected.
- Reject URLs with invalid port. Previously they were parsed incorrectly and
characters between the port number and the first slash were silently
dropped as shown by curl test 187.