w3c on HTTP
Current version: 2.0.42
jdk/1.4 version: 2.0.37d
jdk/1.1 version: 2.0.26
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
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
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
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
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 ) 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.
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
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
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
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
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
2.0.10 (20010812) Added a LowresImageFilter that removes the lowsrc
attributes from the 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
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
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://:/ 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
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.