programing

JavaScript에서 302 FOUND 포착

muds 2023. 3. 7. 22:06
반응형

JavaScript에서 302 FOUND 포착

jQuery를 사용하여 서버에 AJAX POST 요청을 하면 상태가 302인 HTTP 응답을 반환할 수 있습니다.그러면 JavaScript는 이 URL로 GET 요청만 보내고 이 응답에서 사용자를 URL로 리디렉션합니다.이게 가능합니까?

주어진 이유로 승인된 답변이 작동하지 않습니다.302가 브라우저에 의해 투명하게 처리되는 문제를 해결하기 위해 해킹을 기술한 질문에 대한 링크와 함께 댓글을 달았습니다.

jQuery Ajax 호출 후 리다이렉트 요청을 관리하는 방법

하지만 좀 지저분한 해킹이라 더 나은 해결책인 JSON을 사용한다는 것을 알게 되었습니다.이 경우, Ajax 요구에 대한 모든 응답에 코드 200을 지정하고 응답 본문에 Ajax 응답 핸들러가 적절한 방법으로 사용할 수 있는 일종의 JSON 개체를 추가할 수 있습니다.

난 그렇게 생각 안 해.W3C에서는 302 등의 특정 상태 코드를 가진 HTTP 리다이렉트를 투과적으로 따라야 한다고 합니다.아래 인용:

응답이 HTTP 리다이렉트(상태 코드 301, 302, 303 또는 307)인 경우 보안 또는 무한 루프 주의사항을 위반하지 않는 한 투과적으로 따라야 합니다.기타 오류(401 포함)는 오브젝트가 해당 오류 페이지를 응답으로 사용해야 합니다.

실험으로 여러 브라우저(Firefox 3.5, Chrome, IE8, IE7, IE6)에서 302 상태 코드를 제공하는 서버에 Ajax 요청을 수행하여 브라우저 요청 오브젝트에 상태를 표시해 보았습니다.모든 경우에, 200으로 나타났습니다.

내 문제 이유는 다음과 같다.

페이지를 테스트하기 위해 localhost/Home/Test 주소를 사용하고 있었습니다.단, url 파라미터에 대해 127.0.0.1/Home/AjaxRequest를 사용하는Ajax 요청 코드입니다.URL이 다르면 이 오류가 발생합니다.

누군가에게 도움이 될지도 모른다:)

핸들 302에 Javascript 코드를 요청하는 것보다 302가 발생하면 커스텀 오류 코드+ 메시지가 포함된 500을 반환하는 것이 좋습니다.

function doAjaxCall() {
   $.ajaxSetup({complete: onRequestCompleted});
   $.get(yourUrl,yourData,yourCallback);
}

function onRequestCompleted(xhr,textStatus) {
   if (xhr.status == 302) {
      location.href = xhr.getResponseHeader("Location");
   }
}

언급URL : https://stackoverflow.com/questions/373087/catching-302-found-in-javascript

반응형