mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-15 12:40:25 +00:00

Currently the compression threshold is set to 300 and hardcoded in the codebase. There are cases where it make sense to allow this to be configured, for instance when you want to enforce all responses to be compressed regarldess of their size.
39 lines
1.3 KiB
Erlang
39 lines
1.3 KiB
Erlang
%% This module sends a response body of varying sizes to test
|
|
%% the cowboy_compress_h stream handler.
|
|
|
|
-module(compress_h).
|
|
|
|
-export([init/2]).
|
|
|
|
init(Req0, State=reply) ->
|
|
Req = case cowboy_req:binding(what, Req0) of
|
|
<<"small">> ->
|
|
cowboy_req:reply(200, #{}, lists:duplicate(100, $a), Req0);
|
|
<<"large">> ->
|
|
cowboy_req:reply(200, #{}, lists:duplicate(100000, $a), Req0);
|
|
<<"over-threshold">> ->
|
|
cowboy_req:reply(200, #{}, lists:duplicate(200, $a), Req0);
|
|
<<"content-encoding">> ->
|
|
cowboy_req:reply(200, #{<<"content-encoding">> => <<"compress">>},
|
|
lists:duplicate(100000, $a), Req0);
|
|
<<"sendfile">> ->
|
|
AppFile = code:where_is_file("cowboy.app"),
|
|
Size = filelib:file_size(AppFile),
|
|
cowboy_req:reply(200, #{}, {sendfile, 0, Size, AppFile}, Req0)
|
|
end,
|
|
{ok, Req, State};
|
|
init(Req0, State=stream_reply) ->
|
|
Req = case cowboy_req:binding(what, Req0) of
|
|
<<"large">> ->
|
|
stream_reply(#{}, Req0);
|
|
<<"content-encoding">> ->
|
|
stream_reply(#{<<"content-encoding">> => <<"compress">>}, Req0)
|
|
end,
|
|
{ok, Req, State}.
|
|
|
|
stream_reply(Headers, Req0) ->
|
|
Data = lists:duplicate(10000, $a),
|
|
Req = cowboy_req:stream_reply(200, Headers, Req0),
|
|
_ = [cowboy_req:stream_body(Data, nofin, Req) || _ <- lists:seq(1,9)],
|
|
cowboy_req:stream_body(Data, fin, Req),
|
|
Req.
|