diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cowboy_compress_h.erl | 12 | ||||
-rw-r--r-- | src/cowboy_http.erl | 5 | ||||
-rw-r--r-- | src/cowboy_http2.erl | 5 |
3 files changed, 15 insertions, 7 deletions
diff --git a/src/cowboy_compress_h.erl b/src/cowboy_compress_h.erl index fb5ed71..781cc0a 100644 --- a/src/cowboy_compress_h.erl +++ b/src/cowboy_compress_h.erl @@ -23,6 +23,7 @@ -record(state, { next :: any(), + threshold :: non_neg_integer() | undefined, compress = undefined :: undefined | gzip, deflate = undefined :: undefined | zlib:zstream() }). @@ -31,8 +32,9 @@ -> {cowboy_stream:commands(), #state{}}. init(StreamID, Req, Opts) -> State0 = check_req(Req), + CompressThreshold = maps:get(compress_threshold, Opts, 300), {Commands0, Next} = cowboy_stream:init(StreamID, Req, Opts), - fold(Commands0, State0#state{next=Next}). + fold(Commands0, State0#state{next=Next, threshold=CompressThreshold}). -spec data(cowboy_stream:streamid(), cowboy_stream:fin(), cowboy_req:resp_body(), State) -> {cowboy_stream:commands(), State} when State::#state{}. @@ -100,16 +102,16 @@ fold([], State, Acc) -> fold([Response={response, _, _, {sendfile, _, _, _}}|Tail], State, Acc) -> fold(Tail, State, [Response|Acc]); %% We compress full responses directly, unless they are lower than -%% 300 bytes or we find we are not able to by looking at the headers. -%% @todo It might be good to allow this size to be configured? -fold([Response0={response, _, Headers, Body}|Tail], State0, Acc) -> +%% the configured threshold or we find we are not able to by looking at the headers. +fold([Response0={response, _, Headers, Body}|Tail], + State0=#state{threshold=CompressThreshold}, Acc) -> case check_resp_headers(Headers, State0) of State=#state{compress=undefined} -> fold(Tail, State, [Response0|Acc]); State1 -> BodyLength = iolist_size(Body), if - BodyLength =< 300 -> + BodyLength =< CompressThreshold -> fold(Tail, State1, [Response0|Acc]); true -> {Response, State} = gzip_response(Response0, State1), diff --git a/src/cowboy_http.erl b/src/cowboy_http.erl index 340ced7..91a539f 100644 --- a/src/cowboy_http.erl +++ b/src/cowboy_http.erl @@ -25,6 +25,7 @@ -export([system_code_change/4]). -type opts() :: #{ + compress_threshold => non_neg_integer(), connection_type => worker | supervisor, env => cowboy_middleware:env(), idle_timeout => timeout(), @@ -46,7 +47,9 @@ shutdown_timeout => timeout(), stream_handlers => [module()], tracer_callback => cowboy_tracer_h:tracer_callback(), - tracer_match_specs => cowboy_tracer_h:tracer_match_specs() + tracer_match_specs => cowboy_tracer_h:tracer_match_specs(), + %% Open ended because configured stream handlers might add options. + _ => _ }. -export_type([opts/0]). diff --git a/src/cowboy_http2.erl b/src/cowboy_http2.erl index f6f9cf5..a1dd93e 100644 --- a/src/cowboy_http2.erl +++ b/src/cowboy_http2.erl @@ -27,6 +27,7 @@ -export([system_code_change/4]). -type opts() :: #{ + compress_threshold => non_neg_integer(), connection_type => worker | supervisor, enable_connect_protocol => boolean(), env => cowboy_middleware:env(), @@ -47,7 +48,9 @@ shutdown_timeout => timeout(), stream_handlers => [module()], tracer_callback => cowboy_tracer_h:tracer_callback(), - tracer_match_specs => cowboy_tracer_h:tracer_match_specs() + tracer_match_specs => cowboy_tracer_h:tracer_match_specs(), + %% Open ended because configured stream handlers might add options. + _ => _ }. -export_type([opts/0]). |