diff options
author | Loïc Hoguin <[email protected]> | 2018-04-23 15:49:34 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-04-23 15:49:34 +0200 |
commit | 8b9a09c9fe670e95fe888009e3eb28439eab9ce0 (patch) | |
tree | a74be0d668124dd023b371a15b3abfa5f2bec3dd /test | |
parent | 9af8b0d23a2887f9bae5e8f54bc2b055a0375efe (diff) | |
download | cowboy-8b9a09c9fe670e95fe888009e3eb28439eab9ce0.tar.gz cowboy-8b9a09c9fe670e95fe888009e3eb28439eab9ce0.tar.bz2 cowboy-8b9a09c9fe670e95fe888009e3eb28439eab9ce0.zip |
HTTP/2 informational responses don't end the stream
Diffstat (limited to 'test')
-rw-r--r-- | test/rfc7540_SUITE.erl | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/rfc7540_SUITE.erl b/test/rfc7540_SUITE.erl index a97da71..6c3d989 100644 --- a/test/rfc7540_SUITE.erl +++ b/test/rfc7540_SUITE.erl @@ -2767,6 +2767,27 @@ settings_initial_window_size_reject_overflow(Config) -> % behavior. These MAY be treated by an implementation as being % equivalent to INTERNAL_ERROR. +headers_informational_nofin(Config) -> + doc("Informational HEADERS frames must not have the END_STREAM flag set. (RFC7540 8.1)"), + {ok, Socket} = do_handshake(Config), + %% Send a HEADERS frame on an idle stream. + {HeadersBlock, _} = cow_hpack:encode([ + {<<":method">>, <<"POST">>}, + {<<":scheme">>, <<"http">>}, + {<<":authority">>, <<"localhost">>}, %% @todo Correct port number. + {<<":path">>, <<"/echo/read_body">>}, + {<<"expect">>, <<"100-continue">>}, + {<<"content-length">>, <<"1000000">>} + ]), + ok = gen_tcp:send(Socket, cow_http2:headers(1, nofin, HeadersBlock)), + %% Receive an informational HEADERS frame without the END_STREAM flag. + {ok, << Len:24, 1:8, 0:5, 1:1, 0:2, _:32 >>} = gen_tcp:recv(Socket, 9, 6000), + {ok, RespHeadersBlock} = gen_tcp:recv(Socket, Len, 6000), + %% Confirm it has a 100 status code. + {RespHeaders, _} = cow_hpack:decode(RespHeadersBlock), + {_, <<"100">>} = lists:keyfind(<<":status">>, 1, RespHeaders), + ok. + %% (RFC7540 8.1) % A HEADERS frame (and associated CONTINUATION frames) can only appear % at the start or end of a stream. An endpoint that receives a HEADERS |