Project description.

The Apache HTTP Server Project is an effort to develop and maintain an open-source HTTP server for modern operating systems including UNIX and Windows NT.

The goal of this project is to provide a secure, efficient and extensible server that provides HTTP services in sync with the current HTTP standards

Apache 2.0.19 Changelog
  • Fix problem with threaded MPM. The problem was that if each child process was busy serving a single long-lived request and the server was sent a graceful restart signal, the server would stop serving requests. This would happen because each child process would wait to die until the last thread was done, and the parent wouldn't spawn any new children until a process died. Now, the parent looks at the fact that the children are dying gracefully, and starts new children. Those new children only start enough threads to compliment the number of threads in the other child process that shares the same spot in the scoreboard. In this way, we make sure to never go over MaxClients. [Ryan Bloom]
  • modified mod_negotiation and mod_autoindex to speed up by almost a factor of two on apr_dir_read()-enhanced platforms, such as Win32 and OS2, by calling ap_sub_request_lookup_dirent() with the results already provided by apr_dir_read(). [William Rowe]
  • mod_file_cache is now more robust to filtering and serves requests slightly more efficiently. [Cliff Woolley]
  • Fix problem handling FLUSH bucket in the chunked encoding filter. Module was calling ap_rwrite() followed by ap_rflush() but the served content was not being displayed in the browser. Inspection of the output stream revealed that the first data chunk was missing the trailing CRLF required by the RFC. [Bill Stoddard]
  • apxs no longer generates ap_send_http_header() in the example handler
  • Fix an ab problem which could cause a divide-by-zero exception with certain invocations (e.g., ab -k -c 6 -n 100 localhost/). [Ian Holsman ]
  • Solve case-insensitive platforms' confusion about negotiated filenames, allowing files of differnt case to match in choosing the document to serve. [William Rowe]
  • Fix brokenness when ThreadsPerChild is higher than the built-in limit. We left ap_threads_per_child at the higher value which led to segfaults when doing certain scoreboard operations. [Jeff Trawick]
  • Fix seg faults and/or missing output from mod_include. The default_handler was using the subrequest pool for files and MMAPs, even though the associated APR structures typically live longer than the subrequest. [Greg Ames]
  • Extend mod_setenvif to support specifying regular expressions on the SetEnvIf (and SetEnvIfNoCase) directive attribute field. Example: SetEnvIf ^TS* [a-z].* HAVE_TS will cause HAVE_TS to be set if any of the request headers begins with "TS" and has a value that begins with any character in the set [a-z]. [Bill Stoddard]
  • httpd children now re-bind themselves to a random CPU on multiprocessor systems on AIX via bindprocessor() in 2.0. [Victor J. Orlikowski]
  • Fix htdigest. It would go into a loop in getline when adding a second user. [Bill Stoddard]
  • Win32 platforms now fully support mod_userdir options. [Will Rowe]
  • Automatically generate httpd.exp for AIX. DSOs now work again on AIX in 2.0 [Victor J. Orlikowski]
  • Add a new request hook, error_log. This phase allows modules to act on the error log string _after_ it has been written to the error log. The goal for this hook is to allow monitoring modules to send the error string to the monitoring agent. [Ryan Bloom]
  • Modify mod_echo to make it use filters for input and output. [Ryan Morgan ]
  • Extend mod_headers to support conditional driven Header add, append and set. Use SetEnvIf to set an envar and conditionally add/append/set headers based on this envar thusly:
  • SetEnvIf TSMyHeader value HAVE_TSMyHeader Header add MyHeader "%t %D" env=HAVE_TSMyHeader
  • If the request contains header "TSMyHeader: value" then header MyHeader: "t=xxxxxxxxxx D=yyyy" will be sent on the response. [Bill Stoddard]
  • Extend mod_headers to support using format specifiers on Header add, append and set header values. Two format specifiers are supported:
  • %t - reports, in UTC microseconds since the epoch, when the request was received.
  • %D - reports the time, in microseconds, between when the request was received and the response sent.
  • Examples: Header add MyHeader "This request served in %D microseconds. %t"
  • results in a header being added to the response that looks like this:
  • MyHeader: This request served in D=5438 microseconds. t=991424704447256
  • [Bill Stoddard]
  • Fix reset_filter(). We need to be careful how we remove filters. If we set r->output_filters to NULL, we also have to reset the connection's filters. [John Sterling]
  • Optimise reset_filter() in http_protocol.c. [Greg Stein]
  • Add a check to ap_die() to make sure the filter stack is sane and contains the correct basic filters when an error occurs. This fixes a problem where headers are not being sent on error. [John Sterling]
  • New Header directive 'echo' option. "Header echo regex" will cause any headers received on the request that match regex to be echoed to (included in) the response headers. [Bill Stoddard]
  • include/ap_compat.h tested and set APR_COMPAT_H instead of AP_COMPAT_H. This prevented the inclusion of apr_compat.h. PR #7773 [Oleg Broytmann ]
  • Moved util_uri to the apr-util library. This required a bunch of apr_name changes for the uri utility functions. [Justin Erenkrantz]
  • Move the addition of default AP_HTTP_HTTP_HEADER filters to the insert_filter phase so that other filters are not bypassed by default. [Graham Leggett]
  • Reimplement mod_headers as an output filter. mod_headers can now add custom headers to inbound requests using the RequestHeader directive and to responses using the same old Header directive. [Graham Leggett]