programing

Xmlhttp 요청 리디렉션 방지

lovejava 2023. 3. 10. 20:58

Xmlhttp 요청 리디렉션 방지

XMLHttpRequest-s를 송신할 때 브라우저가 리다이렉트를 따르지 않도록 할 수 있습니까(즉, 리다이렉트 상태 코드를 되돌려 직접 처리).

XMLHttpRequest 객체의 W3C 표준에 준거하지 않습니다(강조 추가).

응답이 HTTP 리다이렉트일 경우:

Location 헤더에 의해 전송되는 URL 의 송신원이 XMLHttpRequest 의 송신원과 동일하고, 리다이렉트가 무한 루프 주의사항을 위반하지 않는 경우는, 같은 발신기지 요구이벤트 규칙을 준수하면서 리다이렉트를 투과적으로 따릅니다.

그들은 향후 출시를 위해 그것을 고려하고 있었다.

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

  • 다음 리디렉션을 사용하지 않도록 설정하는 속성

그러나 최신 사양에서는 에 대해 더 이상 언급하지 않습니다.

새로운 Fetch API는 다양한 리다이렉트 처리 모드를 지원합니다.follow,error , , , , 입니다.manual 리다이렉션이 취소되었을 때 새로운 URL이나 상태 코드를 표시하는 방법을 찾을 수 없습니다.리다이렉트 자체를 정지하면, 에러(빈 응답)로 표시됩니다.그것만 있으면 가도 돼. 또한 이 API를 통한 요청은 취소할 수 없습니다. 아직입니다. 그들은 지금이다.

는 XMLHttpRequest를 할 수 .HEADURL 입니다.

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

상태 코드는 표시되지 않지만 페이지 전체를 다운로드하지 않고 새 URL을 찾을 수 있습니다.

아니요. XMLHttpRequest에 의해 공개되는 API에는 기본 동작인 301 또는 302를 자동으로 덮어쓸 수 있는 장소가 없습니다.

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

하시면 됩니다.responseURL속성을 사용하여 리디렉션 수신처를 가져오거나 최종적으로 수락한 위치에서 응답을 가져왔는지 여부를 확인합니다.
이것은 물론 결과를 가져오는 것을 의미하지만 적어도 리다이렉트 대상에 대한 필요한 정보를 얻을 수 있습니다.예를 들어 응답을 폐기하는 조건을 검출할 수 있습니다.

사용자의 답변을 확장하여abort()리다이렉트 URL만 있으면 서버가 너무 많은 데이터를 보내는 것을 막을 수 있는 것 같습니다.

var url = 'the url'
var http = new XMLHttpRequest();
http.open('GET', url);
http.onreadystatechange = function() {
    if (this.readyState === this.DONE) {
        console.log(this.responseURL)
        this.abort() // This seems to stop the response
    }
}
http.send()

실제로 나는 위의 코드를 약속으로 포장했지만, 그것은 코드를 읽기 어렵게 만들었다.

또한 리다이렉트 URL을 취득하는 것이 왜 이렇게 어려운지 이해할 수 없지만, 그것은 다른 시간과 장소에 대한 질문입니다.

클라이언트 측에서는 다른 코멘트에서 응답한 대로 리다이렉트 또는 302 상태를 처리할 수 없습니다.그러나 리디렉션은 방지할 수 있습니다.그러기 위해서는 "XMLHttpRequest" xhttp를 사용하여 요청 헤더를 "X-Requested-With"로 설정합니다.setRequest(setRequest(설정요구)헤더("X-Requested-With", "XMLHttpRequest");이 작업은 개봉 후 전송 전에 수행해야 합니다.다음 예

let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
   if (this.readyState == 4 && this.status == 200) {
         reqObj.success(JSON.parse(this.responseText))
   } else if (this.status != 200) {
         reqObj.error(this.statusText)
   }
};
xhttp.open(reqObj.type, reqObj.url, reqObj.async);
xhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest");
xhttp.send();

언급URL : https://stackoverflow.com/questions/228225/prevent-redirection-of-xmlhttprequest