source

Ajax에서 302 리다이렉트를 처리할 수 없습니다.그 이유는 무엇입니까?

factcode 2023. 3. 5. 21:58
반응형

Ajax에서 302 리다이렉트를 처리할 수 없습니다.그 이유는 무엇입니까?

asp.net mvc에서 Forms Authentication을 사용하여 백엔드 서버를 작성했습니다.사용자가 인증되지 않은 경우 서버는 자동으로 로그인 액션으로 302 리다이렉트를 전송하고 로그인 페이지를 반환합니다.

클라이언트 측에는 아이템 리스트가 있습니다.이 목록은 인증된 사용자만 액세스할 수 있습니다.페이지에 Ajax (jQuery의 $.ajax 함수)를 사용하여 목록을 새로 고치는 버튼이 있습니다.

여기서 문제는 인증티켓이 타임아웃이 되어 사용자가 [Refresh]버튼을 클릭했을 때입니다.

  • 새로고침된 목록을 가져오기 위해 함수가 Ajax 요청을 보냅니다.
  • 서버는 인증 티켓이 유효하지 않음을 검출하고 302 리다이렉트를 발행합니다.
  • 브라우저는 자동으로 302 응답을 처리하여 로그인 액션에 다른 Ajax 요청을 전송하도록 내 Ajax 함수를 강제합니다.그리고 최종 결과는 상태가 200인 HTML입니다.리스트도 상태가 200인 HTML이기 때문에 스크립트가 혼란스럽습니다.

인증티켓이 타임아웃이 되어 사용자가 [Refresh]버튼을 클릭하면 이를 검출하여 사용자에게 로그인을 요구하는 메시지를 표시할 수 있습니다.

Login 액션에 커스텀헤더(IS_LOGIN)를 추가하고, 그것을 ajax 응답으로 체크하는 것으로 회피하려고 했습니다.하지만 그것은 좋은 해결책이 아니다.

그래서 질문하겠습니다.

  • 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
  • 브라우저는 왜 우리의 스크립트가 302 응답을 처리하지 못하게 합니까?다른 요청을 생성하도록 자동으로 강제합니다.브라우저 또는 jquery 라이브러리의 문제입니까?무슨 이유라도 있나요?(보안,...)

답장 감사합니다.

XHR일 때는 콜을 리다이렉트하지 말고401 Unauthorized콜백으로 처리해 주세요.ASP 몰라.NET 하지만 나는 Spring Security와 비슷한 일을 했다.

컨셉은 다음과 같습니다.

  • 인증된 상태를 가져옵니다.
  • 헤더를 확인합니다.X-Requested-With: XMLHttpRequest
  • 검출된 후 인증되지 않은 경우 다음과 같이 응답합니다.401 Unauthorized
  • 발견되지 않고 인증되지 않은 리다이렉트.

결론은 경우에 따라서는 XHR 콜을 다른 HTTP 요구와 다르게 처리해야 한다는 것입니다.동일한 리소스가 다른 위치에 있는 경우에만 XHR을 리디렉션해야 합니다.

질문에 답하기 위해

브라우저가 자동으로 리다이렉트를 처리하므로 XHR 콜백으로 리다이렉트를 처리할 수 없습니다.리다이렉트된 위치에서만 무엇을 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/15996779/cannot-handle-302-redirect-in-ajax-and-why

반응형