Browse Source

Enable range requests support in cowboy_static

Loïc Hoguin 6 years ago
parent
commit
fe1ee080de
2 changed files with 18 additions and 0 deletions
  1. 9 0
      src/cowboy_static.erl
  2. 9 0
      test/static_handler_SUITE.erl

+ 9 - 0
src/cowboy_static.erl

@@ -20,6 +20,7 @@
 -export([forbidden/2]).
 -export([content_types_provided/2]).
 -export([charsets_provided/2]).
+-export([ranges_provided/2]).
 -export([resource_exists/2]).
 -export([last_modified/2]).
 -export([generate_etag/2]).
@@ -340,6 +341,14 @@ charsets_provided(Req, State={Path, _, Extra}) ->
 			{[Charset], Req, State}
 	end.
 
+%% Enable support for range requests.
+
+-spec ranges_provided(Req, State)
+	-> {[{binary(), auto}], Req, State}
+	when State::state().
+ranges_provided(Req, State) ->
+	{[{<<"bytes">>, auto}], Req, State}.
+
 %% Assume the resource doesn't exist if it's not a regular file.
 
 -spec resource_exists(Req, State)

+ 9 - 0
test/static_handler_SUITE.erl

@@ -838,6 +838,15 @@ priv_file_in_ez_archive(Config) ->
 	{_, <<"text/html">>} = lists:keyfind(<<"content-type">>, 1, Headers),
 	ok.
 
+range_request(Config) ->
+	doc("Confirm that range requests are enabled."),
+	{206, Headers, <<"less space.\n">>} = do_get("/dir/plain.txt",
+		[{<<"range">>, <<"bytes=4-">>}], Config),
+	{_, <<"bytes">>} = lists:keyfind(<<"accept-ranges">>, 1, Headers),
+	{_, <<"bytes 4-15/16">>} = lists:keyfind(<<"content-range">>, 1, Headers),
+	{_, <<"application/octet-stream">>} = lists:keyfind(<<"content-type">>, 1, Headers),
+	ok.
+
 unicode_basic_latin(Config) ->
 	doc("Get a file with non-urlencoded characters from Unicode Basic Latin block."),
 	_ = [case do_get("/char/" ++ [C], Config) of