【问题标题】:how to pass headers in http call in angularjs如何在angularjs中的http调用中传递标头
【发布时间】:2015-05-17 14:27:26
【问题描述】:

我正在cordova/phonegap 中开发移动应用程序。我在前端使用 angularJS。我在发布请求中调用需要“API-KEY”属性作为标头的服务。

我展示了一些文档,并尝试了这些方式。但没用。

postServiceDataWithHeader: function (url, data) {
            var deferred = $q.defer();
            var req = {
                method: 'POST',
                url: url,
                data: JSON.stringify(data),
                headers: {
                    'user-Token': $rootScope.user.APIKEY,
                    'content-Type': 'Application/Json'
                }
            }
            $http(req).success(function (data) {
                deferred.resolve(data);
            }).error(function (data, status, headers, config) {
                alert("Server failed to save data");
                deferred.reject(status);
            });
            return deferred.promise;
        } 

我尝试在调用中添加标题,

JodoModule.config(function ($routeProvider, $httpProvider) {
    $httpProvider.defaults.headers.post['user-Token'] = 'finding???';
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
});

第二种方法是,

JodoModule.run(['$rootScope', '$http', function ($rootScope, $http) {    
    $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w';    
}]);

我可以调用服务,但是在服务器端,我没有得到标头值,即使在提琴手中也没有传递标头。

是什么原因?我是否需要在代码中添加任何其他内容来为每个 POST 请求传递标头。 ?

【问题讨论】:

    标签: angularjs cordova http-headers angularjs-service angularjs-http


    【解决方案1】:

    我已经使用你的一种方法为你制作了工作 plunker

    http://plnkr.co/edit/36Dq6UXgyeMEXOzycrua?p=preview

    app.config(function ( $httpProvider) {
        $httpProvider.defaults.headers.post['User-Token'] = 'finding???';
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
    });
    

    虽然如果是 CORS,您必须将“用户令牌”添加到接受的标头 即对于 apache2

    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Allow-Headers "origin, user-token, x-requested-with, content-type"
    Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
    

    【讨论】:

    • 在服务器端,我允许所有来源和所有标头。当我通过 fiddler 通过添加标头来调用服务时,它工作正常。但是当我通过角度应用程序调用服务时,它在服务器端不起作用......当我从提琴手传递标头时,它会将每个标头显示为属性,即。 User-Agent: Fiddler Host: localhost:62676 Content-Length: 0 user-token: 'this is key'..... 但是当我通过应用程序传递标头时,它会在单个属性中显示所有标头,而没有它们的值,访问-Control-Request-Headers:接受、用户令牌、内容类型。
    • 您的意思是当您在浏览器中查看开发人员工具时,它会在请求标头中显示“Access-Control-Request-Headers:accept, user-token, content-type”?
    • 它不会,它在我的 plunker 中是一样的,但作为回报,你可以看到打印的标题和它的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2020-02-11
    • 2013-09-23
    相关资源
    最近更新 更多