XHR 요청에 대한 응답으로 리디렉션 반환


답변:


216

브라우저가 ajax 요청에 대한 리디렉션 응답을 받으면 어떻게됩니까?

서버가 리디렉션 (일명 302 응답과 Location : 헤더)을 보내면 리디렉션 다음에 브라우저가 자동으로 나타납니다. 두 번째 요청에 대한 응답 (다른 리디렉션이 아니라고 가정)은 프로그램에 노출 된 것입니다.

실제로 302 응답이 발생했는지 여부를 감지 할 수 없습니다. 302 리디렉션이 200으로 연결되면 프로그램은 원래 요청이 200으로 직접 연결된 것처럼 동일하게 작동합니다.

이것은 나의 경험이자 스펙에 명시된 행동 이었다.

2016 업데이트 : 시간이 지났으며 좋은 소식은 새로운 fetch () API 가 XHR과 비슷한 기본 동작으로 리디렉션이 처리되는 방식을보다 세밀하게 제어 할 수 있도록 지정 되었다는 것입니다 . 즉, fetch ()가 기본적으로 구현되는 곳에서만 작동합니다 . XHR을 기반으로하는 fetch ()의 폴리 필 버전 에는 XHR의 한계가 계속 있습니다 . 다행히도 기본 브라우저 지원 은 훌륭하게 마무리됩니다.


47
흥미롭게도 리디렉션이 따르지 않는 상황이 발생하여 리디렉션에 도달했습니다. 리디렉션이 동일한 원본 정책을 위반하면 발생합니다.
거스

4
아마도 논리적 인 @Gus
Dmitry

1
401 (또는 4xx 또는 5xx 오류)로 리디렉션하는 경우 요청이 401로 직접 연결된 것처럼 프로그램이 작동한다고 가정합니다.
greim

2
RESTful API는 POST 요청 후 201과 Location 헤더를 전송할 수 있습니다. restapitutorial.com/lessons/httpmethods.html을 참조하십시오 .

1
2019 업데이트 : 우리는 3 년 전 기대했던대로 작동하지 않습니다 가져 오기) :
lcjury

7

ajax-request그 리디렉션 AFAIK을 따릅니다. 실제 콘텐츠 ( .responseText, .responseXML)는 리디렉션 된 페이지의 콘텐츠입니다.

2 또는 3 에서 리디렉션 ( status-code, location-header) 을 가로 챌 수 readyState있지만 확실하지는 않습니다.


아니, 그 모든 상태는 정확히 같은 상태를 유지합니다. 값조차도 getAllResponseHeaders()같습니다.
sebastianwagner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.