한 요청에 대한 HTTP 헤더 설정


159

앱에 기본 인증이 필요한 하나의 특정 요청이 있으므로 해당 요청에 대한 Authorization 헤더를 설정해야합니다. HTTP 요청 헤더 설정 에 대해 읽었 지만 알 수 있듯이 해당 메소드의 모든 요청에 ​​대해 해당 헤더를 설정합니다. 내 코드에는 다음과 같은 것이 있습니다.

$http.defaults.headers.post.Authorization = "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";

그러나 모든 게시물 요청 이이 헤더를 보내는 것을 원하지 않습니다. 원하는 하나의 요청에 대해서만 헤더를 보내는 방법이 있습니까? 또는 요청 후 제거해야합니까?


답변:


320

구성 객체에는 $http호출 별 헤더에 전달하는 헤더 매개 변수가 있습니다.

$http({method: 'GET', url: 'www.google.com/someapi', headers: {
    'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

또는 바로 가기 방법을 사용하십시오.

$http.get('www.google.com/someapi', {
    headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}
});

유효한 매개 변수 목록은 $ http 서비스 설명서 에서 확인할 수 있습니다 .


1
문서를 좀 더 자세히 살펴 봐야 할 것 같습니다 ... 바로 가기 방법을 사용하려고했습니다. 이것은 잘 작동합니다. 감사.
dnc253

17
@ dnc253 이것은 바로 가기 방법에서도 작동합니다. 코드는$http.get('www.google.com/someapi', {headers: {'Authorization': 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=='}});
Yunchi

1
이 헤더를 자동으로 추가하기 위해 $ http를 확장 할 수있는 방법이 있습니까 ( "주입 가능성"을 유지하면서 기본 헤더 컬렉션에 적용하지 않아도 됨)? 모든 보안 호출에 대해 항상 헤더를 추가해야하는 중복 유형 인 것 같습니다.
야행성

31
나를 위해 작동하지 않습니다. 이 방법으로 추가 한 헤더는 실제 요청에 추가되지 않습니다.
mcv

4
내가 헤더를 설정하려고 할 때마다, 내 요청은로 외출 OPTION결과적으로 내 엔드 포인트가 반환 요청 404 NOT FOUND어떤 의미 : 그것은 단지 알고 GET /someResource있지OPTIONS /someResource
마테우스 펠리페

19

이것을 시도해보십시오. 아마 작동합니다.)

.factory('authInterceptor', function($location, $q, $window) {


return {
    request: function(config) {
      config.headers = config.headers || {};

      config.headers.Authorization = 'xxxx-xxxx';

      return config;
    }
  };
})

.config(function($httpProvider) {
  $httpProvider.interceptors.push('authInterceptor');
})

백엔드도 작동하는지 확인하십시오. RESTful CodeIgniter를 사용하고 있습니다.

class App extends REST_Controller {
    var $authorization = null;

    public function __construct()
    {
        parent::__construct();
        header('Access-Control-Allow-Origin: *');
        header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Authorization");
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
        if ( "OPTIONS" === $_SERVER['REQUEST_METHOD'] ) {
            die();
        }

        if(!$this->input->get_request_header('Authorization')){
            $this->response(null, 400);    
        }

        $this->authorization = $this->input->get_request_header('Authorization');
    }

}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.