From 5d27d4d1758a56f12913576ffc85ec73792bdc42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Sat, 9 Nov 2013 18:26:49 +0100 Subject: Properly send 201 on PUT requests when resource didn't exist Regardless of whether a location header has been set, as explained in the HTTP RFC. --- src/cowboy_rest.erl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cowboy_rest.erl b/src/cowboy_rest.erl index 862ebbf..30ed15d 100644 --- a/src/cowboy_rest.erl +++ b/src/cowboy_rest.erl @@ -801,8 +801,12 @@ process_content_type(Req, State=#state{method=Method, exists=Exists}, Fun) -> error_terminate(Req, State, Class, Reason, Fun) end. -%% If the resource is new and has been created at another location -%% we send a 201. Otherwise we continue as normal. +%% If PUT was used then the resource has been created at the current URL. +%% Otherwise, if a location header has been set then the resource has been +%% created at a new URL. If not, send a 200 or 204 as expected from a +%% POST or PATCH request. +maybe_created(Req, State=#state{method= <<"PUT">>}) -> + respond(Req, State, 201); maybe_created(Req, State) -> case cowboy_req:has_resp_header(<<"location">>, Req) of true -> respond(Req, State, 201); -- cgit v1.2.3