REST PUT请求返回GET 500错误,是否合理?

I am not any kind of RESTful API expert, but I have a simple PUT/DELETE function in an AngularJS app that has been functioning as expected until now. I am trying to work out whether this problem is likely to lie in my app, or in the (php) back-end that is running the endpoint. Other REST services are functioning normally & the server appears to be running fine.

This function only ever calls PUT or DELETE, assigned as var method:

     if (food.favourite === true) {
                method = "PUT";
                console.log("method is " + method)

            } else if (food.favourite === false) {
                method = "DELETE";
                console.log("method is " + method)
            }
            $http({
                method: method,
                url: $scope.URL
            }).success(function (data, status, headers, config) {
                console.log(method + " successful")
            }).error(function (data, status, headers, config) {
                    console.log(method + " not successful")
            });

I have one $http GET in my app that uses a different endpoint. There is no $http GET pointing to this endpoint anywhere in my app- I have searched extensively.

When I trigger the function containing the $http above, the console shows:

 method is PUT 
 GET http://localhost:8888/api/ext/51/ 500 (Internal Server Error)
 PUT not successful 

Why would I be receiving a GET error on an unsuccessful PUT request? Does this point to a problem in my function, or a problem with the endpoint?

Thank you for any help in understanding this problem.


Update 1

Info from the Network panel: calling the $http function above triggers two simultaneous requests, one 'PUT' and one 'GET'. The 'PUT' returns a 301 code, and the 'GET' returns a 500 server error (which I think is to be expected, as this endpoint is not set up to respond to 'GET', only to 'PUT' and 'DELETE').

So: why would my code be generating two simultaneous requests with different methods?

For future seekers of answers to similar questions: it is a standard behaviour (of REST in general or this implentation? Not sure) to try to return a GET for every action that is called. Evidence for this is that if I check the Network panel for all the other (successful) $http functions, they also have two actions visible: the original PUT/GET/DELETE etc, + a GET.

We are seeing a 500 Error on the GET for these particular requests because the configuration of this particular endpoint does not allow for a GET. This should not have any effect on the PUT/DELETE actions on this endpoint- the 500 Error is not related to the reason why the PUT/DELETE actions weren't working. In terms of trying to solve this specific problem, it's a red herring.

The reason the PUT/DELETE was not working was because the service was broken on the server-side.

I ran into this and the issue was in how I was outputting the errors in the first argument for header. They need to be in this format:

header('400: Error', true, 400);

or in your case, of course:

header('301: Moved Permanently', true, 301);
header('Location: ' . $url);

Note that this WILL NOT work:

header('Some Random Text', true, 400); // $http.error shows status of 500