]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] http: only consider chunk encoding with HTTP/1.1
authorWilly Tarreau <w@1wt.eu>
Tue, 22 Dec 2009 08:59:58 +0000 (09:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Tue, 22 Dec 2009 08:59:58 +0000 (09:59 +0100)
This must be ignored in case of HTTP/1.0.

src/proto_http.c

index d232148b6211fd80f2efa1bfcce1009e64a8a573..02be35ce1b3bee2d982b5b8c241bd13f710cc481 100644 (file)
@@ -2100,9 +2100,9 @@ int http_wait_for_request(struct session *s, struct buffer *req, int an_bit)
         *     required) if it wishes to insist on receiving a valid Content-Length.
         */
 
-       /* FIXME: chunked encoding is HTTP/1.1 only */
        ctx.idx = 0;
-       while (http_find_header2("Transfer-Encoding", 17, msg->sol, &txn->hdr_idx, &ctx)) {
+       while ((txn->flags & TX_REQ_VER_11) &&
+              http_find_header2("Transfer-Encoding", 17, msg->sol, &txn->hdr_idx, &ctx)) {
                if (ctx.vlen == 8 && strncasecmp(ctx.line + ctx.val, "identity", 8) == 0)
                        continue;
                txn->flags |= TX_REQ_TE_CHNK;
@@ -2792,7 +2792,7 @@ int http_process_request_body(struct session *s, struct buffer *req, int an_bit)
                /* If we have HTTP/1.1 and Expect: 100-continue, then we must
                 * send an HTTP/1.1 100 Continue intermediate response.
                 */
-               if ((likely(msg->sl.rq.v_l == 8) && req->data[msg->som + msg->sl.rq.v + 7] == '1')) {
+               if (txn->flags & TX_REQ_VER_11) {
                        struct hdr_ctx ctx;
                        ctx.idx = 0;
                        /* Expect is allowed in 1.1, look for it */
@@ -3193,9 +3193,9 @@ int http_wait_for_response(struct session *s, struct buffer *rep, int an_bit)
            txn->status == 204 || txn->status == 304)
                goto skip_content_length;
 
-       /* FIXME: chunked encoding is HTTP/1.1 only */
        ctx.idx = 0;
-       while (http_find_header2("Transfer-Encoding", 17, msg->sol, &txn->hdr_idx, &ctx)) {
+       while ((txn->flags & TX_RES_VER_11) &&
+              http_find_header2("Transfer-Encoding", 17, msg->sol, &txn->hdr_idx, &ctx)) {
                if (ctx.vlen == 8 && strncasecmp(ctx.line + ctx.val, "identity", 8) == 0)
                        continue;
                txn->flags |= TX_RES_TE_CHNK;