0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Allow users to pass a raw binary() as the expires header.

This commit is contained in:
Drew Varner 2014-06-06 02:37:24 -04:00
parent 7a808e0aa3
commit 6ed25fd60b
4 changed files with 32 additions and 2 deletions

View file

@ -275,7 +275,7 @@ REST callbacks description
### expires ### expires
> * Methods: GET, HEAD > * Methods: GET, HEAD
> * Value type: calendar:datetime() | undefined > * Value type: calendar:datetime() | binary() | undefined
> * Default value: undefined > * Default value: undefined
> >
> Return the date of expiration of the resource. > Return the date of expiration of the resource.

View file

@ -52,7 +52,7 @@
%% Cached resource calls. %% Cached resource calls.
etag :: undefined | no_call | {strong | weak, binary()}, etag :: undefined | no_call | {strong | weak, binary()},
last_modified :: undefined | no_call | calendar:datetime(), last_modified :: undefined | no_call | calendar:datetime(),
expires :: undefined | no_call | calendar:datetime() expires :: undefined | no_call | calendar:datetime() | binary()
}). }).
-spec upgrade(Req, Env, module(), any()) -spec upgrade(Req, Env, module(), any())
@ -896,6 +896,10 @@ set_resp_expires(Req, State) ->
case Expires of case Expires of
Expires when is_atom(Expires) -> Expires when is_atom(Expires) ->
{Req2, State2}; {Req2, State2};
Expires when is_binary(Expires) ->
Req3 = cowboy_req:set_resp_header(
<<"expires">>, Expires, Req2),
{Req3, State2};
Expires -> Expires ->
ExpiresBin = cowboy_clock:rfc1123(Expires), ExpiresBin = cowboy_clock:rfc1123(Expires),
Req3 = cowboy_req:set_resp_header( Req3 = cowboy_req:set_resp_header(

View file

@ -207,6 +207,7 @@ init_dispatch(Config) ->
{"/patch", rest_patch_resource, []}, {"/patch", rest_patch_resource, []},
{"/resetags", rest_resource_etags, []}, {"/resetags", rest_resource_etags, []},
{"/rest_expires", rest_expires, []}, {"/rest_expires", rest_expires, []},
{"/rest_expires_binary", rest_expires_binary, []},
{"/rest_empty_resource", rest_empty_resource, []}, {"/rest_empty_resource", rest_empty_resource, []},
{"/loop_stream_recv", http_loop_stream_recv, []}, {"/loop_stream_recv", http_loop_stream_recv, []},
{"/", http_handler, []} {"/", http_handler, []}
@ -687,6 +688,13 @@ rest_expires(Config) ->
Expires = LastModified = <<"Fri, 21 Sep 2012 22:36:14 GMT">>, Expires = LastModified = <<"Fri, 21 Sep 2012 22:36:14 GMT">>,
ok. ok.
rest_expires_binary(Config) ->
ConnPid = gun_open(Config),
Ref = gun:get(ConnPid, "/rest_expires_binary"),
{response, nofin, 200, Headers} = gun:await(ConnPid, Ref),
{_, <<"0">>} = lists:keyfind(<<"expires">>, 1, Headers),
ok.
rest_keepalive(Config) -> rest_keepalive(Config) ->
ConnPid = gun_open(Config), ConnPid = gun_open(Config),
Refs = [gun:get(ConnPid, "/simple") || _ <- lists:seq(1, 10)], Refs = [gun:get(ConnPid, "/simple") || _ <- lists:seq(1, 10)],

View file

@ -0,0 +1,18 @@
-module(rest_expires_binary).
-export([init/3]).
-export([content_types_provided/2]).
-export([get_text_plain/2]).
-export([expires/2]).
init(_Transport, _Req, _Opts) ->
{upgrade, protocol, cowboy_rest}.
content_types_provided(Req, State) ->
{[{{<<"text">>, <<"plain">>, []}, get_text_plain}], Req, State}.
get_text_plain(Req, State) ->
{<<"This is REST!">>, Req, State}.
expires(Req, State) ->
{<<"0">>, Req, State}.