You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2016/11/23 18:13:06 UTC
svn commit: r1771015 - in /httpd/httpd/trunk: CHANGES
docs/manual/mod/mod_http2.xml modules/http2/h2_config.c
modules/http2/h2_config.h modules/http2/h2_session.c
Author: icing
Date: Wed Nov 23 18:13:06 2016
New Revision: 1771015
URL: http://svn.apache.org/viewvc?rev=1771015&view=rev
Log:
mod_http2: new directove H2EarlyPushes for enabled 103 interim responses
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/docs/manual/mod/mod_http2.xml
httpd/httpd/trunk/modules/http2/h2_config.c
httpd/httpd/trunk/modules/http2/h2_config.h
httpd/httpd/trunk/modules/http2/h2_session.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/CHANGES?rev=1771015&r1=1771014&r2=1771015&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Wed Nov 23 18:13:06 2016
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.0
+ *) mod_http2: new directive 'H2EarlyHints' to enable sending of HTTP status
+ 103 interim responses. Disabled by default. [Stefan Eissing]
+
*) mod_ratelimit: Allow for initial "burst" amount at full speed before
throttling: PR 60145 [Andy Valencia <ajv-etradanalhos vsta.org>,
Jim Jagielski]
Modified: httpd/httpd/trunk/docs/manual/mod/mod_http2.xml
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/manual/mod/mod_http2.xml?rev=1771015&r1=1771014&r2=1771015&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/manual/mod/mod_http2.xml (original)
+++ httpd/httpd/trunk/docs/manual/mod/mod_http2.xml Wed Nov 23 18:13:06 2016
@@ -972,4 +972,31 @@ H2TLSCoolDownSecs 0
</usage>
</directivesynopsis>
+ <directivesynopsis>
+ <name>H2EarlyHints</name>
+ <description>Determine sending of 103 status codes</description>
+ <syntax>H2EarlyHints on|off</syntax>
+ <default>H2EarlyHints off</default>
+ <contextlist>
+ <context>server config</context>
+ <context>virtual host</context>
+ </contextlist>
+ <compatibility>Available in version 2.4.24 and later.</compatibility>
+
+ <usage>
+ <p>
+ This setting controls if HTTP status 103 interim responses are
+ forwarded to the client or not. By default, this is currently
+ not the case since a range of clients still have trouble with
+ unexpected interim responses.
+ </p>
+ <p>
+ When set to <code>on</code>, PUSH resources announced with
+ <code>H2PushResource</code> will trigger an interim 103 response
+ before the final response. The 103 response will carry <code>Link</code>
+ headers that advise the <code>preload</code> of such resources.
+ </p>
+ </usage>
+ </directivesynopsis>
+
</modulesynopsis>
Modified: httpd/httpd/trunk/modules/http2/h2_config.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_config.c?rev=1771015&r1=1771014&r2=1771015&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_config.c (original)
+++ httpd/httpd/trunk/modules/http2/h2_config.c Wed Nov 23 18:13:06 2016
@@ -62,7 +62,8 @@ static h2_config defconf = {
NULL, /* map of content-type to priorities */
256, /* push diary size */
0, /* copy files across threads */
- NULL /* push list */
+ NULL, /* push list */
+ 0, /* early hints, http status 103 */
};
void h2_config_init(apr_pool_t *pool)
@@ -97,6 +98,7 @@ static void *h2_config_create(apr_pool_t
conf->push_diary_size = DEF_VAL;
conf->copy_files = DEF_VAL;
conf->push_list = NULL;
+ conf->early_hints = DEF_VAL;
return conf;
}
@@ -148,6 +150,7 @@ static void *h2_config_merge(apr_pool_t
else {
n->push_list = add->push_list? add->push_list : base->push_list;
}
+ n->early_hints = H2_CONFIG_GET(add, base, early_hints);
return n;
}
@@ -203,6 +206,8 @@ apr_int64_t h2_config_geti64(const h2_co
return H2_CONFIG_GET(conf, &defconf, push_diary_size);
case H2_CONF_COPY_FILES:
return H2_CONFIG_GET(conf, &defconf, copy_files);
+ case H2_CONF_EARLY_HINTS:
+ return H2_CONFIG_GET(conf, &defconf, early_hints);
default:
return DEF_VAL;
}
@@ -588,6 +593,23 @@ static const char *h2_conf_add_push_res(
return NULL;
}
+static const char *h2_conf_set_early_hints(cmd_parms *parms,
+ void *arg, const char *value)
+{
+ h2_config *cfg = (h2_config *)h2_config_sget(parms->server);
+ if (!strcasecmp(value, "On")) {
+ cfg->early_hints = 1;
+ return NULL;
+ }
+ else if (!strcasecmp(value, "Off")) {
+ cfg->early_hints = 0;
+ return NULL;
+ }
+
+ (void)arg;
+ return "value must be On or Off";
+}
+
#define AP_END_CMD AP_INIT_TAKE1(NULL, NULL, NULL, RSRC_CONF, NULL)
const command_rec h2_cmds[] = {
@@ -631,6 +653,8 @@ const command_rec h2_cmds[] = {
OR_FILEINFO, "on to perform copy of file data"),
AP_INIT_TAKE123("H2PushResource", h2_conf_add_push_res, NULL,
OR_FILEINFO, "add a resource to be pushed in this location/on this server."),
+ AP_INIT_TAKE1("H2EarlyHints", h2_conf_set_early_hints, NULL,
+ RSRC_CONF, "on to enable interim status 103 responses"),
AP_END_CMD
};
Modified: httpd/httpd/trunk/modules/http2/h2_config.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_config.h?rev=1771015&r1=1771014&r2=1771015&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_config.h (original)
+++ httpd/httpd/trunk/modules/http2/h2_config.h Wed Nov 23 18:13:06 2016
@@ -41,6 +41,7 @@ typedef enum {
H2_CONF_PUSH,
H2_CONF_PUSH_DIARY_SIZE,
H2_CONF_COPY_FILES,
+ H2_CONF_EARLY_HINTS,
} h2_config_var_t;
struct apr_hash_t;
@@ -77,6 +78,7 @@ typedef struct h2_config {
int push_diary_size; /* # of entries in push diary */
int copy_files; /* if files shall be copied vs setaside on output */
apr_array_header_t *push_list;/* list of h2_push_res configurations */
+ int early_hints; /* support status code 103 */
} h2_config;
Modified: httpd/httpd/trunk/modules/http2/h2_session.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_session.c?rev=1771015&r1=1771014&r2=1771015&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_session.c (original)
+++ httpd/httpd/trunk/modules/http2/h2_session.c Wed Nov 23 18:13:06 2016
@@ -1501,6 +1501,14 @@ static apr_status_t on_stream_headers(h2
apr_itoa(stream->pool, connFlowOut));
}
+ if (headers->status == 103
+ && !h2_config_geti(session->config, H2_CONF_EARLY_HINTS)) {
+ /* suppress sending this to the client, it might have triggered
+ * pushes and served its purpose nevertheless */
+ rv = 0;
+ goto leave;
+ }
+
ngh = h2_util_ngheader_make_res(stream->pool, headers->status, hout);
rv = nghttp2_submit_response(session->ngh2, stream->id,
ngh->nv, ngh->nvlen, pprovider);