2014-12-26 1 views
4

AngularJS 애플리케이션에서 저는 서버 URL에 $ http.post 호출을합니다. 이 URL의 성공 응답은 30x 리디렉션입니다. 문제는 $ http.post가이 리디렉션을 엄격하게 따르고 최종 호출의 결과를 success 콜백에 반환한다는 것입니다. 이 리디렉션을 가로 채고 사용자 (브라우저 URL 변경)를 최종 페이지로 수동으로 리디렉션하고 싶습니다. 그것은 가능한가?

+0

사실이 아닙니다. $ http.post 호출의 결과는 최종 목적지의 결과입니다. – Marco

답변

6

docs에 따라 $http 서비스는 브라우저의 XMLHttpRequest 객체 또는 JSONP를 통해 원격 HTTP 서버와의 통신을 용이하게하는 핵심 서비스입니다.

XMLHttpRequest의 사양을 알고 있으면 리디렉션을 가로채는 것이 불가능할 수도 있습니다. 응답이 네트워크 301, 302, 303, 307, 또는

리디렉션 위반하면 308 무한 루프 예방책의 HTTP 상태 코드가 있으면

W3C spec for XMLHttpRequest

말한다 오류.

그렇지 않으면, 다음 단계를 실행합니다

Location 헤더에 의해 전달되는 URL에 대한 요청의 URL을 설정합니다.

요청 원 URL과 요청 URL의 출처가 동일한 경우 같은 출처 요청 이벤트 규칙을 준수하면서 리디렉션을 투명하게 따르십시오.

그렇지 않으면 교차 출처 요청 단계를 따르고이 알고리즘의 단계를 종료하십시오.

HTTP 리디렉션 동안 요청 방법과 요청 엔터티 본문의 보존 에 대한 사용자 에이전트에 대한 요구 사항을 배치하고, 또한 최종 사용자가 자동 ​​ 리디렉션 특정 종류의 통보해야합니다. 각도가 그것에 대해 아무것도 할 수 있기 전에

그래서 리디렉션 긴 발생하고 중지 할 수 없습니다.

또 다른 옵션은 $http을 자신의 서버로 호출 한 다음 리디렉션을 따르지 않도록 설정할 수있는 cURL 서버 측 (서버 측 사용 언어에 따라 다름)을 사용하여 리소스를 얻는 것입니다.

관련 문제