Commit 8a598588 authored by Stefan Eissing's avatar Stefan Eissing
Browse files

Merge of r1769596,1769600,1770395,1770998 from trunk

mod_http2: PUSH triggers only on GET
mod_proxy_http2: 1xx responses not forwarded unconditionally on HTTP/1.x connections


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1771000 13f79535-47bb-0310-9956-ffa450edef68
parent ed65f837
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -684,7 +684,8 @@ static int h2_h2_pre_close_conn(conn_rec *c)
static void check_push(request_rec *r, const char *tag)
{
    const h2_config *conf = h2_config_rget(r);
    if (conf && conf->push_list && conf->push_list->nelts > 0) {
    if (!r->expecting_100 
        && conf && conf->push_list && conf->push_list->nelts > 0) {
        int i, old_status;
        const char *old_line;
        ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, 
+19 −5
Original line number Diff line number Diff line
@@ -160,10 +160,17 @@ static int on_frame_recv(nghttp2_session *ngh2, const nghttp2_frame *frame,
            }
            r = stream->r;
            if (r->status >= 100 && r->status < 200) {
                ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, 
                              "h2_proxy_session(%s): got interim HEADERS, status=%d",
                              session->id, r->status);
                /* By default, we will forward all interim responses when
                 * we are sitting on a HTTP/2 connection to the client */
                int forward = session->h2_front;
                switch(r->status) {
                    case 100:
                        if (stream->waiting_on_100) {
                            stream->waiting_on_100 = 0;
                            r->status_line = ap_get_status_line(r->status);
                            forward = 1;
                        } 
                        break;
                    case 103:
                        /* workaround until we get this into http protocol base
                         * parts. without this, unknown codes are converted to
@@ -174,9 +181,14 @@ static int on_frame_recv(nghttp2_session *ngh2, const nghttp2_frame *frame,
                        r->status_line = ap_get_status_line(r->status);
                        break;
                }
                ap_log_rerror(APLOG_MARK, APLOG_DEBUG, 0, r, APLOGNO(03487) 
                              "h2_proxy_session(%s): got interim HEADERS, "
                              "status=%d, will forward=%d",
                              session->id, r->status, forward);
                if (forward) {
                    ap_send_interim_response(r, 1);
                }
            stream->waiting_on_100 = 0;
            }
            stream_resume(stream);
            break;
        case NGHTTP2_PING:
@@ -582,6 +594,7 @@ static int on_invalid_header_cb(nghttp2_session *ngh2,

h2_proxy_session *h2_proxy_session_setup(const char *id, proxy_conn_rec *p_conn,
                                         proxy_server_conf *conf,
                                         int h2_front, 
                                         unsigned char window_bits_connection,
                                         unsigned char window_bits_stream,
                                         h2_proxy_request_done *done)
@@ -602,6 +615,7 @@ h2_proxy_session *h2_proxy_session_setup(const char *id, proxy_conn_rec *p_conn,
        session->conf = conf;
        session->pool = p_conn->scpool;
        session->state = H2_PROXYS_ST_INIT;
        session->h2_front = h2_front;
        session->window_bits_stream = window_bits_stream;
        session->window_bits_connection = window_bits_connection;
        session->streams = h2_proxy_ihash_create(pool, offsetof(h2_proxy_stream, id));
+2 −0
Original line number Diff line number Diff line
@@ -64,6 +64,7 @@ struct h2_proxy_session {
    
    unsigned int aborted : 1;
    unsigned int check_ping : 1;
    unsigned int h2_front : 1; /* if front-end connection is HTTP/2 */

    h2_proxy_request_done *done;
    void *user_data;
@@ -86,6 +87,7 @@ struct h2_proxy_session {

h2_proxy_session *h2_proxy_session_setup(const char *id, proxy_conn_rec *p_conn,
                                         proxy_server_conf *conf,
                                         int h2_front, 
                                         unsigned char window_bits_connection,
                                         unsigned char window_bits_stream,
                                         h2_proxy_request_done *done);
+2 −0
Original line number Diff line number Diff line
@@ -1473,6 +1473,8 @@ static apr_status_t on_stream_headers(h2_session *session, h2_stream *stream,
         */
        if (!stream->initiated_on
            && !stream->has_response
            && stream->request && stream->request->method
            && !strcmp("GET", stream->request->method)
            && (headers->status < 400)
            && (headers->status != 304)
            && h2_session_push_enabled(session)) {
+2 −2
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@
 * @macro
 * Version number of the http2 module as c string
 */
#define MOD_HTTP2_VERSION "1.8.0"
#define MOD_HTTP2_VERSION "1.8.1"

/**
 * @macro
@@ -34,7 +34,7 @@
 * release. This is a 24 bit number with 8 bits for major number, 8 bits
 * for minor and 8 bits for patch. Version 1.2.3 becomes 0x010203.
 */
#define MOD_HTTP2_VERSION_NUM 0x010800
#define MOD_HTTP2_VERSION_NUM 0x010801


#endif /* mod_h2_h2_version_h */
Loading