>

AngularJS$http서비스가 작동하지 않고가져 오기API가 작동하는 이유를 이해하고 싶습니다.

다음은 AngularJS 코드입니다 :

const $http = angular.element(document.body).injector().get('$http')
$http({
  method: 'GET',
  url: 'http://192.168.1.126:8080/saiku/rest/saiku/admin/datasources/',
  headers: {
    'Authorization': 'Basic YWRtaW46YWRtaW4='
  }
})

이것은 나에게이 오류를 준다 :

와이즈 비즈

이상한 부분은 이것입니다 :

angular.js:12845 OPTIONShttp://192.168.1.126:8080/saiku/rest/saiku/admin/datasources/403 () Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8081' is therefore not allowed access. The response had HTTP status code 403.

정답을 알려주세요

이것은 CORS 오류 일 수 있음을 알고 있지만 Tomcat에 CORS 필터를 추가하여 모든 것이 작동하고 가져 오기가 가능합니다. 페치 또는 $http의 버그입니까?

fetch('http://192.168.1.126:8080/saiku/rest/saiku/admin/datasources/', { method: 'GET', headers: { 'Authorization': 'Basic YWRtaW46YWRtaW4=' } }).then((r) => r.json()).then(console.log)

  • 답변 # 1

    이 질문을 쓰는 동안 답을 찾았습니다 :

    AngularJS 앱에설정 파일이 설정되어 있습니다 :

    $httpProvider.defaults.headers.get['If-Modified-Since'] = '0';
    
    

    (다른 헤더와 함께)요청을 CORS 문서와 같이요청합니다: 와이즈 비즈

    페치 API가 설정되지 않았기 때문에 작동했습니다 (

    [...] Apart from the headers set automatically by the user agent (for example,Connection,User-Agent, or any of the other header with a name defined in the Fetch spec as a “forbidden header name”), the request includes any headers other than those which the Fetch spec defines as being a “CORS-safelisted request-header”, which are the following:

      Accept Accept-Language

      Content-Language

      Content-Type (but note the additional requirements below)

      Last-Event-ID

      DPR

      Save-Data

      Viewport-Width

      Width

    ) 헤더와 $http 서비스입니다.

    If-Modified-Since

관련 자료

  • 이전 css - Javascript로 svg 애니메이션을 트리거하는 방법은 무엇입니까? (Jquery 없음)
  • 다음 uitableview - UITableViewController에 일관되게 적용되지 않는 제약 조건