Skip to content

Commit

Permalink
version 1.4.6, exactly as released in Apache 2.4.20
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Eissing committed Apr 18, 2016
1 parent be05d57 commit 3c3c853
Show file tree
Hide file tree
Showing 60 changed files with 3,812 additions and 1,962 deletions.
77 changes: 77 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,80 @@
v1.4.6 (as released in Apache httpd 2.4.20)
--------------------------------------------------------------------------------
* incrementing keepalives on each request started so that logging %k gives
increasing numbers per master http2 connection. New documented variables
in env, usable in custom log formats: H2_PUSH, H2_PUSHED, H2_PUSHED_ON,
H2_STREAM_ID and H2_STREAM_TAG.
* more efficient passing of response bodies with less contention
and file bucket forwarding.
* fix for missing score board updates on request count, fix for memory leak
on slave connection reuse.
* disabling PUSH when client sends GOAWAY. Slave connections are reused for
several requests, improved performance and better memory use.
* fixes problem with wrong lifetime of file buckets on main connection.
* fixes incorrect denial of requests without :authority header.
* give control to async mpm for keepalive timeouts only when no streams are
open and even if only after 1 sec delay. Under load, event mpm discards
connections otherwise too quickly.
* fixed possible read after free when streams were cancelled early by the
client.
* fixed possible deadlock during connection shutdown. Thanks to @FrankStolle
for reporting and getting the necessary data.
* fixed apr_uint64_t formatting in a log statement to user proper APR def,
thanks to @Sp1l.
* number of worker threads allowed to a connection is adjusting
dynamically. Starting with 4, the number is doubled when streams can be
served without block on http/2 connection flow. The number is halfed, when
the server has to wait on client flow control grants.
This can happen with a maximum frequency of 5 times per second.
When a connection occupies too many workers, repeatable requests
(GET/HEAD/OPTIONS) are cancelled and placed back in the queue. Should that
not suffice and a stream is busy longer than the server timeout, the
connection will be aborted with error code ENHANCE_YOUR_CALM.
This does *not* limit the number of streams a client may open, rather the
number of server threads a connection might use.
* allowing link header to specify multiple "rel" values, space-separated
inside a quoted string. Prohibiting push when Link parameter "nopush" is
present.
* reworked connection state handling. Idle connections accept a GOAWAY from
the client without further reply. Otherwise the module makes a best effort
to send one last GOAWAY to the client.
* the values from standard directives Timeout and KeepAliveTimeout properly
are applied to http/2 connections.
* idle connections are returned to async mpms. new hook "pre_close_connection"
used to send GOAWAY frame when not already done. Setting event mpm server
config "by hand" for the main connection to the correct negotiated server.
* keep-alive blocking reads are done with 1 second timeouts to check for MPM
stopping. Will announce early GOAWAY and finish processing open streams,
then close.
* bytes read/written on slave connections are reported via the optional
mod_logio functions. Fixes PR 58871.
* connections how keep a "push diary" where hashes of already pushed resources
are kept. See directive H2PushDiarySize for managing this. Push diaries can
be initialized by clients via the "Cache-Digest" request header.
This carries a base64url encoded. compressed Golomb set as described
in https://datatracker.ietf.org/doc/draft-kazuho-h2-cache-digest/
Introduced a status handler for HTTP/2 connections, giving various counters
and statistics about the current connection, plus its cache digest value
in a JSON record. Not a replacement for more HTTP/2 in the server status.
Configured as
<Location "/http2-status">
SetHandler http2-status
</Location>
* Fixed flushing of last GOAWAY frame. Previously, that frame did not always
reach the client, causing some to fail the next request.
Fixed calculation of last stream id accepted as described in rfc7540.
Reading in KEEPALIVE state now correctly shown in scoreboard.
Fixed possible race in connection shutdown after review by Ylavic.
Fixed segfault on connection shutdown, callback ran into a semi dismantled session.
* Added support for experimental accept-push-policy draft
(https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00). Clients
may now influence server pushes by sending accept-push-policy headers.
* new r->subprocess_env variables HTTP2 and H2PUSH, set to "on"
when available for request.
* mod_status/scoreboard: showing connection protocol in new column, new
ap_update_child_status methods for updating server/description. mod_ssl
sets vhost negotiated by servername directly.

v1.2.8
--------------------------------------------------------------------------------
* Requests without ':authority' header, using 'Host' instead, are no longer
Expand Down
21 changes: 9 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

#mod_h[ttp]2 - http/2 for Apache httpd

Copyright (C) 2015 greenbytes GmbH
Copyright (C) 2015, 2016 greenbytes GmbH

This repository contains the `mod_h[ttp]2` from Apache httpd as a standalone build.

Expand All @@ -13,36 +13,33 @@ What you find here are **early experience versions** for people who like living
If you want HTTP/2 in your production environment, please head over to the official releases at Apache and grab one of those or wait until the various OS distributions have assembled one for you.

##Current Version
The version here is the **Proposed backport to 2.4.x**, to be published hopefully as 2.4.19.
The version 1.4.6 is **exactly** the one released in Apache httpd 2-.4.20.

This is therefore an **early experience version**
Later versions willl be an **early experience version**
and there is no guarantee that it will be released as it is here by Apache. But you are welcome to test it and give feedback.

##Install

You need a built Apache httpd 2.4.18, including apxs and headers to compile and
You need a built Apache httpd 2.4.20, including apxs and headers to compile and
run this module. Additionally, you need an installed libnghttp2, at least in version
1.3.0. And additionally, you want an installed OpenSSL 1.0.2.

tl;dr

**You need an installed Apache 2.4.18 which already runs ```mod_http2``` in it.**
**You need an installed Apache 2.4.20 which already runs ```mod_http2``` in it.**

If you do not have that or don't know how to get it, look at google, stackoverflow, Apache mailing lists or your Linux distro. Not here!

##Changes

Different to earlier releases, this module no longer has a ```sandbox``` build mode. It always needs an Apache + apxs installed on your system, as
well as all dependant libraries. It was too much work for me to keep the
sandbox up to date...

##Apache 2.4.x Packages

* **Ubuntu**: [ppa by ondrej](https://launchpad.net/~ondrej/+archive/ubuntu/apache2) for Ubuntu 14.04 and others
* **Fedora**: [Rawhide includes httpd 2.4.17](http://rpmfind.net/linux/rpm2html/search.php?query=httpd)
* **Debian** sid (unstable) includes httpd 2.4.17. See [how to install debian sid](https://wiki.debian.org/InstallFAQ#Q._How_do_I_install_.22unstable.22_.28.22sid.22.29.3F)
* **FreeBSD**: [Apache 2.4 port includes mod_http2](http://www.freshports.org/www/apache24/) / [mod_http2-devel port in review](https://reviews.freebsd.org/D5220)

##Changes

See ```ChangeLog``` for details.

##Documenation
There is the official [Apache documentation](https://httpd.apache.org/docs/2.4/en/mod/mod_http2.html) of the module, which you will not find here.
Expand Down Expand Up @@ -73,7 +70,7 @@ SPDY protocol. And without Tatsuhiro Tsujikawa excellent nghttp2 work, this
would not have been possible.


Münster, 18.12.2015,
Münster, 18.04.2016,

Stefan Eissing, greenbytes GmbH

Expand Down
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
#

AC_PREREQ([2.69])
AC_INIT([mod_http2], [1.2.8], [[email protected]])
AC_INIT([mod_http2], [1.4.6], [[email protected]])

LT_PREREQ([2.2.6])
LT_INIT()
Expand Down
14 changes: 10 additions & 4 deletions mod-h2.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@
B24C59831B8C66930003DF74 /* ltsugar.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltsugar.m4; sourceTree = "<group>"; };
B24C59841B8C66930003DF74 /* ltversion.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltversion.m4; sourceTree = "<group>"; };
B24C59851B8C66930003DF74 /* lt~obsolete.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "lt~obsolete.m4"; sourceTree = "<group>"; };
B25096BE1CC4E66F002E8B04 /* h2_int_queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_int_queue.c; sourceTree = "<group>"; };
B25096BF1CC4E66F002E8B04 /* h2_int_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_int_queue.h; sourceTree = "<group>"; };
B25096C01CC4E66F002E8B04 /* h2_ngn_shed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_ngn_shed.c; sourceTree = "<group>"; };
B25096C11CC4E66F002E8B04 /* h2_ngn_shed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_ngn_shed.h; sourceTree = "<group>"; };
B25096C21CC4E66F002E8B04 /* h2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2.h; sourceTree = "<group>"; };
B25574691BEB6EFC0058F97B /* config.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.h.in; sourceTree = "<group>"; };
B255746A1BEB6EFC0058F97B /* h2_alt_svc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_alt_svc.c; sourceTree = "<group>"; };
B255746B1BEB6EFC0058F97B /* h2_alt_svc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_alt_svc.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -59,8 +64,6 @@
B25574921BEB6EFC0058F97B /* h2_task_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_input.h; sourceTree = "<group>"; };
B25574931BEB6EFC0058F97B /* h2_task_output.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_task_output.c; sourceTree = "<group>"; };
B25574941BEB6EFC0058F97B /* h2_task_output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_output.h; sourceTree = "<group>"; };
B25574951BEB6EFC0058F97B /* h2_task_queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_task_queue.c; sourceTree = "<group>"; };
B25574961BEB6EFC0058F97B /* h2_task_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_queue.h; sourceTree = "<group>"; };
B25574991BEB6EFC0058F97B /* h2_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_util.c; sourceTree = "<group>"; };
B255749A1BEB6EFC0058F97B /* h2_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_util.h; sourceTree = "<group>"; };
B255749C1BEB6EFC0058F97B /* h2_version.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = h2_version.h.in; sourceTree = "<group>"; };
Expand Down Expand Up @@ -128,12 +131,16 @@
B25574791BEB6EFC0058F97B /* h2_from_h1.h */,
B255747A1BEB6EFC0058F97B /* h2_h2.c */,
B255747B1BEB6EFC0058F97B /* h2_h2.h */,
B25096BE1CC4E66F002E8B04 /* h2_int_queue.c */,
B25096BF1CC4E66F002E8B04 /* h2_int_queue.h */,
B255747E1BEB6EFC0058F97B /* h2_io_set.c */,
B255747F1BEB6EFC0058F97B /* h2_io_set.h */,
B255747C1BEB6EFC0058F97B /* h2_io.c */,
B255747D1BEB6EFC0058F97B /* h2_io.h */,
B25574801BEB6EFC0058F97B /* h2_mplx.c */,
B25574811BEB6EFC0058F97B /* h2_mplx.h */,
B25096C01CC4E66F002E8B04 /* h2_ngn_shed.c */,
B25096C11CC4E66F002E8B04 /* h2_ngn_shed.h */,
B25574821BEB6EFC0058F97B /* h2_private.h */,
B2AB9AB91C2ADBE100908DD6 /* h2_push.c */,
B2AB9ABA1C2ADBE100908DD6 /* h2_push.h */,
Expand All @@ -153,8 +160,6 @@
B25574921BEB6EFC0058F97B /* h2_task_input.h */,
B25574931BEB6EFC0058F97B /* h2_task_output.c */,
B25574941BEB6EFC0058F97B /* h2_task_output.h */,
B25574951BEB6EFC0058F97B /* h2_task_queue.c */,
B25574961BEB6EFC0058F97B /* h2_task_queue.h */,
B255748F1BEB6EFC0058F97B /* h2_task.c */,
B25574901BEB6EFC0058F97B /* h2_task.h */,
B25574991BEB6EFC0058F97B /* h2_util.c */,
Expand All @@ -165,6 +170,7 @@
B255749E1BEB6EFC0058F97B /* h2_worker.h */,
B255749F1BEB6EFC0058F97B /* h2_workers.c */,
B25574A01BEB6EFC0058F97B /* h2_workers.h */,
B25096C21CC4E66F002E8B04 /* h2.h */,
B25574A11BEB6EFC0058F97B /* m4 */,
B25574A41BEB6EFC0058F97B /* Makefile.am */,
B25574A71BEB6EFC0058F97B /* mod_http2.c */,
Expand Down
7 changes: 5 additions & 2 deletions mod_http2/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ OBJECTS = \
h2_filter.c \
h2_from_h1.c \
h2_h2.c \
h2_int_queue.c \
h2_io.c \
h2_io_set.c \
h2_mplx.c \
h2_ngn_shed.c \
h2_push.c \
h2_request.c \
h2_response.c \
Expand All @@ -45,13 +47,13 @@ OBJECTS = \
h2_task.c \
h2_task_input.c \
h2_task_output.c \
h2_task_queue.c \
h2_util.c \
h2_worker.c \
h2_workers.c \
mod_http2.c

HFILES = \
h2.h \
h2_alt_svc.h \
h2_bucket_eoc.h \
h2_bucket_eos.h \
Expand All @@ -62,9 +64,11 @@ HFILES = \
h2_filter.h \
h2_from_h1.h \
h2_h2.h \
h2_int_queue.h \
h2_io.h \
h2_io_set.h \
h2_mplx.h \
h2_ngn_shed.h \
h2_private.h \
h2_push.h \
h2_request.h \
Expand All @@ -76,7 +80,6 @@ HFILES = \
h2_task.h \
h2_task_input.h \
h2_task_output.h \
h2_task_queue.h \
h2_util.h \
h2_version.h \
h2_worker.h \
Expand Down
Loading

0 comments on commit 3c3c853

Please sign in to comment.