{"action":"opened","issue":{"url":"https://api.github.com/repos/lucas-clemente/quic-go/issues/109","repository_url":"https://api.github.com/repos/lucas-clemente/quic-go","labels_url":"https://api.github.com/repos/lucas-clemente/quic-go/issues/109/labels{/name}","comments_url":"https://api.github.com/repos/lucas-clemente/quic-go/issues/109/comments","events_url":"https://api.github.com/repos/lucas-clemente/quic-go/issues/109/events","html_url":"https://github.com/lucas-clemente/quic-go/issues/109","id":155258196,"number":109,"title":"Figure out when we should consider a stream closed","user":{"login":"lucas-clemente","id":918034,"avatar_url":"https://avatars.githubusercontent.com/u/918034?v=3","gravatar_id":"","url":"https://api.github.com/users/lucas-clemente","html_url":"https://github.com/lucas-clemente","followers_url":"https://api.github.com/users/lucas-clemente/followers","following_url":"https://api.github.com/users/lucas-clemente/following{/other_user}","gists_url":"https://api.github.com/users/lucas-clemente/gists{/gist_id}","starred_url":"https://api.github.com/users/lucas-clemente/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lucas-clemente/subscriptions","organizations_url":"https://api.github.com/users/lucas-clemente/orgs","repos_url":"https://api.github.com/users/lucas-clemente/repos","events_url":"https://api.github.com/users/lucas-clemente/events{/privacy}","received_events_url":"https://api.github.com/users/lucas-clemente/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2016-05-17T13:22:26Z","updated_at":"2016-05-17T13:22:26Z","closed_at":null,"body":"I'm reading the following from the spec and Chrome's source (please correct me if I'm wrong):\r\n\r\nWhen making a http request, the client will send a h2 HEADERS frame on stream 3. This HEADERS frame has an embedded stream id of the \"data\" stream where the client expects the response. It then listens for a response until the data stream is closed (with a set fin-bit in the stream header). If the client wants to upload data (e.g. with a POST request), it immediately sends data on the specified stream, and listens for a response (if any) on the same stream. When sending a request without a request body, the client does not explicitly \"open\" the data stream by sending data there, but implicitly opens it from the HEADERS frame.\r\n\r\nNow, I'm having trouble understanding the states of the data stream, especially with regards to closing. If QUIC streams behaved identical to H2 streams (c.f. http://httpwg.org/specs/rfc7540.html#StreamStatesFigure), the data stream would be, from the server's perspective, in the half-closed (local) state after a GET request (with no request body). After a POST request with request body, it would be in the fully closed state.\r\n\r\nHow does the server determine when it should consider the stream remotely closed, especially when this seems to depend on the details (verb) of the H2 request? I would have expected an empty stream frame with FIN set, but Chrome doesn't send anything like that. "}}