$http header 'Content-Type' not appending in the header – AngularJS

Issue

I’m using $http to do a GET request and I wanted to append 'Content-Type': 'application/json' in the header. If I don’t append this header 415 (Unsupported Media Type) error is thrown.

I’m using Apache 2.2.13 with ProxyPass, in which I DO NOT say
RequestHeader append Content-Type "application/json". However if I put the RequestHeader configuration in apache $http.get works fine and the 'Content-Type' is also appended.

Scenario 1 :
Using $http, trying GET request

Request :

$http({
    method: 'GET',
    headers: { 'Content-type': 'application/json'},
    url: '/items/?customerId=5656'
});

Chrome Network Tab :

enter image description here


Scenario 2 :
Using Restangular, trying the same GET request

Request :

Restangular.setDefaultHeaders({'Content-Type': 'application/json'})
Restangular.setBaseUrl('/items')
Restangular.all('').getList({customerId: '103020'}, {'Content-Type': 'application/json'});

Chrome Network Tab :

enter image description here

The other interesting part here is, when I do some mistakes on the Request Header like,
Restangular.setDefaultHeaders({'Contentttt-Type': 'application/json'})
and try Scenario 1, I notice the following in the Chrome Network Tab.

enter image description here


Scenario 3 :
Using jQuery ajax, trying the same GET request

Request :

$.ajax({
         url: "/items/?customerId=103020",
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('Content-Type', 'application/json');},
         success: function() { alert('Success!'); }
      });

Chrome Network Tab :

enter image description here

Questions :

  1. Is it necessary to add RequestHeader append Content-Type "application/json" in Apache configuration? But if I add that I get 415 errors on POST requests.
  2. What is the problem with AngularJS and Restangular that it won’t append Content-Type headers to its network calls on GET?
  3. What is the best solution to solve this? I have tried out all the combinations but no luck!

Versions :

Angular : 1.2.22

Restangular : 1.4.0

Solution

Setting a Content-Type header field on an HTTP request that doesn’t have a request body (such as GET) is non-sense.

Maybe what you really want is set “Accept”?

Answered By – Julian Reschke

Answer Checked By – David Marino (AngularFixing Volunteer)

Leave a Reply

Your email address will not be published.