Search code examples
angularjsxmlhttprequest

XMLHttpRequest cannot load .... Response for preflight has invalid HTTP status code 401


Below is my service call where I am trying to do a basic auth. I have checked multiple blogs could not find the solution for this.

Can anybody help me to solve this issue as I am getting below error:

XMLHttpRequest cannot load

Response for preflight has invalid HTTP status code 401

I could not find the basic auth in the network tab in developer options also.

function() {
    "use strict";
    var APIservice = function($http, $base64) {
        var getDetails = function(postData) {
            $http.defaults.headers.common['Access-Control-Allow-Origin'] = "*";
            $http.defaults.headers.common['Access-Control-Allow-Methods'] = "GET,PUT,POST,DELETE,OPTIONS";
            $http.defaults.headers.common['Access-Control-Allow-Headers'] = "Content-Type, Authorization, Content-Length, X-Requested-With";
            $http.defaults.headers.common['Content-Type'] = undefined;
            console.log($http.defaults.headers.common.Authorization);
            //console.log($http.defaults.headers.common.Authorization);
            return $http.get('http://52.74.68.202:8080/rest/v1/step/all')
                .then(function(response, headers, config) {
                    console.log(response);
                    return response;
                });
        };
        return {
            getDetails: getDetails
        }
    }
    var module = angular.module('expframework');
    module.factory("APIservice", APIservice);
    module.run(['$http', '$base64', function($http, $base64) {
        var authdata = $base64.encode('test:test');
        $http.defaults.headers.common['Authorization'] = 'Basic ' + authdata;
    }]);
    module.config(['$httpProvider', '$base64', function($httpProvider, $base64) {
        var authdata = $base64.encode('test:test');
        $httpProvider.defaults.headers.common['Authorization'] = 'Basic ' + authdata;
    }])
}();

It is working in Safari and emulators but not working in Chrome and Firefox

Please help me to fix this. Thanks in advance.


Solution

  • Since your server threw a 401, I guess it tried to authenticate the preflight request. From https://stackoverflow.com/a/15734032/1225328:

    The W3 spec for CORS preflight requests clearly states that user credentials should be excluded.

    [...]

    Simply have the server (API in this example) respond to OPTIONS requests without requiring authentication.