diff options
author | Adrian Roe <[email protected]> | 2013-06-26 18:04:20 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2013-11-08 21:56:37 +0100 |
commit | c2e946708e479d647a81afc8d8f59992f92c6a95 (patch) | |
tree | acfdd8cae6aa88597a11e085e59647967f1045b5 /test | |
parent | 9d2096cd35c05ac43fa34ebe4ac31c9265d263cb (diff) | |
download | cowboy-c2e946708e479d647a81afc8d8f59992f92c6a95.tar.gz cowboy-c2e946708e479d647a81afc8d8f59992f92c6a95.tar.bz2 cowboy-c2e946708e479d647a81afc8d8f59992f92c6a95.zip |
Add a workaround to disable chunked transfer-encoding
This is an undocumented workaround to disable chunks when using HTTP/1.1.
It can be used when the client advertises itself as HTTP/1.1 despite not
understanding the chunked transfer-encoding.
Usage can be found looking at the test for it. When activated, Cowboy
will still advertise itself as HTTP/1.1, but will send the body the same
way it would if it was HTTP/1.0.
Diffstat (limited to 'test')
-rw-r--r-- | test/http_SUITE.erl | 14 | ||||
-rw-r--r-- | test/http_SUITE_data/http_streamed.erl | 20 |
2 files changed, 34 insertions, 0 deletions
diff --git a/test/http_SUITE.erl b/test/http_SUITE.erl index 28849fc..f0196ec 100644 --- a/test/http_SUITE.erl +++ b/test/http_SUITE.erl @@ -90,6 +90,7 @@ -export([stream_body_set_resp_close/1]). -export([stream_body_set_resp_chunked/1]). -export([stream_body_set_resp_chunked10/1]). +-export([streamed_response/1]). -export([te_chunked/1]). -export([te_chunked_chopped/1]). -export([te_chunked_delayed/1]). @@ -167,6 +168,7 @@ groups() -> stream_body_set_resp_close, stream_body_set_resp_chunked, stream_body_set_resp_chunked10, + streamed_response, te_chunked, te_chunked_chopped, te_chunked_delayed, @@ -352,6 +354,7 @@ init_dispatch(Config) -> cowboy_router:compile([ {"localhost", [ {"/chunked_response", http_chunked, []}, + {"/streamed_response", http_streamed, []}, {"/init_shutdown", http_init_shutdown, []}, {"/long_polling", http_long_polling, []}, {"/headers/dupe", http_handler, @@ -1285,6 +1288,17 @@ stream_body_set_resp_chunked10(Config) -> end, {error, closed} = Transport:recv(Socket, 0, 1000). +streamed_response(Config) -> + Client = ?config(client, Config), + {ok, Client2} = cowboy_client:request(<<"GET">>, + build_url("/streamed_response", Config), Client), + {ok, 200, Headers, Client3} = cowboy_client:response(Client2), + false = lists:keymember(<<"transfer-encoding">>, 1, Headers), + {ok, Transport, Socket} = cowboy_client:transport(Client3), + {ok, <<"streamed_handler\r\nworks fine!">>} + = Transport:recv(Socket, 29, 1000), + {error, closed} = cowboy_client:response(Client3). + te_chunked(Config) -> Client = ?config(client, Config), Body = list_to_binary(io_lib:format("~p", [lists:seq(1, 100)])), diff --git a/test/http_SUITE_data/http_streamed.erl b/test/http_SUITE_data/http_streamed.erl new file mode 100644 index 0000000..674cc40 --- /dev/null +++ b/test/http_SUITE_data/http_streamed.erl @@ -0,0 +1,20 @@ +%% Feel free to use, reuse and abuse the code in this file. + +-module(http_streamed). +-behaviour(cowboy_http_handler). +-export([init/3, handle/2, terminate/3]). + +init({_Transport, http}, Req, _Opts) -> + {ok, Req, undefined}. + +handle(Req, State) -> + Req2 = cowboy_req:set([{resp_state, waiting_stream}], Req), + {ok, Req3} = cowboy_req:chunked_reply(200, Req2), + timer:sleep(100), + cowboy_req:chunk("streamed_handler\r\n", Req3), + timer:sleep(100), + cowboy_req:chunk("works fine!", Req3), + {ok, Req3, State}. + +terminate(_, _, _) -> + ok. |