root/trunk/CHANGES @ 766

Revision 766, 26.9 kB (checked in by bradfitz, 21 months ago)

SECURITY: patch from Jeremey James <jbj@…> to not crash
on zero byte chunked upload when buffered uploads are enabled.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1    -- SECURITY: patch from Jeremey James <jbj@forbidden.co.uk> to not crash
2       on zero byte chunked upload when buffered uploads are enabled.
3
4    -- on successful write, update Perlbal::Socket's alive_time, so slowly
5       reproxied writes don't timeout the connection and kill it.  Patch
6       from Jonty <jonty@last.fm>.  r765
7
8    -- Perl 5.10 support.  Patch from Andy Armstrong <andy@hexten.net>.
9       Disclaimer: at least the tests all pass now, but no real-world use yet.
10       Should be fine, though.  Please report your success to the mailing list
11       and/or brad@danga.com.
12
13    -- Add Include plugin by Eamon Daly <edaly@nextwavemedia.com>; plugin
14       allows you to use "INCLUDE = /etc/conf.d/*" or "INCLUDE = /foo.conf"
15       to bring in more config; can be nested.
16
17    -- SECURITY: Previously a single upward directory traversal was possible
18       when concat get was enabled. This behavior has been fixed in code to
19       match with standard file serving.
20
21    -- Fix 'No such pseudo-hash field "high_priority"' issue in Stats plugin
22       (Eamon Daly and Jonty Wareing)
23
24    -- Support for "anonymous services", for API callers that really don't
25       care what their service is called but just want to get hold of a
26       Service object. These aren't really anonymous, but they have suitably
27       ugly names that no sane human should ever conflict with them.
28
29    -- add some new methods that make it a little nicer to embed Perlbal
30       in another application that uses Danga::Socket. Some refactoring
31       was done to avoid duplicate code between the "end-user" way and the
32       API way.
33
34    -- add "cgilike" plugin which offers a simple API very loosely based on
35       mod_perl for handling responses
36
37    -- add HTTPHeaders method set_request_uri so plugins can modify the uri
38       being requested
39
40    -- access control test
41
42    -- add option to AccessControl plugin to use observed_ip_string instead
43
44    -- add observed_ip_string method to perlbal sockets, allowing http
45       connections to set an observed ip string when an upstream proxy is
46       trusted.
47
48    -- add blind_proxy option, which disables appending to the end of the
49       X-Forwarded-For header when connections arrive from a trusted proxy.
50
51    -- make socket closing more verbose when Perlbal::DEBUG is set
52
53    -- verify_backend_path configuration option
54
55    -- don't overwrite $^P, allows use of perl debugger on perlbal.
56
571.60: 2007-10-23
58
59    -- accept LFLF to end HTTP request headers, instead of just
60       CRLFCRLF.  easier monitoring with netcat & other popular
61       webservers accept LFLF anyway.  (Paul Baker)
62
63    -- SHUTDOWN GRACEFUL [timeout] - now accepts optional timeout
64       parameter to force shutdown after that period in seconds
65
66    -- make SSL non-blocking
67
68    -- make persist_client_timeout service tunable apply to the max_idle_time
69       value used to kill sockets that are idle
70
71    -- add Vpath plugin for selectors; can select on URI regex now
72
73    -- add ability to set default_service on selector services; any
74       request that is not caught by a selector plugin instead gets
75       routed to the defined default service
76
77    -- add MIME [ LIST | REMOVE <ext> | SET <ext> <mime> ] command for
78       managing the internal list of mime-types
79
80    -- return an error when trying to use HEADER command on a
81       service that isn't of role reverse_proxy
82
83    -- add hook to attach when a service selector is getting a client
84       returned to it.
85
86    -- fixed huge memory leak in Stats plugin
87
88    -- Fix t/15-webserver.t to not fail once in a while (timing glitch)
89
90    -- Fix handling of a proxy response that doesn't have a Reason-Phrase
91       on the HTTP status line.
92
93    -- Update 'queues' management command to output information about low
94       priority queue, now that we use it.
95
96    -- the buffered upload rate test should pass more reliably now.  some
97       people reported it sporadically (or often) failing before
98
99    -- new per-service configuration value: persist_client_timeout -
100       timeout in seconds for HTTP keep-alives to the end user
101       (defaults to 30 seconds)
102
103    -- new server configuration value: pidfile - for managing an internal
104       pidfile.
105
1061.59: 2007-05-22
107
108    -- only call die_gracefully on a socket if it CAN die_graceully.  fixes
109       shutdown graceful on mogstored, which has things betsides subclasses
110       of Perlbal::Socket in its Danga::Socket event loop
111
112    -- WARNING:  removed Linux::AIO support.  go get IO::AIO 1.6 at least if
113       you use webserver mode or reproxy files or do buffered uploads.
114
1151.58: 2007-05-11
116
117    -- plugin reload support, if plugin supports it.  plugin must implement
118           sub can_reload { 1 }
119       and optionally:
120           sub pre_reload_unload { ... }
121       (which is called before the ->unload, module reload, and ->load)
122       new management command is:
123           reload <plugin_name>
124
1251.57: 2007-04-26
126
127    -- make ClientHTTP (webserver mode) support transfer-encoding
128       "chunked" PUTs, when PUTs are already enabled.  useful
129       for things like MogileFS, where writing clients may not
130       know the final length ahead of time to predeclare in the
131       Content-Length request header.
132
133    -- Add the client_ip to the X-Forwarded-For header when the
134       upstream is "trusted" (Ask Bjoern Hansen).
135
1361.56: 2007-04-16
137
138    -- make HTML proper in ClientManage interface Jacques Marneweck
139       <jacques@powertrip.co.za>
140
141    -- fix "make test" on OS X.  Radu Greab <radu@yx.ro> and
142       Chuck Remes <cremes.devlist@mac.com> fixed & confirmed.
143
144    -- let accesscontrol plugin have a new match action, "queue_low",
145       to make a match force a request onto the low-priotity queue.
146       this match action is in addition to the two previous ones
147       (allow and deny).
148
149    -- start of work on making BackendHTTPs be abstract, dispatching
150       to a child process over a socketpair which speaks HTTP on
151       stdin/stdout.  Unfinished.  To be polished in future.
152
153    -- new hook "make_low_priority", like "make_high_priority"
154
1551.55: 2007-03-21
156
157    -- add plugin that returns 304 automatically on incoming requests
158       with If-Modified-Since header and matching a regular expression
159       on the Host header. (for hostnames serving immutable resources,
160       where if client has ANY version, it's the correct one.)  see:
161       example conf at conf/not-modified-plugin.conf
162
163    -- do HEAD to reproxied hosts, if client did a HEAD (Radu Greab
164       <radu@yx.ro>)
165
166    -- fix race+crash in buffered upload writing/purging
167
1681.54: 2007-02-05
169
170    -- supported for "Transfer-Encoding: chunked" requests (HTTP/1.1 feature)
171       as well as the "Expect: 100-continue", which generally accompany
172       chunked requests.  requires "buffered_uploads" be enabled.  see
173       doc/http-versions.txt for details.
174
1751.53: 2006-12-05
176
177    -- fix a crash as reported on mailing lists, with backends not
178       releasing references to clientproxies when coming through
179       service selectors, and backends then timing out, crashing
180       the server.
181
182    -- if backend sends x-reproxy-url and HTTP 204 No Content, upgrade
183       that to a 200 when sending to the client.
184
185    -- let non-Perlbal::Socket Danga::Socket objects exist without
186       crashing in cleanup handler (allows use of Gearman::Client::Async
187       in plugins)
188
1891.52: 2006-11-13
190
191    -- fix crash in buffered uploads when *::AIO doesn't write everything
192       to disk that's requested of it.  we were unshifting back onto the
193       write queue a scalar, not a scalarref.
194
195    -- AIO channels.  from the code:
196
197       "prevents all AIO threads from being consumed by requests for same
198        failing/overloaded disk by isolating them into separate 'channels' in
199        parent process and not dispatching more than the max in-flight count
200        allows.  think of a channel as a named queue.  or in reality, a disk."
201
202    -- allow setting of SO_SNDBUF on a per-service level
203
2041.51: 2006-10-04
205
206    -- set alive_time during slow PUTs.  was causing problems
207       replicating large files in mogile, hitting fake idle timeout.
208
209    -- pipelining HTTP injection fix.
210
211    -- include Host header to reproxy backends
212           patch by Jonty Wareing <jonty.wareing@gmail.com>
213
2141.50: 2006-09-08
215
216    -- add in optional Devel::Gladiator usage for memory tracking
217
218    -- fix memory leaks in concatenanted GETs on error cases
219
220    -- fixes to run / run better on OS X (Artur Bergman)
221
2221.49: 2006-08-30
223
224    -- Very basic help hints command, simply dumps all possible commands.
225
226    -- Add another statistic for reproxy caches, the current size of a particular
227       service's cache, maximum size, and fill percentage.
228
2291.48: 2006-08-18
230
231    -- optionally cache in-process the results of X-Reproxy-URL reponses
232
2331.47: 2006-08-15
234
235    -- concatenanted GETs sent 304 Not Modified w/ content-lengths.  should
236       be without.  fixed.  also including t/17-webserver-concat which forgot
237       to be checked into svn/MANIFEST earlier
238
2391.46: 2006-08-10
240
241    -- fix Mart's broken win32 support that broke Unix, part 2:  syslog when
242       daemonized.  TODO: test case should test daemonization mode.
243
2441.45: 2006-08-10
245
246    -- fix Mart's broken win32 support that broke Unix.  TODO:  test to raise/check
247       fd limit so this doesn't happen again on unix.
248
2491.44: 2006-08-10
250
251    -- allow a no-op ?foo at the end of concatenated-get URLs, so they'd be of
252       the form:  http://host/dir??file1,file2,file3?noopsection.  the no-op
253       section is good for cache-busting, putting in, say, the modtime of the
254       newest file, forcing browsers like safari (who over-cache) to reload.
255
256    -- set a mime-type other than text/plain on concatenated-get requests,
257       only falling back to text/plain if none of files have a known mime type.
258       in practice a request is all css or all js, so match is found by looking
259       at 1st file.  this is required since mozilla won't show CSS if not text/css.
260
261    -- actually be able to start up using 'perlbal' command.  test
262       suite passed before, but moving $VERSION into Perlbal.pm
263       had quitely broke it all.
264
2651.43: 2006-08-09
266
267    -- there's a case where offset gets past end of file in static file
268       code, but very rarely.  sendfile handles this w/ an error that
269       we dealt with, but the new readahead code didn't and crashed.
270       working around for now, until root cause is found for offset
271       going past.
272
273    -- eliminate some warnings in error cases.  only really affects noise
274       in test suite
275
276    -- work better on win32
277
278    -- added the ability for plugins to create custom service roles and
279       add custom configuration options to services, demo is available
280       as conf/echoservice.conf and lib/Perlbal/Plugin/EchoService.pm
281
2821.42: 2006-08-03
283
284    -- debug management command 'varsize' to track size of internal
285       data structures, to make sure none get out of control.
286       there's a report that CPU/mem grow slowly over time, and after
287       a month or so of uptime, a restart is needed.  this might help
288       diagnose that.
289
290    -- allow expansion/interoplation of stuff in config files/commands.
291       for now just mapping network device names to IP addresses:
292          SET listen = ${ip:eth0}:80
293
294    -- more hooks as requested by community
295
296    -- concatenated get feature.  where a client have use a
297       comma-separated list of files to return, always in text/plain.
298       Useful for webapps which have dozens/hundreds of tiny css/js
299       files, and don't trust browsers/etc to do pipelining.
300       Decreases overall roundtrip latency a bunch, but requires app
301       to be modified to support it.  See t/17-concat.t test for
302       details.
303
304    -- do AIO readahead before sendfile to reduce blocking caused
305       by disk reads from sendfile.  increases throughput.  see:
306       http://brad.livejournal.com/2228488.html
307
308    -- add 'latency' configuration on selector roles
309
3101.41: 2006-02-06
311
312    -- IE sends a request header like "If-Modified-Since: <DATE>;
313       length=<length>" so we have to remove the length bit before
314       comparing it with our date then we save the length to compare
315       later.
316
317    -- support for reproxying to a named service.  if backend returns
318       "X-Reproxy-Service: <name>" and no content, the entire original
319       client GET/HEAD request is re-sent to the new named service.
320       the "enable_reproxy" option has to be enabled for the original
321       service.
322
3231.40: 2006-01-17
324
325    -- support for optional retrying of requests after a 500 error,
326       so user won't see the 500 error.  boolean option, as well
327       as configurable schedule of how often to retry backends.
328
329    -- clean up directory indexing HTML: Mark Smith and Fred Moyer
330       (fred@redhotpenguin.com)
331
3321.39: (beta for 1.40) 2005-10-26
333
334    -- new feature for virtual host plugin:  the Host header can be trumped
335       by a magical URL form, if allowed in config.  for instance, you can
336       make an HTTP request to host "foo.com" but actually get "bar.com"
337       if you do this:
338
339          VHOST foo.com;using:bar.com  = bar
340
341       and request /__using/bar.com/IDENT from foo.com, where IDENT is
342       just \w+.  perlbal then updates the Host record to bar.com and
343       sends request URI (unaltered) to the "bar" service.
344
345       this is useful for circumventing browser host restrictions (java,
346       javascript, flash, etc...) when you actually control both
347       domains.
348
3491.38: (beta for 1.40) 2005-10-19
350
351    -- some paranoia evals around some parts of buffered uploads that
352       SAPO reported crashes in occasionally.  added FIXMEs to investigate
353       too.  for now, though, evals around closing files is safer.
354
355    -- new feature: inter-perlbal upload tracking.  for fancy upload
356       bars driven by XmlHttpRequest when clients are upload large files
357
358    -- WARNING: reproxying (files or URLs) is now disabled by default,
359       and must be enabled per-service with "enable_reproxy = true"
360
361    -- do a final little read before closing an HTTP connection
362       to make sure we have no unread data in kernel (notably
363       an extra "\r\n" from an IE post), so when we do close, we
364       don't send a RST packet to the end user.  Thanks to Kevin
365       Lewandowski from discogs.com for the bug report.
366
367    -- use Danga::Socket's AddTimer interface to disconnect
368       stale persistent connections every 5 seconds, driven by
369       a timer, rather than every 15 seconds, driven by
370       socket creation.
371
372    -- there was a bug where 304 Not Modified responses would
373       cause a connection close (and thus RST packets) even
374       though keep-alive was negotiated and would've worked
375
376    -- ignore URL arguments when doing directory indexing
377
378    -- work a little better under "trickle".  (but still not perfect...
379       trickle doesn't quite work on Perlbal, unfortunately. it's useful,
380       or would've been useful, for testing some parts...)
381
382    -- avoid an occasional warning with dirindexing on unreadable directories
383
3841.37 (beta for 1.40) 2005-08-29
385
386    -- "use <name>" command to set the direct object for future commands
387
388    -- AccessControl plugin to allow/deny by default or on IPs or
389       netmasks.
390
391    -- ClientManage could spin in its inherited event_write, causing
392       99.9% cpu usage.  Bug is arguably Danga::Socket's, but also
393       ours because it's documented what we should do and we didn't.
394       The fix is to shut down watching writability when we're done
395       writing.
396
397    -- make accept_client and its callers deal with the possibility
398       that accept_client fails not because the backend is bogus, but
399       because the client is.  so now accept_client can close the
400       client and callers have to be aware of that.
401
402    -- after running this version on production on LiveJournal.com for
403       a bit, we discovered some cases that we'd flag as should never happen,
404       but actually do, so updated the comments and behavior to
405       do the right thing and not just crash with an assertion.
406
407    -- fix misspellings of trusted_upstream_proxies that didn't
408       come along for the renaming ride earlier
409
410    -- webserver mode now ignores URL arguments when looking up
411       filename
412
413    -- remove warnings accessing undefs in ranges and vhosts
414
415    -- new --version and --help flags.  also a usage message on bogus
416       options (or when --help).  props to Jacques Marneweck
417       <jacques@powertrip.co.za> for the help and motivation.
418
4191.36 (beta for 1.40) 2005-08-19
420
421    -- fix bug in ClientProxy when user disconnects after POST/PUTing
422       a content body, but before a response comes back.
423
424    -- now checks correctly for Danga::Socket version 1.44 or above.
425       (required version was in quotes, confusing perl.)
426
427    -- vhost plugin: strip off port specification from the Host header
428       before trying to match with configured patterns.
429
4301.35: (beta of 1.40) 2005-08-16
431
432    -- beta SSL support in a few lines of code.  maybe it's completely
433       done.  maybe it's barely done.  But it seems to work?  I'm no
434       SSL master... IO::Socket::SSL just made it so easy.
435
436    -- lots more tests
437
438    -- lots more cleanup
439
440    -- fix potential crashing bugs in the PUT path.  luckily ones we
441       never hit.
442
443    -- lots and lots of code cleanup
444
445    -- load plugins by either the exact case specified, all lowercase,
446       or all lowercase with first letter uppercase.  then remember
447       the case for unloading (which was never implemented?)
448
449    -- reorganize/cleanup code related to stalling the backend due to
450       client's buffer size exceeding one of the two limits.
451       introduce "backend_stalled"
452
453    -- buffer uploads to disk
454
4551.3: (2005-06-26)
456
457    -- introduce CommandContext, so management commands can be less
458       verbose when in config files (service/pool names can be left off
459       when you just created them a couple lines before)
460
461    -- remove sendstats support
462
463    -- exit with 0 vs non-zero when/if Perlbal crashes.  new command
464       "crash" to fake a crash, for testing.
465
466    -- entirely redone management command parsing/dispatching (major
467       code cleanup)
468
469    -- virtual host plugin on service selector framework
470
471    -- service selector framework
472
473    -- make Net::Netmask optional
474
475    -- byte range support for both webserver mode and reproxy-file mode
476       Giao Phan <giao@guba.com>.  so clients can resume large transfers.
477
478    -- test suite
479
480    -- IO::AIO support (brad)
481
482    -- change response code to client to 200 on reproxy-file from backend
483
484    -- 'nodes' command now takes as an optional argument a specific ip:port to
485       dump the node stats for
486
487    -- AIO abstraction layer (Perlbal::AIO) which can currently do either
488       Linux::AIO or "none" (doing everything sync).  also in future File::FDpasser
489       and other OS-specific modes [brad]
490
491    -- add buffer_backend_connect to do in memory buffering of data before we
492       request a backend; assists slow clients without tying up a mod_perl
493
494    -- fix spinning issue when webnodes unavailable; should now not consume 100%
495       CPU in those cases
496
497    -- revamp verbose functionality; by default it's still of, but if you specify
498       VERBOSE ON in the config file, it turns it on for management connections
499       by default.  management connections, when specifying VERBOSE ON/OFF, will
500       now set the flag only for that connection.
501
502    -- new command for config file; VERBOSE ON/OFF; can be used to enable or
503       disable confirmation of all commands such as SET, SERVER, CREATE, etc.
504       by default, it's off for config files, but on for management connections.
505
506    -- add generation count to services that increments every time a pool is
507       switched.  this data is now stored on backends when they're spawned as
508       well, and when we allocate a backend we verify the generation so old ones
509       are thrown away.
510
511    -- allow setting of nodefile on pools to 'none' or 'null' or 'undef' or just
512       an empty set of quotes ("", '') in order to stop using node files
513
514    -- automatically set use count to 0 on new nodes coming in from nodefile
515
516    -- made auto-vivification of pulls throw warnings, and made Perlbal die if it
517       tries to vivify a pool and the user has previously manually declared a pool
518
519    -- updated pool commands to be more flexible (POOL pool ADD node, etc)
520
521    -- add pools; a way of having different sets of nodes and instantly switching
522       between them, so traffic stops going to old nodes; see the example config
523       file for usage
524
525    -- work partially without Linux::AIO (does sync stat of node file in reverse
526       proxy mode, and webserver mode doesn't work) --brad
527
5281.2 (2005-03-07)
529    -- add new stats command 'nodes' that shows information on each node that we've
530       been connecting to -- last connect time, last attempt time, a breakdown of
531       the last 500 status codes returned, etc
532
533    -- add ability to use new Danga::Socket profiling; 'profile on', 'profile data'
534       to see the info so far, and 'profile off' to disable it
535
536    -- graceful shutdown now flags sockets that are busy to die so they die when
537       they're done with their current connection
538
539    -- sockets in persist_wait now get closed immediately during a graceful shutdown
540
541    -- fix handling of OPTIONS responses; used to do its own state clearing but
542       it now uses the next_request method as it should
543
544    -- fix bug with determination of keep-alive in http 1.1 case specifying
545       a connection: close header
546
547    -- added 'uptime' management command to track how long Perlbal has been up
548
549    -- new config commands: HEADER INSERT <svc> <header>: <value> and HEADER
550       REMOVE <svc> <header> which will insert and remove headers from user
551       requests before they're sent to backend proxy nodes.
552
553    -- add dependency to Net::Netmask; now you can specify trusted_upstream_proxies
554       on a service (SET service.trusted_upstream_proxies = 10.0.0.0/8, etc)
555       which will allow requests from that range to set X-Forwarded-For, X-Host,
556       and X-Forwarded-Host headers.
557
558    -- fixed a bug that caused connections to hang when the backend responded
559       before the user was done sending data
560
561    -- reset some variables that weren't being reset: read_buf, read_ahead, read_size
562
563    -- "proc" management command shows user and system CPU usage for Perlbal
564       this run, as well as a delta since the last time you ran "proc"
565
566    -- added Perlbal::XS interface for modules to use; also 'xs' management
567       command to see the status of XS modules
568
569    -- bug in PalImg caused crash on files with no length (or when another
570       error occurs that causes no data to be sent to new_gif_palette function)
571
572    -- ReproxyManager would sometimes let closed backends back into the pool
573       and hand them off to clients, fixed to check for that
574
575    -- new policy: you don't muck around with the internals of other classes.
576       notably, clients don't change the internals of a backend and backends
577       don't change the internals of a client.  this was causing all sorts of
578       problems because nobody was cleaning up properly.  (especially with regard
579       to "who is my backend's client" type questions.)
580
581    -- fixed up code that did its own keep-alive checks to use the HTTPHeaders
582       functions so that in the future every part of the code stays up to date
583
584    -- Perlbal::Socket now has the option to keep track of all objects that
585       are created.  new command to management interface 'leaks' will show
586       all objects currently in memory.  turn this functionality on by enabling
587       the TRACK_OBJECTS constant in Perlbal::Socket.
588
589    -- split keep-alive logic into request and response methods and cleared
590       up how that works
591
592    -- rewrote reproxy URI support.  new class Perlbal::ReproxyManager does all
593       of the work relating to reproxies.  it's basically a service class but
594       stripped down and dealing with single endpoints instead of pools.  much
595       much much more robust under heavy load.  (Junior, Brad)
596
597    -- now that we support persistent connections, the 'queues' command didn't
598       have an accurate time; added ClientProxy member last_request_time so
599       we can accurately tell how long requests have been waiting for
600
601    -- Danga::Socket got an overhaul; close and steal_socket now share a lot
602       of code by calling _cleanup.  some more paranoia on making sure the
603       object isn't already closed when we try to do things.
604
605    -- lots more paranoia in close events and event_err handling for backends
606
607    -- added tracking mode for helping look for leaked objects; records a
608       backtrace of every object created.  "server track_obj = 0/1" to enable
609       or disable it, and then "tracking" in a management interface to see.
610
611    -- made Perlbal::objctor/objdtor take an object as their first parameter.
612       much faster than using caller().
613
614    -- fix Highpri plugin to not check hosts for high priority values when
615       the host isn't defined
616
617    -- made Palimg plugin far more paranoid about errors, and also uses new
618       ClientHTTPBase scratch area for keeping track of data instead of using
619       headers (which are generally slower)
620
621    -- fixed bug in HTTPHeaders that set_version would inadvertently
622       run into when used on a header created through new_response
623
624    -- ClientProxy class now supports persistence; set persist_client on
625       the proxy service in order to enable it.
626
627    -- Palimg plugin now supports fallback to web server mode if the
628       requested URI doesn't fit our desired pattern
629
630    -- did some cleanup; made a bunch of HTTPHeaders accesses use the
631       accessor methods instead of referencing into the object's private
632       store of data
633
634    -- fixed a crash caused by calling getsockname/getpeername on sockets
635       that have been undefined after having been stolen during an internal
636       redirect to another webserver
637
638    -- fixed _simple_response to not return a body if we're serving
639       to a HEAD request
640
641    -- bug fix: don't send Not-Modified responses to requests for dynamic
642       directory listings.  it was messing up persistent connections
643       since the directory serving code didn't get passed down whether we
644       were sending a body or not.  and not modifies on directories are hard:
645       modify time isn't altogether useful.  (file sizes could change)
646
647       this still does not-modifieds on indirect index.html directory
648       requests, because _serve_request ends up eventually calling
649       _serve_request on a different URI.  (brad)
650
651    -- added BSD::Resource as dependency to Makefile.PL (brad)
652
653    -- fixed 304 Not Modified responses to not send Content-Length
654       and Content-Type headers.  (jr)
655
6561.01 (2004-10-22)
657    -- when internally redirecting a URL, perlbal advertises
658       that it supports persisent HTTP connections now,
659       and caches those sockets for 5 seconds.  (not configurable)
660       useful under load, otherwise you waste all local ports
661       on a machine
662
663    -- ditch dependence on IO::SendFile.  do it ourselves (1 line)
664       with perl's syscall function
665
666    -- add doc/* and conf/* to MANIFEST file
667
6681.00
669    -- initial packaged release
Note: See TracBrowser for help on using the browser.