Xmlhttp 요청 리디렉션 방지
XMLHttpRequest-s를 송신할 때 브라우저가 리다이렉트를 따르지 않도록 할 수 있습니까(즉, 리다이렉트 상태 코드를 되돌려 직접 처리).
XMLHttpRequest 객체의 W3C 표준에 준거하지 않습니다(강조 추가).
응답이 HTTP 리다이렉트일 경우:
Location 헤더에 의해 전송되는 URL 의 송신원이 XMLHttpRequest 의 송신원과 동일하고, 리다이렉트가 무한 루프 주의사항을 위반하지 않는 경우는, 같은 발신기지 요구이벤트 규칙을 준수하면서 리다이렉트를 투과적으로 따릅니다.
그들은 향후 출시를 위해 그것을 고려하고 있었다.
이 사양에는, 이 사양의 향후 버전에서 고려되고 있는 다음의 기능은 포함되어 있지 않습니다.
- 다음 리디렉션을 사용하지 않도록 설정하는 속성
그러나 최신 사양에서는 이에 대해 더 이상 언급하지 않습니다.
새로운 Fetch 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을 찾을 수 있습니다.
아니요. 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
'programing' 카테고리의 다른 글
주문 에이잭스에 수수료를 추가하는 woocommerce 커스텀 체크아웃 필드 (0) | 2023.03.10 |
---|---|
구성 요소 속성이 현재 날짜/시간에 따라 달라지는 경우 Angular2 "체크된 후 식이 변경되었습니다" 예외를 관리하는 방법 (0) | 2023.03.10 |
온라인/오프라인 상태 변화 감지 방법 (0) | 2023.03.10 |
뷰 계층에 연결되지 않은 경우 WKWebKit javascript 실행 (0) | 2023.03.10 |
ESLint는 Create React App에 어떻게 통합됩니까? (0) | 2023.03.10 |