mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 12:20:24 +00:00
Ignore malformed accept-encoding headers in cowboy_compress_h
This commit is contained in:
parent
aa1a7d09f3
commit
3b85b808ae
2 changed files with 24 additions and 2 deletions
|
@ -71,9 +71,10 @@ early_error(StreamID, Reason, PartialReq, Resp, Opts) ->
|
||||||
%% Internal.
|
%% Internal.
|
||||||
|
|
||||||
%% Check if the client supports decoding of gzip responses.
|
%% Check if the client supports decoding of gzip responses.
|
||||||
|
%%
|
||||||
|
%% A malformed accept-encoding header is ignored (no compression).
|
||||||
check_req(Req) ->
|
check_req(Req) ->
|
||||||
%% @todo Probably shouldn't unconditionally crash on failure.
|
try cowboy_req:parse_header(<<"accept-encoding">>, Req) of
|
||||||
case cowboy_req:parse_header(<<"accept-encoding">>, Req) of
|
|
||||||
%% Client doesn't support any compression algorithm.
|
%% Client doesn't support any compression algorithm.
|
||||||
undefined ->
|
undefined ->
|
||||||
#state{compress=undefined};
|
#state{compress=undefined};
|
||||||
|
@ -87,6 +88,9 @@ check_req(Req) ->
|
||||||
_ ->
|
_ ->
|
||||||
#state{compress=gzip}
|
#state{compress=gzip}
|
||||||
end
|
end
|
||||||
|
catch
|
||||||
|
_:_ ->
|
||||||
|
#state{compress=undefined}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%% Do not compress responses that contain the content-encoding header.
|
%% Do not compress responses that contain the content-encoding header.
|
||||||
|
|
|
@ -62,6 +62,15 @@ do_get(Path, ReqHeaders, Config) ->
|
||||||
|
|
||||||
%% Tests.
|
%% Tests.
|
||||||
|
|
||||||
|
gzip_accept_encoding_malformed(Config) ->
|
||||||
|
doc("Send malformed accept-encoding; get an uncompressed response."),
|
||||||
|
{200, Headers, _} = do_get("/reply/large",
|
||||||
|
[{<<"accept-encoding">>, <<";">>}], Config),
|
||||||
|
false = lists:keyfind(<<"content-encoding">>, 1, Headers),
|
||||||
|
false = lists:keyfind(<<"vary">>, 1, Headers),
|
||||||
|
{_, <<"100000">>} = lists:keyfind(<<"content-length">>, 1, Headers),
|
||||||
|
ok.
|
||||||
|
|
||||||
gzip_accept_encoding_missing(Config) ->
|
gzip_accept_encoding_missing(Config) ->
|
||||||
doc("Don't send accept-encoding; get an uncompressed response."),
|
doc("Don't send accept-encoding; get an uncompressed response."),
|
||||||
{200, Headers, _} = do_get("/reply/large",
|
{200, Headers, _} = do_get("/reply/large",
|
||||||
|
@ -80,6 +89,15 @@ gzip_accept_encoding_no_gzip(Config) ->
|
||||||
{_, <<"100000">>} = lists:keyfind(<<"content-length">>, 1, Headers),
|
{_, <<"100000">>} = lists:keyfind(<<"content-length">>, 1, Headers),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
gzip_accept_encoding_not_supported(Config) ->
|
||||||
|
doc("Send unsupported accept-encoding; get an uncompressed response."),
|
||||||
|
{200, Headers, _} = do_get("/reply/large",
|
||||||
|
[{<<"accept-encoding">>, <<"application/gzip">>}], Config),
|
||||||
|
false = lists:keyfind(<<"content-encoding">>, 1, Headers),
|
||||||
|
false = lists:keyfind(<<"vary">>, 1, Headers),
|
||||||
|
{_, <<"100000">>} = lists:keyfind(<<"content-length">>, 1, Headers),
|
||||||
|
ok.
|
||||||
|
|
||||||
gzip_reply_content_encoding(Config) ->
|
gzip_reply_content_encoding(Config) ->
|
||||||
doc("Reply with content-encoding header; get an uncompressed response."),
|
doc("Reply with content-encoding header; get an uncompressed response."),
|
||||||
{200, Headers, _} = do_get("/reply/content-encoding",
|
{200, Headers, _} = do_get("/reply/content-encoding",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue