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
'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 |