[ https://issues.apache.org/jira/browse/TS-4299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15230688#comment-15230688 ]
ASF subversion and git services commented on TS-4299: ----------------------------------------------------- Commit f0ce965e3ded41ad55e199f4eb9f883c08446d96 in trafficserver's branch refs/heads/master from [~zwoop] [ https://git-wip-us.apache.org/repos/asf?p=trafficserver.git;h=f0ce965 ] TS-4299 Allows for the content length to be processed even with C: close This closes #549 > FetchSM / H2 streams can hang if e.g. a plugin adds a Connection: close header > ------------------------------------------------------------------------------ > > Key: TS-4299 > URL: https://issues.apache.org/jira/browse/TS-4299 > Project: Traffic Server > Issue Type: Bug > Components: Core, HTTP/2 > Reporter: Leif Hedstrom > Assignee: Leif Hedstrom > Fix For: 6.2.0 > > > We use header_rewrite to inject Connection: close under certain conditions > (to prevent KA connections from lingering forever during e.g. server > maintenance). However, this interacts poorly with the FetchSM, and therefore, > poorly with H2. Basically, the connection "hangs" because the FetchSM thinks > there's more body data (when there really isn't). > The issue comes from this code: > {code} > bool > FetchSM::has_body() > { > int status_code; > HTTPHdr *hdr; > if (!header_done) > return false; > if (is_method_head) > return false; > // > // The following code comply with HTTP/1.1: > // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4 > // > hdr = &client_response_hdr; > status_code = hdr->status_get(); > if (status_code < 200 || status_code == 204 || status_code == 304) > return false; > if (check_chunked()) > return true; > if (check_connection_close()) > return true; > resp_content_length = hdr->value_get_int64(MIME_FIELD_CONTENT_LENGTH, > MIME_LEN_CONTENT_LENGTH); > if (!resp_content_length) > return false; > return true; > } > {code} > The issue is that it returns "true" if there is a Connection: close header. > I'm not 100% sure what the best solution here, simply removing this doesn't > seem right since it's obviously there to deal with some cases of FetchSM > which are not H2. A couple of unscientific options are > 1) Make sure the H2 code assures that the Connection header is removed in all > cases. I know it deals with it in a few cases, except in this case we add the > Connection: close in the response header object, which therefore enters into > the FetchSM as well. > 2) Have additional state / information in the FetchSM, indicating if > "connection" has semantics or not for this particular FetchSM. E.g. > fetch_sm->set_connection_aware(false); -- This message was sent by Atlassian JIRA (v6.3.4#6332)