태그 보관물: ajax

ajax

Xmlhttprequest 리디렉션 방지 브라우저가 리디렉션을 따르지 않도록 할 수

XMLHttpRequest-s를 보낼 때 브라우저가 리디렉션을 따르지 않도록 할 수 있습니까 (즉, 리디렉션 상태 코드를 다시 가져 와서 직접 처리)?



답변

XMLHttpRequest 객체에 대한 W3C 표준을 따르지 않음 (강조 추가됨) :

응답이 HTTP 리디렉션 인 경우 :

Location 헤더가 전달하는 URL의 출처가 XMLHttpRequest 출처와 동일한 출처이고 리디렉션이 무한 루프 예방 조치를 위반하지 않는 경우 동일 출처 요청 이벤트 규칙을 준수하면서 리디렉션투명하게 따르십시오 .

그들은 향후 릴리스를 고려 하고 있었습니다 .

이 사양에는이 사양의 향후 버전에서 고려중인 다음 기능이 포함되어 있지 않습니다.

  • 다음 리디렉션을 비활성화하는 속성;

그러나 최신 사양은 더 이상 이것을 언급하지 않습니다.


답변

새로운 API의 가져 오기 지원을 리디렉션 처리의 다양한 모드를 : follow, error,와 manual,하지만 난 재 지정이 취소 된 경우 새 URL 또는 상태 코드를 볼 수있는 방법을 찾을 수 없습니다. 리디렉션 자체를 중지하면 오류 (빈 응답)처럼 보입니다. 그게 전부라면 갈 수 있습니다. 또한이 API를 통해 이루어진 요청은 아직 취소 할 수 없습니다 . 그들은 있는 지금.

XMLHttpRequest의 HEAD경우 서버에서 URL이 변경되었는지 여부를 검사 할 수 있습니다 .

var http = new XMLHttpRequest();
http.open('HEAD', '/the/url');
http.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        console.log(this.responseURL);
    }
};
http.send();

상태 코드는받지 못하지만 전체 페이지를 다운로드하지 않고 새 URL을 찾습니다.


답변

responseURL속성을 사용 하여 리디렉션 대상을 가져 오거나 수락 한 위치에서 응답을 궁극적으로 가져 왔는지 확인할 수 있습니다.

이것은 물론 결과를 가져 오는 것을 의미하지만 최소한 리디렉션 대상에 대한 필요한 정보를 얻을 수 있으며 예를 들어 응답을 삭제하려는 조건을 감지 할 수 있습니다.


답변

XMLHttpRequest에 의해 노출 된 API에는 301 또는 302를 자동으로 따르는 기본 동작을 재정의 할 수있는 위치가 없습니다.

클라이언트가 Windows에서 IE를 실행하는 경우 대신 WinHTTP를 사용하여 해당 동작을 방지하는 옵션을 설정할 수 있지만 이는 매우 제한적인 솔루션입니다.


답변