Skip to content

Commit 3c3c853

Browse files
author
Stefan Eissing
committed
version 1.4.6, exactly as released in Apache 2.4.20
1 parent be05d57 commit 3c3c853

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+3812
-1962
lines changed

ChangeLog

+77
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,80 @@
1+
v1.4.6 (as released in Apache httpd 2.4.20)
2+
--------------------------------------------------------------------------------
3+
* incrementing keepalives on each request started so that logging %k gives
4+
increasing numbers per master http2 connection. New documented variables
5+
in env, usable in custom log formats: H2_PUSH, H2_PUSHED, H2_PUSHED_ON,
6+
H2_STREAM_ID and H2_STREAM_TAG.
7+
* more efficient passing of response bodies with less contention
8+
and file bucket forwarding.
9+
* fix for missing score board updates on request count, fix for memory leak
10+
on slave connection reuse.
11+
* disabling PUSH when client sends GOAWAY. Slave connections are reused for
12+
several requests, improved performance and better memory use.
13+
* fixes problem with wrong lifetime of file buckets on main connection.
14+
* fixes incorrect denial of requests without :authority header.
15+
* give control to async mpm for keepalive timeouts only when no streams are
16+
open and even if only after 1 sec delay. Under load, event mpm discards
17+
connections otherwise too quickly.
18+
* fixed possible read after free when streams were cancelled early by the
19+
client.
20+
* fixed possible deadlock during connection shutdown. Thanks to @FrankStolle
21+
for reporting and getting the necessary data.
22+
* fixed apr_uint64_t formatting in a log statement to user proper APR def,
23+
thanks to @Sp1l.
24+
* number of worker threads allowed to a connection is adjusting
25+
dynamically. Starting with 4, the number is doubled when streams can be
26+
served without block on http/2 connection flow. The number is halfed, when
27+
the server has to wait on client flow control grants.
28+
This can happen with a maximum frequency of 5 times per second.
29+
When a connection occupies too many workers, repeatable requests
30+
(GET/HEAD/OPTIONS) are cancelled and placed back in the queue. Should that
31+
not suffice and a stream is busy longer than the server timeout, the
32+
connection will be aborted with error code ENHANCE_YOUR_CALM.
33+
This does *not* limit the number of streams a client may open, rather the
34+
number of server threads a connection might use.
35+
* allowing link header to specify multiple "rel" values, space-separated
36+
inside a quoted string. Prohibiting push when Link parameter "nopush" is
37+
present.
38+
* reworked connection state handling. Idle connections accept a GOAWAY from
39+
the client without further reply. Otherwise the module makes a best effort
40+
to send one last GOAWAY to the client.
41+
* the values from standard directives Timeout and KeepAliveTimeout properly
42+
are applied to http/2 connections.
43+
* idle connections are returned to async mpms. new hook "pre_close_connection"
44+
used to send GOAWAY frame when not already done. Setting event mpm server
45+
config "by hand" for the main connection to the correct negotiated server.
46+
* keep-alive blocking reads are done with 1 second timeouts to check for MPM
47+
stopping. Will announce early GOAWAY and finish processing open streams,
48+
then close.
49+
* bytes read/written on slave connections are reported via the optional
50+
mod_logio functions. Fixes PR 58871.
51+
* connections how keep a "push diary" where hashes of already pushed resources
52+
are kept. See directive H2PushDiarySize for managing this. Push diaries can
53+
be initialized by clients via the "Cache-Digest" request header.
54+
This carries a base64url encoded. compressed Golomb set as described
55+
in https://datatracker.ietf.org/doc/draft-kazuho-h2-cache-digest/
56+
Introduced a status handler for HTTP/2 connections, giving various counters
57+
and statistics about the current connection, plus its cache digest value
58+
in a JSON record. Not a replacement for more HTTP/2 in the server status.
59+
Configured as
60+
<Location "/http2-status">
61+
SetHandler http2-status
62+
</Location>
63+
* Fixed flushing of last GOAWAY frame. Previously, that frame did not always
64+
reach the client, causing some to fail the next request.
65+
Fixed calculation of last stream id accepted as described in rfc7540.
66+
Reading in KEEPALIVE state now correctly shown in scoreboard.
67+
Fixed possible race in connection shutdown after review by Ylavic.
68+
Fixed segfault on connection shutdown, callback ran into a semi dismantled session.
69+
* Added support for experimental accept-push-policy draft
70+
(https://tools.ietf.org/html/draft-ruellan-http-accept-push-policy-00). Clients
71+
may now influence server pushes by sending accept-push-policy headers.
72+
* new r->subprocess_env variables HTTP2 and H2PUSH, set to "on"
73+
when available for request.
74+
* mod_status/scoreboard: showing connection protocol in new column, new
75+
ap_update_child_status methods for updating server/description. mod_ssl
76+
sets vhost negotiated by servername directly.
77+
178
v1.2.8
279
--------------------------------------------------------------------------------
380
* Requests without ':authority' header, using 'Host' instead, are no longer

README.md

+9-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

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

4-
Copyright (C) 2015 greenbytes GmbH
4+
Copyright (C) 2015, 2016 greenbytes GmbH
55

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

@@ -13,36 +13,33 @@ What you find here are **early experience versions** for people who like living
1313
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.
1414

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

18-
This is therefore an **early experience version**
18+
Later versions willl be an **early experience version**
1919
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.
2020

2121
##Install
2222

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

2727
tl;dr
2828

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

3131
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!
3232

33-
##Changes
34-
35-
Different to earlier releases, this module no longer has a ```sandbox``` build mode. It always needs an Apache + apxs installed on your system, as
36-
well as all dependant libraries. It was too much work for me to keep the
37-
sandbox up to date...
38-
3933
##Apache 2.4.x Packages
4034

4135
* **Ubuntu**: [ppa by ondrej](https://launchpad.net/~ondrej/+archive/ubuntu/apache2) for Ubuntu 14.04 and others
4236
* **Fedora**: [Rawhide includes httpd 2.4.17](http://rpmfind.net/linux/rpm2html/search.php?query=httpd)
4337
* **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)
4438
* **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)
4539

40+
##Changes
41+
42+
See ```ChangeLog``` for details.
4643

4744
##Documenation
4845
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.
@@ -73,7 +70,7 @@ SPDY protocol. And without Tatsuhiro Tsujikawa excellent nghttp2 work, this
7370
would not have been possible.
7471

7572

76-
Münster, 18.12.2015,
73+
Münster, 18.04.2016,
7774

7875
Stefan Eissing, greenbytes GmbH
7976

configure.ac

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#
1515

1616
AC_PREREQ([2.69])
17-
AC_INIT([mod_http2], [1.2.8], [[email protected]])
17+
AC_INIT([mod_http2], [1.4.6], [[email protected]])
1818

1919
LT_PREREQ([2.2.6])
2020
LT_INIT()

mod-h2.xcodeproj/project.pbxproj

+10-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
B24C59831B8C66930003DF74 /* ltsugar.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltsugar.m4; sourceTree = "<group>"; };
1616
B24C59841B8C66930003DF74 /* ltversion.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ltversion.m4; sourceTree = "<group>"; };
1717
B24C59851B8C66930003DF74 /* lt~obsolete.m4 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "lt~obsolete.m4"; sourceTree = "<group>"; };
18+
B25096BE1CC4E66F002E8B04 /* h2_int_queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_int_queue.c; sourceTree = "<group>"; };
19+
B25096BF1CC4E66F002E8B04 /* h2_int_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_int_queue.h; sourceTree = "<group>"; };
20+
B25096C01CC4E66F002E8B04 /* h2_ngn_shed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_ngn_shed.c; sourceTree = "<group>"; };
21+
B25096C11CC4E66F002E8B04 /* h2_ngn_shed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_ngn_shed.h; sourceTree = "<group>"; };
22+
B25096C21CC4E66F002E8B04 /* h2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2.h; sourceTree = "<group>"; };
1823
B25574691BEB6EFC0058F97B /* config.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = config.h.in; sourceTree = "<group>"; };
1924
B255746A1BEB6EFC0058F97B /* h2_alt_svc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_alt_svc.c; sourceTree = "<group>"; };
2025
B255746B1BEB6EFC0058F97B /* h2_alt_svc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_alt_svc.h; sourceTree = "<group>"; };
@@ -59,8 +64,6 @@
5964
B25574921BEB6EFC0058F97B /* h2_task_input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_input.h; sourceTree = "<group>"; };
6065
B25574931BEB6EFC0058F97B /* h2_task_output.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_task_output.c; sourceTree = "<group>"; };
6166
B25574941BEB6EFC0058F97B /* h2_task_output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_output.h; sourceTree = "<group>"; };
62-
B25574951BEB6EFC0058F97B /* h2_task_queue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_task_queue.c; sourceTree = "<group>"; };
63-
B25574961BEB6EFC0058F97B /* h2_task_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_task_queue.h; sourceTree = "<group>"; };
6467
B25574991BEB6EFC0058F97B /* h2_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = h2_util.c; sourceTree = "<group>"; };
6568
B255749A1BEB6EFC0058F97B /* h2_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = h2_util.h; sourceTree = "<group>"; };
6669
B255749C1BEB6EFC0058F97B /* h2_version.h.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = h2_version.h.in; sourceTree = "<group>"; };
@@ -128,12 +131,16 @@
128131
B25574791BEB6EFC0058F97B /* h2_from_h1.h */,
129132
B255747A1BEB6EFC0058F97B /* h2_h2.c */,
130133
B255747B1BEB6EFC0058F97B /* h2_h2.h */,
134+
B25096BE1CC4E66F002E8B04 /* h2_int_queue.c */,
135+
B25096BF1CC4E66F002E8B04 /* h2_int_queue.h */,
131136
B255747E1BEB6EFC0058F97B /* h2_io_set.c */,
132137
B255747F1BEB6EFC0058F97B /* h2_io_set.h */,
133138
B255747C1BEB6EFC0058F97B /* h2_io.c */,
134139
B255747D1BEB6EFC0058F97B /* h2_io.h */,
135140
B25574801BEB6EFC0058F97B /* h2_mplx.c */,
136141
B25574811BEB6EFC0058F97B /* h2_mplx.h */,
142+
B25096C01CC4E66F002E8B04 /* h2_ngn_shed.c */,
143+
B25096C11CC4E66F002E8B04 /* h2_ngn_shed.h */,
137144
B25574821BEB6EFC0058F97B /* h2_private.h */,
138145
B2AB9AB91C2ADBE100908DD6 /* h2_push.c */,
139146
B2AB9ABA1C2ADBE100908DD6 /* h2_push.h */,
@@ -153,8 +160,6 @@
153160
B25574921BEB6EFC0058F97B /* h2_task_input.h */,
154161
B25574931BEB6EFC0058F97B /* h2_task_output.c */,
155162
B25574941BEB6EFC0058F97B /* h2_task_output.h */,
156-
B25574951BEB6EFC0058F97B /* h2_task_queue.c */,
157-
B25574961BEB6EFC0058F97B /* h2_task_queue.h */,
158163
B255748F1BEB6EFC0058F97B /* h2_task.c */,
159164
B25574901BEB6EFC0058F97B /* h2_task.h */,
160165
B25574991BEB6EFC0058F97B /* h2_util.c */,
@@ -165,6 +170,7 @@
165170
B255749E1BEB6EFC0058F97B /* h2_worker.h */,
166171
B255749F1BEB6EFC0058F97B /* h2_workers.c */,
167172
B25574A01BEB6EFC0058F97B /* h2_workers.h */,
173+
B25096C21CC4E66F002E8B04 /* h2.h */,
168174
B25574A11BEB6EFC0058F97B /* m4 */,
169175
B25574A41BEB6EFC0058F97B /* Makefile.am */,
170176
B25574A71BEB6EFC0058F97B /* mod_http2.c */,

mod_http2/Makefile.am

+5-2
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ OBJECTS = \
3232
h2_filter.c \
3333
h2_from_h1.c \
3434
h2_h2.c \
35+
h2_int_queue.c \
3536
h2_io.c \
3637
h2_io_set.c \
3738
h2_mplx.c \
39+
h2_ngn_shed.c \
3840
h2_push.c \
3941
h2_request.c \
4042
h2_response.c \
@@ -45,13 +47,13 @@ OBJECTS = \
4547
h2_task.c \
4648
h2_task_input.c \
4749
h2_task_output.c \
48-
h2_task_queue.c \
4950
h2_util.c \
5051
h2_worker.c \
5152
h2_workers.c \
5253
mod_http2.c
5354

5455
HFILES = \
56+
h2.h \
5557
h2_alt_svc.h \
5658
h2_bucket_eoc.h \
5759
h2_bucket_eos.h \
@@ -62,9 +64,11 @@ HFILES = \
6264
h2_filter.h \
6365
h2_from_h1.h \
6466
h2_h2.h \
67+
h2_int_queue.h \
6568
h2_io.h \
6669
h2_io_set.h \
6770
h2_mplx.h \
71+
h2_ngn_shed.h \
6872
h2_private.h \
6973
h2_push.h \
7074
h2_request.h \
@@ -76,7 +80,6 @@ HFILES = \
7680
h2_task.h \
7781
h2_task_input.h \
7882
h2_task_output.h \
79-
h2_task_queue.h \
8083
h2_util.h \
8184
h2_version.h \
8285
h2_worker.h \

0 commit comments

Comments
 (0)