Browse Source

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.
Loïc Hoguin 11 years ago
parent
commit
5d27d4d175
1 changed files with 6 additions and 2 deletions
  1. 6 2
      src/cowboy_rest.erl

+ 6 - 2
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);