diff --git a/include/types/h1.h b/include/types/h1.h index af5c8962d..d3e442653 100644 --- a/include/types/h1.h +++ b/include/types/h1.h @@ -147,6 +147,7 @@ enum h1m_state { #define H1_MF_CONN_UPG 0x00000080 // message contains "connection: upgrade" #define H1_MF_XFER_LEN 0x00000100 // message xfer size can be determined #define H1_MF_XFER_ENC 0x00000200 // transfer-encoding is present +#define H1_MF_NO_PHDR 0x00000400 // don't add pseudo-headers in the header list /* Note: for a connection to be persistent, we need this for the request : * - one of CLEN or CHNK diff --git a/src/h1.c b/src/h1.c index e3efd5959..c61737221 100644 --- a/src/h1.c +++ b/src/h1.c @@ -1053,13 +1053,15 @@ int h1_headers_to_hdr_list(char *start, const char *stop, state = H1_MSG_RQVER; goto http_output_full; } - http_set_hdr(&hdr[hdr_count++], ist(":method"), sl.rq.m); + if (!(h1m->flags & H1_MF_NO_PHDR)) + http_set_hdr(&hdr[hdr_count++], ist(":method"), sl.rq.m); if (unlikely(hdr_count >= hdr_num)) { state = H1_MSG_RQVER; goto http_output_full; } - http_set_hdr(&hdr[hdr_count++], ist(":path"), sl.rq.u); + if (!(h1m->flags & H1_MF_NO_PHDR)) + http_set_hdr(&hdr[hdr_count++], ist(":path"), sl.rq.u); } sol = ptr - start; @@ -1210,7 +1212,8 @@ int h1_headers_to_hdr_list(char *start, const char *stop, state = H1_MSG_RPREASON; goto http_output_full; } - http_set_hdr(&hdr[hdr_count++], ist(":status"), sl.st.c); + if (!(h1m->flags & H1_MF_NO_PHDR)) + http_set_hdr(&hdr[hdr_count++], ist(":status"), sl.st.c); } sol = ptr - start;