1Revision history for Perl extension HTTP::Proxy 2 30.25 Sun Jul 3 00:28:10 CEST 2011 4 [ENHANCEMENTS] 5 - new Engine: HTTP::Proxy::Engine::Threaded, by Angelos Karageorgiou 6 [FIXES] 7 - Correctly call eod() when the response has no body 8 (closed RT ticket #48310) 9 100.24 Tue Jul 21 21:28:02 CEST 2009 11 [ENHANCEMENTS] 12 - When a short-circuit response was send, the next response 13 would not be filtered at all. This has been fixed. 14 [FIXES] 15 - yet another fix for t/23connect, proposed by Marek Rouchal 16 (closed RT ticket #38995) [test skipped for now] 17 - HTTP::Headers::Util's split_header_words() returns lower case 18 tokens/keys since October 6, 2008. Fix by Maurice Aubrey. 19 (closed RT tickets #43249, #43622) 20 210.23 Thu Sep 4 02:29:47 CEST 2008 22 [ENHANCEMENTS] 23 - HTTP::Proxy::BodyFilter::save had an issue with cygwin because 24 of an incorrect use of File::Spec's catdir(). This is fixed. 25 - CONNECT requests are now forwarded to the upstream proxy, if there 26 is one. Errors from the upstream proxy are relayed to the client. 27 [TESTS] 28 - t/23connect.t does not use sysread() anymore. This time the test 29 should pass about everywhere. 30 310.22 Thu May 1 00:18:38 CEST 2008 32 [TESTS] 33 - increased test coverage 34 - t/23connect.t doesn't need an Internet connection any more, 35 thus closing RT ticket #19653. 36 - t/67complete.t tests HTTP::Proxy::BodyFilter::complete 37 [DOCUMENTATION] 38 - closed RT ticket #33465 (Jimbo), by explaining in a little 39 more detail how HTTP::Proxy::BodyFilter::complete works. 40 410.21 Sun Apr 20 04:34:47 CEST 2008 42 [ENHANCEMENTS] 43 - HTTP::Proxy::Engine::Legacy and HTTP::Proxy::Engine::ScoreBoard 44 log the number of remaining child processes (in addition to 45 their pids), thanks to Amos Shapira. 46 [FIXES] 47 - HTTP::Proxy::BodyFilter::save had a bug that prevented the 48 'filename' parameter to be correctly used to compute the 49 filename to save to, and that made the proxy die the second 50 time the filter was called. 51 This fix allowed to close RT tickets #14548 (Max Maischein), 52 #18644 (Mark Tilford) and #33018 (Roland Stigge and Gunnar Wolf). 53 - HTTP::Proxy::BodyFilter::save had many other bugs, which the 54 test suite allowed to spot and fix. 55 [TESTS] 56 - t/67save.t provides 96% coverage of HTTP::Proxy::BodyFilter::save, 57 and helped fix many bugs in it. 58 - fixed t/22http.t and t/22transparent.t not to break when the 59 DNS wrongly resolves an invalid address. 60 [DOCUMENTATION] 61 - closed RT ticket #25295 (Matsuno Tokuhiro) with a doc patch. 62 630.20 Fri Aug 18 10:25:11 CEST 2006 64 [ENHANCEMENTS] 65 - Added a will_modify() method to HTTP::Proxy::BodyFilter, that 66 lets the proxy know if a filter may modify the content length, 67 thus closing RT ticket #21051 (Chris Dolan) 68 - If no filter in the current stack will modify the content length, 69 then the header is not removed 70 [FIXES] 71 - closed RT tickets #3184 and #20251 (chunked encoding was enforced 72 while transfering data between a client and server using 73 different versions of HTTP, causing unwanted garbage to appear 74 in the data) 75 - removed useless "ERROR: Getting request failed:" messages 76 when there are simply "No more requests from this connection" 77 [INTERNALS] 78 - Removed the HTTP::Proxy::FilterStack class from inside HTTP::Proxy 79 and put it in its own module file 80 - renamed HTTP::Proxy::FilterStack::active() as will_modify() for 81 consistency reasons 82 [TESTS] 83 - updated t/22http.t and t/23connect.t following Ken Williams' 84 recommandations in RT ticket #19986 85 [DOCUMENTATION] 86 - patched a small inconsistency in HTTP::Proxy::BodyFilter's 87 documentation (and closed RT ticket #20303) 88 - fully documented HTTP::Proxy::FilterStack 89 900.19 Fri Apr 28 19:55:41 CEST 2006 91 [ENHANCEMENTS] 92 - HTTP::Proxy::HeaderFilter::simple now lets one define an 93 end() method as well 94 [FIXES] 95 - HTTP::Proxy::(Body|Header)Filter::simple now provide a default 96 filter() that does nothing if their constructor is not given one 97 (thanks to Merijn Brand) 98 - close RT ticket #14548 by correcting the 'filename' check 99 in HTTP::Proxy::BodyFilter::save (Max Maischein) 100 - ERROR messages are always logged (Mark Tilford) 101 [TESTS] 102 - more tests for log() and logmask() in t/11log.t 103 1040.18 Sun Mar 19 23:49:38 CET 2006 105 [ENHANCEMENTS] 106 - the new known_methods() method can return all method 107 names know to HTTP::Proxy (can be helpful with the 108 method parameter of push_filter()) 109 [FIXES] 110 - close RT ticket #14898 by using a per-parent lockfile for 111 HTTP::Proxy::Engine::ScoreBoard (Chris Dolan) 112 - close RT ticket #18243 by adding missing DeltaV methods 113 (Stephen Steneker) 114 [EXAMPLES] 115 - eg/perlmonks.pl - redirect perlmonks.com to perlmonks.org 116 1170.17 Wed Sep 28 23:25:17 CEST 2005 118 [ENHANCEMENTS] 119 - Thanks to Randal Schwartz, a new HTTP::Proxy::Engine::ScoreBoard 120 engine is available. I've benchmarked a twofold speed increase. 121 This engine is still beta, you must enable it by hand. 122 1230.16 Thu Sep 1 19:13:55 CEST 2005 124 [ENHANCEMENTS] 125 - the new HTTP::Proxy::Engine class and its subclasses 126 now handle the life and death of child processes 127 - the Content-Length header is now removed only if body 128 filters will be applied on the response body 129 - HTTP::Proxy now supports some Apache-like attributes 130 (start_servers, max_clients, max_requests_per_child, 131 min_spare_servers, max_spare_servers, keep_alive, 132 max_keep_alive_requests, keep_alive_timeout) 133 - added support for ALL WebDAV/DeltaV methods 134 - the query argument to push_filter(), added in 0.14, should 135 now work (thanks to Simon Cozens for spotting the problem) 136 - the proxy now has a stash, which is a hash where filters can 137 store data (possibly to share it). (Requested by Mark Fowler) 138 Warning: since the proxy forks for each TCP connection, the 139 data is only shared between filters in the same child process. 140 [DEPRECATION] 141 - the maxchild, maxconn and maxserve accessors are now 142 deprecated. They will disappear in the future: 143 + maxchild has no replacement (should be handled by the engine) 144 + maxconn becomes max_connections 145 + maxserve becomes max_keep_alive_requests 146 - Information regarding the way the engine should behave 147 must passed in the constructor or directly to the engine 148 [NEW METHODS] 149 - $proxy->engine() return the HTTP::Proxy::Engine instance 150 - $proxy->new_connection() increase the TCP connections counter 151 (should only be used by HTTP::Proxy::Engine object) 152 [FIXES] 153 - Makefile.PL was not playing nice with Build.PL in the 154 previous distributions. This has been fixed. Sorry for the 155 inconvenience 156 - no more annoying "getsockname() on closed socket GEN0" 157 warnings (they appeared in 0.14) 158 [Win32 SUPPORT] 159 - Win32 is now supported! badly supported, but supported... 160 - until someone writes a decent engine for Win32, the default 161 Win32 engine will be HTTP::Proxy::Engine::NoFork, which 162 can only handle a single TCP connection at a time 163 [EXAMPLES] 164 - eg/yahoogroups.pl - removes ad interruptions from Yahoo! Groups 165 - eg/https.pl - peek/poke at encrypted web pages 166 - eg/logger.pl - improved the logger script 167 1680.15 Tue Apr 5 21:17:40 CEST 2005 169 [ENHANCEMENTS] 170 - added support for WebDAV methods (requested by Christian Laursen) 171 - The filter selection is based on the original request and response, 172 as it should 173 - improved kwalitee 174 [DEPRECATION] 175 - the start() method is no longer supported in HTTP::Proxy::BodyFilter 176 subclasses. Use begin() instead. 177 [EXAMPLES] 178 - eg/pdf.pl - save \.pdf files and send a HTML confirmation instead 179 (idea by Emmanuel Di Pr�toro) 180 1810.14 Tue Mar 29 11:40:51 CEST 2005 182 [ANNOUNCE] 183 - It's been more than a year since last release, which is bad. 184 I now plan to release new versions more often, maybe about 185 once a month, or when there are big changes. 186 [DEPRECATION] 187 - the start() method of HTTP::Proxy::Bodyfilter subclasses 188 is renamed begin(), since it now has an end() counterpart. 189 (On a related note, I improve my English. Be sure to check out 190 http://www.landgren.net/perl/lt-2004.html for details) 191 - start() in filters is therefore declared deprecated, an error 192 message is logged. The start() method will not be called any 193 more as from 0.15. 194 - the FILTER constant is now named FILTERS. FILTER will disappear 195 in 0.15 as well. 196 [ENHANCEMENTS] 197 - subclasses of HTTP::Proxy::BodyFilter can now have a 198 finalisation method, named end() 199 - the start^Wbegin() method of HTTP::Proxy::BodyFilter subclasses 200 now receive the message as an argument 201 - new built-in filter: HTTP::Proxy::BodyFilter::save 202 that can save the message body to a file while browsing 203 - new built-in filter: HTTP::Proxy::BodyFilter::complete 204 that stores the message body in memory and passes it on to the 205 next filters only when it's complete 206 - logs have cleaner prefixes and the pid is always shown 207 - should work under 5.005_03 (Thanks to Mathieu Arnold) 208 - transparent proxying support (mostly to please Martin Zdila 209 and Paul Makepeace) 210 - push_filter() should now accept the query parameter 211 [FIXES] 212 - the FILTER constant is now named FILTERS 213 [BUGS] 214 - the proxy does not work under Win32, except if you force 215 maxchild to 0 (no forking at all). 216 - t/20dummy.t (and a few otrhers) hanged under Win32 217 + Ken Hirsch proposed a patch for HTTP::Daemon 218 (and a workaround for HTTP::Proxy's daemon object) 219 + Bruno De Fraine tracked down the problem to the fork() 220 emulation by Windows threads under Win32 that lead to 221 a deadlock. 222 => both explanations cover the same problem, which I haven't 223 been able to correct yet 224 - all the tests that fork a proxy and a server are therefore 225 skipped under Win32. This is ugly, and will change in the future. 226 [EXAMPLES] 227 - eg/rfc.pl - save rfc\d+\.txt files as we browse them 228 - eg/js.pl - save \.js files as we browse them 229 - eg/dragon.pl - enhance the Dragon Go Server web site 230 - eg/fudd.pl - make the web tawk wike Ewmer J. Fudd 231 - eg/switch.pl - switch proxies as you browse 232 - Changed all the examples so that they can take HTTP::Proxy::new() 233 parameters on the command-line (so, call them with logmask 3, 234 for example) 235 [DOCUMENTATION] 236 - documentation for the filter initialisation methods 237 - removed all references to the so-called "store-and-forward" 238 mechanism (see HTTP::Proxy::BodyFilter::complete) 239 2400.13 Wed Mar 3 17:36:31 CET 2004 241 [ENHANCEMENTS] 242 - CONNECT support (but only transparently...) 243 - the client_headers() method (similar to hop_headers()) give 244 the filters access to the proxy's LWP::UA Client-* headers 245 - filters are applied on all supported methods by default 246 [FIXES] 247 - removed everything regarding control() and control_regex(), 248 which were not used and confusing 249 [TESTS] 250 - tests for CONNECT support 251 - tests for SSL support (not working yet) 252 [EXAMPLES] 253 - eg/adblock.pl - a very simple adblocker 254 - eg/trim.pl - trims whitespace from HTML pages 255 - eg/javascript.pl - add any text right after <body> 256 [DOCUMENTATION] 257 - separate COPYRIGHT and LICENSE sections in all man pages 258 2590.12 Thu Jan 22 23:54:03 CET 2004 260 [ENHANCEMENTS] 261 - send the error message to the client when the Proxy agent dies 262 (usually because of a filter error) 263 - the proxy now sends a X-Forwarded-For header by default 264 (and the proxy method x_forwarded_for can toggle this) 265 - the proxy method client_socket() gives access to the socket 266 connected to the current client (the example in Changes for 0.10 267 was wrong: one can get the IP address of the connected agent from 268 inside a filter with $self->proxy->client_socket->peerhost) 269 [FIXES] 270 - do not block simultaneous connections when not forking 271 - clean up the filter chain after the body-request filters 272 - ensure the filter stack is reinitialised between requests 273 [TESTS] 274 - tests for X-Forwarded-For 275 - test the proxy against http://diveintomark.org/tests/client/http/ 276 [EXAMPLES] 277 - eg/post.pl - outputs the URI and parameters of all POST requests 278 - eg/logger.pl - outputs details of GET and POST requests 279 2800.11 Fri Jan 2 17:02:08 CET 2004 281 [ENHANCEMENTS] 282 - setting maxchild to 0 prevents forking (Jim Cromie) 283 - filters can now match on the query string 284 - hop-by-hop headers and Max-Forwards headers are correctly supported 285 - new mutators added to HTTP::Proxy: via, hop_headers, request, 286 response 287 - filters can now answer in place of the server, which allows 288 for authorisation filters, cache (?) filters, etc. 289 - new examples scripts: proxy-auth.pl 290 [FIXES] 291 - push_filter() now correctly supports several match criteria 292 [TESTS] 293 - all the Via: header tests are now in t/50via.t 294 - t/50standard.t now checks headers for several request types 295 - new tests: 296 + t/51simple2.t - check response header filters with an actual proxy 297 + t/61simple2.t - check response body filters with an actual proxy 298 [INTERNALS] 299 - new method _send_response_headers 300 3010.10 Wed Nov 19 01:36:59 CET 2003 302 303 *** MAJOR INTERFACE CHANGES *** 304 305 - new base classes HTTP::Proxy::HeaderFilter and 306 HTTP::Proxy::BodyFilter 307 - some useful built-in filter classes: 308 HTTP::Proxy::BodyFilter::htmlparser 309 HTTP::Proxy::BodyFilter::htmltext 310 HTTP::Proxy::BodyFilter::lines 311 HTTP::Proxy::BodyFilter::simple 312 HTTP::Proxy::BodyFilter::tags 313 HTTP::Proxy::HeaderFilter::simple 314 HTTP::Proxy::HeaderFilter::standard 315 - tests for the internal class HTTP::Proxy::FilterStack 316 - tests for the built-in filters 317 - the examples are up-to-date with the new interface 318 - new/enhanced accessors: 319 + the proxy host() attribute becomes actually useful: by default, 320 the proxy is only usable by local user-agents (the socket 321 is bound to localhost) 322 + the filters proxy() accessor gives access to the proxy itself. 323 For example, one can get the IP address of the agent connected 324 to the proxy from inside a filter ($self->proxy->daemon->peerhost) 325 - many documentation changes 326 327 This version is NOT compatible with the previous ones 328 regarding the way filters work. 329 330 *** MAJOR INTERFACE CHANGES *** 331 3320.09 Fri Aug 15 21:12:17 CEST 2003 333 - maxserve is now correctly handled 334 - corrected a bug in the t/20keepalive.t test file that 335 made the tests fail on some machines 336 3370.08 Thu Mar 13 01:41:42 CET 2003 338 - cleaned up support for filters 339 - added support for "buffering" filters 340 and a new HTTP::Proxy::FilterStack class 341 - added an anonymiser script (eg/anonymiser.pl) 342 - the tests won't break if a local proxy is configured 343 - the interfaces are very likely to change soon 344 3450.07 Tue Feb 18 22:30:43 CET 2003 346 - the proxy now supports persistent connexions (Yay!) 347 - and tests to check for it 348 - and a new timeout accessor 349 3500.06 Mon Feb 17 00:21:37 CET 2003 351 - better forking system and better reaping of zombies 352 (thanks to David Landgren and St�phane Payrard) 353 Still won't work under Windows, though :-( 354 - replaced verbose() by logmask(), so as to fine-tune 355 the logging system 356 - put some of the test functions in a test module (t::Utils) 357 3580.05 Tue Feb 4 00:47:23 CET 2003 359 - explicitly refuse CONNECT 360 - better support for TRACE method 361 - support the Via: Header (a MUST in RFC 2616) 362 - filters, but this needs more work 363 3640.04 Sat Nov 30 12:19:22 CET 2002 365 - accept connection from other hosts 366 - better ftp support (no test yet) 367 - basic gopher support (no test yet) 368 - better HTTP error handling 369 - use CRLF in HTTP headers 370 3710.03 Fri Nov 29 11:17:36 CET 2002 372 - url() method gives a url to reach the proxy 373 - new 'control' attribute defines the control URL 374 - better subprocess management by preforking child processes 375 (thanks to Eric Cholet) 376 - a children handles only one request at a time, for better 377 performance (this means we only do HTTP/1.0 for now) 378 - correctly handle the Proxy-Connection and Connection headers 379 3800.02 Thu Oct 24 23:45:08 CEST 2002 381 - the system now forks to handle several connections 382 - but needs better test suites 383 3840.01 Tue Oct 1 11:54:07 CEST 2002 385 - original version 386