RabbIT proxy for a faster web RabbIT logo
SourceForge Logo
 
General
About
Getting started
FAQ
Performance
 
Readme
Licence
Changelog
 
RFC2616
RFC2068
w3c on HTTP

New release
rabbit 4.0

Download
Current version: 2.0.42
Java/5+ only
RabbIT2.jar
RabbIT2.zip
RabbIT2.tar.gz
jdk/1.4 version: 2.0.37d
RabbIT2.0.37d.jar

jdk/1.1 version: 2.0.26
RabbIT2-2.0.26.zip
RabbIT2-2.0.26.tar.gz

dnsjava source dnsjava-1.6.2.tar.gz
dnsjava-1.6.4.tar.gz

Contacts
Mailing lists

Robert Olofsson
robo@khelekore.org

  Changelog

2.0.41 (20050803) Major code cleanup and added some missing javadoc. Removed a lot of static, ought to be able to run several proxies in the same jvm/classloader (some more testing needed). It also makes it much easier to reuse parts of rabbit in other projects. 2.0.40 (20050721) Fixed a bug in IPAccess (low, high) swap was bad. Fixed another bug in the cache. Closes channels that were not closed correctly. Status pages are now also accessable by ip address. Fixed a file descriptor leak due to SetSoTimeout (jvm bug). Moved a few things to nio and also some more code cleanups. 2.0.39 (20050616) Fixed a bug in the cache. Added channels and transferTo calls, ought to increase performance and decrease memory usage. Added a StackTrace status page. More generics. Connections are now selected on instead of read() with timeout, ought to decrease the number of threads needed. All tunnels (ssl and ntlm) are now handled by one thread with a selector (instead of two per tunnel). Minor adjustments to admin pages like sorting general status report. 2.0.38 (20050522) Moved to java/5 with generics and other things. Cleaned up some warnings from -Xlint:all. Added a SQLProxyAuth that works as ProxyAuth, but uses a sql database for users instead of a file. Made accessfilters be an interface and instances instead of static method calls. Created HTTPFilter and made all the http filters implement it, removed some reflection for calling the http filters. Removed the reflection for setting up the handlers, took initial steps to remove lots of static data. Fixed a bug with the html parser and long script sections. FileSender now also sends a Last-Modified header (for the web browser cache). Created a HTMLFilterFactory and removed the reflection from the html filtering parts of rabbit. Added some missing javadoc. 2.0.37 (20050301) Fixed a problem where some resources where not cached. Added a summary-mode and a regexp matcher to the CacheStatus program. Removed some synchronization from the cache. Log rotation must close files before moving them to work under windows, rework synchronization of logging to handle that. Changed some containers to unsynchronized versions. Made it compilable with a java/5 compiler. Fixed a problem with host name lookups and the adress cache to reuse more connections. 2.0.36 (20050111) Added Locale.US to the SimpleDateFormat since date parsing fails for people using some other default locale otherwise. Added a ReverseProxy filter so that it is possible to use RabbIT as a reverse proxy. Made it possible to configure which dns handler to use, since dnsjava may fail on some setups. Fixed a workaround for handling broken web servers that send multiple last-chunks. 2.0.35 (20041005) Made the 504 response hold links to alternative sites. Fixed a few things that Findbugs complained about. Better handling of the cache when it is set to zero. Better handling of resources that are too big for the cache. Fixed a problem with SSL, proxy chains and proxy authentication combined. 2.0.34 (20040803) Fixed a problem with image conversion under windows. Updated the default convert arguments so it strips exif headers and similar things. Added more mime types handlers. Fixed a file name typo for SSLHandler.java. Fixed a bug in the html parser. Made the cache status expiry date human readable again. Some code cleanup and initial work on better response header handling. 2.0.33 (20040701) Some more memory optimization. Some code cleanup. NTLM autorized connections are now tunneled since they need to be kept alive and reuse same server connection. Fixed a memory leak in the cache. Keys and hooks are no longer kept around with soft references (the hit ratio was really low). 2.0.32 (20040622) More memory optimization. Data hooks in the cache are now saved to disk since they often contain large strings (cookies). Data keys in the cache are now stored on file as well. Fixed a problem with HTTP/0.9 responses (rabbit tried to read the header and that failed). The cache status page now only shows a partial listing of the cached files, to be able to handle big caches. Fixed proxy chaining for ssl connections. Minor adjustment in how rejected connections were handled. Dnsjava has a cache and the cache time can now be set. Dnsjava updated to 1.6.4. Removed some copy paste. Fixed some problems with the administration pages. 2.0.31 (20040516) More memory optimization. Handle some broken headers better when in no-strict mode. Tried to make the cache faster. Made some more classes Externalizable for faster cache handling. Removed the file name from cache entries, the NCache generates file names on request instead. Fixed some leaks of the cache streams. Fixed a file leak in FileSender. Added a log file rotator meta page. Shrinks the connection handler pool when connections are no longer in use. Clean up some unused variables in the Connection class when it is idle. RabbIT now uses dnsjava to have fully threaded DNS lookups. 2.0.30 (20040407) Added a class that makes it possible to run several rabbit proxies with different configurations in the same jvm (by using a custom class loader). More string cache handling. Fixed a problem where rabbit cached 304 (and other) responses as zero sized files which then caused broken images and such. Fixed a null pointer exception when handling range requests. 2.0.29 (20040117) Keep a string cache for http headers, saves quite a lot of Strings and shrinks the cache.index. Started using the collection classes instead of Vector and Hashtable. 2.0.28 (20031126) Added two example config files, onlycaching.conf and onlycompressing.conf. Fixed a NullPointerException when checking for stale cache entries. 2.0.27 (20030707) RabbIT now requires jre/1.4 due to some networking fixes. A bug in the Cookie-id control that changed caching rules for requests with authorization was fixed. Default package is now a jar file. Added the config option StrictHTTP which can be used to make rabbit less strict when it is false, this makes RabbIT work better with a few broken servers. 2.0.26 (20030603) Requests without a host (and port) are now assumed to be for RabbIT to handle, this should end the "I try to access the web configuration but all I got was a 400-reply". Changed the default argument to convert (-flatten instead of [0]) since png to jpeg conversion would return very small blank images instead of small but ok-looking images this way. RabbIT does no longer normally use cookie based ids to enable/disable cache rabbit relies on normal Cache-Control headers to be sent. If the option is needed it can now be controlled in the config file. The html parser was updated to handle (javascript) better. 2.0.25 (20030512) Fixed a problem where deflate data were compressed and the Content-Encoding header were overwritten with only gzip. Fixed a bug where private headers were deleted before they were sent to the client, causing some Set-Cookie:s to be removed and non-working sites. Fixed a problem where only the response line of the response header was read, it happened when the reason phrase was missing. Run findbugs on RabbIT source and fixed some of the problems it reported (did not agree on all of its warning). ImageHandler now handle the case that cache setup fails, due to better http/1.1 handling. 2.0.24 (20030424) Fixed a problem where 304 responses from the cache sometimes caused multiple responses. Fixed a few odd cases where a 200 OK response from the cache could be used in response to if-range requests (they were revalidated with the server, which is ok, but not optimal). Added the option to turn off filtering based on user agent (to the DontFilterFilter) since at least java handles compressed pages badly. 2.0.23 (20030304) Fixed a problem where content in request got corrupted. Worked more on caching of partial content. Fixed a few problem with date parsing. Fixed so that the "Host" header has correct port if any port was specified. A few other minor HTTP/1.1 compliance fixes. 2.0.22 (20030111) More work on http/1.1 compliance. Fixed so that it is possible to compile and run with jdk/1.1 again. 2.0.21 (20021125) More work on http/1.1. Update more headers when combining after a revalidate, Handle(drop) Content-Length and chunked Transfer-Encoding. Return a stale entry or a 504 when communication with the server fails. Added handling of range requests, including multipart/byteranges in requests. License change (from old BSD to modern BSD). Updated config file with more documentation. 2.0.20 (20020915) More work on http/1.1. Handle http headers better (in the really strange cases). Handle Warning headers better. Handle the Co-Advisors test suite (all 464 cases, more test cases coming soon). Better handling of 1xx responses when client is using HTTP/1.0. Updated the readLine method to be strict. 2.0.19 (20020821) Added checks for min-fresh in requests. Some more handling of Connection headers and quoted tokens. Added handling for Max-Forwards for TRACE and OPTIONS requests.Some more minor fixes for http compliance and no-cache directives. Some more handling of cache control like max-stale and proxy-revalidate. 2.0.18 (20020729) Mostly HTTP/1.1 fixes. Updated handling of the cache system, it should now handle max-age, s-maxage, no-store controls correctly. Via headers are handled as they should. Stale caches are now revalidated instead of thrown away in a few more cases. Currently 242 out of 245 tests are ok, the remaining 3 tests have bugs (the test, not RabbIT is broken). 2.0.17 (20020729) Added a filter (optional) that always perform proxy authentication on all users. Major HTTP/1.1 compliance work, this work is due to the nice people over at Co-Advisor/The measurment factory, http://coad.measurement-factory.com/. HTTP/1.1 changes include (better) handling of Vary, Cache-Control, Cache revalidation, Chunked input (from client forms), If-Match and If-None-Match handling. Currently 200 out of 203 tests are ok. 2.0.16 (20020106) Tried to fix the problems of html on the form '...framespacing="0"">' which used to break RabbIT's parser. For now we replace the second '"' with a ' ' and restart from that point. This seems to achieve what mozilla does. Added a maximum tries before giving up trying to connect to a site (in certain special cases RabbIT could loop forever trying to connect to an unreacable host). 2.0.15 (20011211) Fixed some problems with HTTP/0.9. Fixed some problems with chunking. Made sure that "Content-Length" headers are removed if we chunk. Hopefully Fixed all problems with the HTTP/1.1 and chunking data to the clients. 2.0.14 (20011121) More performance handling. Made GeneralHeader faster by removing the hashtable and toLowerCase calls. Less writes of zero length buffers. Chunk data to client if the request is using HTTP/1.1 (this has a funny effect on the GZIP header for pages that get compressed, but GZipOutputStream has to many private methods to override that behaviour.). 2.0.13 (20010930) (Not released) Made sure all threads RabbIT start have a name. Performance tweaks. Made sure that tag has a lower case tag that is used by the standard filters, quite a timesaver. Tried to speed up the cache systems handling of addEntry. Added a TagType to have static objects for the most common (filterwise) tag types. 2.0.12 (20010916) Fixed the problem with proxy chains and DNS lookups. RabbIT should not do DNS if it is connected to a proxy, but the HTTPBaseFilter did it. Performance tweaks in the HTMLParser, HTMLBlock, Token and FilterHandler this seems to give an 11% speedup for html parsing. Performance testing. Fixed ImageHandler so that it removes converted files that got bigger by the conversion. 2.0.11 (20010904) Broke up some long methods to several smaller for better readability. Updated and added documentation. Pooled the metahandlers since it was possible with a minor patch. Ran RabbIT through jmp (my own java memory profiler) to find and close some leaks. Try to help the garbage collector by nulling certain objects. Updated CacheStatus to show number of entries in the cache. Fixed the problems with proxy authorization for upstream proxy if RabbIT is part of a proxy chain. Updated the link verifier so that it ignores anchors. Only call setup once for mime type handlers. 2.0.10 (20010812) Added a LowresImageFilter that removes the lowsrc attributes from the <img> tags. Updated documentation. Updated the DontCacheFilter so that it can also operate on the mime type of the response. Also added the option to only cache on mime/URL. Updated the HTTPDateParser to handle bad/old date types better, added logging of unparseable date strings. 2.0.9 (20010608) Minor bug fixes to the HTMLParser. Updated documentation and javadoc. Accept HTTP headers with duplicate response lines even though this is a bug in the web server. Added a DontCacheFilter that can be used to not cache certain pages which can be useful for bad mannered chat systems etc. 2.0.8 (20010414) Minor bug fixes. Added a small program to inspect the cache from the command line. Minor performance especially in HTMLParser. 2.0.7 (20010212) Minor performance tweaks. Minor bug fixes. Better compliance to RFC 2616. Better error handling. 2.0.6 (20001227) Added some public interfaces to ConnectionHandler to make it possible to have a status page for outgoing keepalive connections. Added Erik Agsjö's patch to handle basic auth in URLs. Wrote a thred pool to handle connections more efficiently. 2.0.5 (20000610) Fixed simple(no proxy chaining but otherwise working) SSL-proxy handling. SSL proxying is configurable to allow connects to all ports, no ports or a specified set of ports (like 443). Added Support for cache handlers, they work like the ordinary handlers but are run only on resources that are fetched from the cache. This means that it is simple to write your own imagehandler that takes an unmodified image from the cache and sends it filtered by the request made. Kinda nice to have but to do this always uses more resources. 2.0.4 (20000220) Fixed the LinkVerifier tool in such a way that it is actually usable for simple html-page linkverification, but still does not handle mail and ftp. Bugfixes in http package, this fixes a few sites that have been broken. Fixes in the installer. Fixed a major bug in HTTPInputStream with keepalive and known + unknown size. 2.0.3 (20000209) Fixed a little with the support script and the Makefile for RabbIT. Added some code to allow for public access in the /FileSender/public/ directory which means that the logo and adreplacer can be distributed with the proxy. Still needs a better (more general) accessfilter though. Made the installer better. Minor bugfixes and cleanup in the rabbit.http package. Updated documentation. 2.0.2 (20000129) Fixed a few bugs concerning keep alive and the HTTP response header, fixed a bug with NT and cache directories. Build GZIPHandler as an intermediate(*) to FilterHandler, this means that it is possible to gzip text/plain etc, without filtering those streams. Added uuencoding to the Coder so it is possible to do proxy authentication to the proxy behind RabbIT. Made RabbIT use HTTP/1.1 which keep alive when talking to web servers. This lead to a major rewrite of the input layer, but to the better. Fixed HTMLParser so that it compiles cleanly with Jikes (damn fast compiler, although it is not always nice :-). Fixed a bug concerning requests without an response body (like HEAD requests). Fixed a bug in GZIPHandler so that it does not gzip already compressed (gzip or compress) streams. Created GeneralHeader to allow for HTTPFooter which is useful when sending chunked data. Fixed a bug in HTTPHeader regarding response phrases that are multiline. Fixed a few bugs in ImageHandler and NCache. * FilterHandler will only gzip if GZIPHandler is gzipping, due to static setup functions. 2.0.1 (991201) Added a DontFilterFilter that makes sure we dont filter pages that will break the HTMLparser (bad HTML is evil!). More documentation. Added a few fixes for old HTTP/0.9 request mode. Added a BlinkFilter that removes blink and /blink tags. Added gzipping of text/html data, this saves quite a bit of data sent. 2.0 (991009) Cleaned up a few things, corrected some documentation. The response header is no longer stored in the cache file it is in the hashtable so we can access without reading files. Fixed some troubles with ImageSender so from now on we dont rewrite the converted image. 2.0b (991005) This is a total rewrite of most things. RabbIT is now a totally filtering proxy with http header filters and contenthandlers all to make it easier to extend. This version should be HTTP/1.1 compatible (mostly :-). Speed should be the same, codesize is about the same. Config file format has changed to allow greater flexibility. Filtering of content is now done depending on the mime type of the document being loaded. Accessfilters are tightend to make RabbIT even less vounorable to attacks. RabbIT is mostly developed under jdk1.2 but should still work with jdk1.1 (although you may have to compile it several times for it to work out all dependencies). All packages have been renamed to rabbit.xxx. Basically they should be named something like org.rabbitproxy.xxx (rabbit.org is already taken :-/) but I havent bothered to registering a domain yet. 1.8 (990403) New filtermodel, this affects current configurations but makes RabbIT more accurate with advertising. Made RabbIT handle request to http://<proxyhost>:<proxyport>/ as metapages. This makes the jconfig always work (If it couldnt resolv the host proxy it used to fail). A lot of codecleanup due to new filtermodels. 1.7 (990224) Fixed a few bugs where RabbIT thrashed blank.gif and other small size images. Made the ImageSender send the original image if the converted one is bigger (will still log the converted size so you can find out how often this happen). Added a filter that makes ads in layer be excahnged with the file AdFilter uses. 1.6 (990121) The step to NCache is now totally complete. Small changes to the cache that should make it even better. Better system for errordetection and errorhandling. RabbIT now tells you that it has problems and what the problem is in a nice manner. Bugfixes. 1.5 (981214) The cache is rewritten to the new much improved NCache. This should improve cacheing and make the proxy more stable. Updated errorpages to use HTMLPage layout so we get a consistent interface to the proxy. Added JConfig a new configuration applet. Saves config back to disk. Configuration of users and accesslist is possible. Bugfixes of course. Don't cache pages with cookie passwords (like hotmail uses). 1.4 (981116) Accesslog is now in (almost) Common Log Format so most webanalysers should work. Logging has spread out to keep it with as much info as possible. Runtime configuration is working (although you cant save it back to disk. Updated xyzStatus pages to handle full html-output, this means that Proxy and Cache dont have to deal with html-output, which is nice cause they have nothing to do with it. CodeCleanup in general and some more thought of general rules for the proxy. Added HTMLPage to make metapages look alike and be configurable. 1.3 (981021) Accesscontrol should now work, but is untested. Fixed a bug in HTTPHeader that caused troubles with non-forgiving webservers. Many pages that didnt work are now working. BackgroundFilter now also handles stylesheet-specified backgrounds. 1.2 (980817) Filters are now fully configurable from the file filter.conf. Rewrote Config-handling. Rewrote filter setup-routines to handle the new filter.conf. Config-files moved to conf/ as standard. 1.1 Fixed Meta-page handling. Metapages are now behind authentication. Added a userfile to keep the authenticated users. Rewrote the basic idea of how a response is generated. Wrote the metapagehandlers to supply the basic things found in 1.0. 1.0 First stable version released.