2012-07-31 2 views
0

내 웹 앱은 Tomcat에서 실행되며 AJAX 요청을 매우 집중적으로 사용하며 개발 프로세스 중에는 웹 앱도 집중적으로 재배포해야합니다. 재배치 후 나는 보통 단순히 사용자 세션이 삭제됩니다 것을 알고 페이지를 새로 고침,하지만 난 항상 아래에 설명 된 시나리오에 도착 : 많은 JS-스크립트 일부 페이지로Tomcat에서 다시 시작되는 페이지를 새로 고친 후 URL 표시 줄에 AJAX GET 요청이 나타납니다.

  1. 이동, 정말 큰 페이지이 포함되어있어 실제로 집중적 인 AJAX 요청을합니다.
  2. Tomcat을 중지하거나 웹 응용 프로그램을 다시 배포하십시오.
  3. 페이지를 새로 고칩니다.
  4. 인증 할 로그인 양식에 자격 증명을 입력하십시오.
  5. 갑자기 브라우저 창에서 으로 끝나고 AJAX 요청 응답과 URL 표시 줄에서 AJAX 요청 URL을받습니다.

와우 ... 그것은 AJAX 요청 URL이 웹 페이지 표시 영역에 대한 반응과 함께 URL 표시 줄에 나타나는 나를 이상한 보인다. 이것은 Firefox와 Chrome에서 실제로 발생합니다 (다른 브라우저에서는 테스트하지 않았습니다). 불행히도, 처음부터 작성된 간단한 페이지에서 동일한 동작을 재현 할 수 없습니다. 솔직히 말하자면, 나는 그러한 요청에 어떤 일이 발생하는지 실제로 이해하지 못합니다. 사용자가 URL 막대에 AJAX 요청/응답을 입력하면 브라우저가 "생각"하는 이유는 무엇입니까?

이러한 이상한 동작에 대한 가능한 설명이나 힌트 매우 감사하고 있습니다. 감사!

(아마도 도움이 될 수 있습니다 모든 AJAX 요청이 jQuery를 1.4.2로 수행된다) 나는 또 다른 함정이 있었기 때문에 나중에 이해, 나는 매우 죄송

+0

Tomcat의 어떤 버전입니까? –

+0

@ChristopherSchultz, 그것은 Tomcat 6.0.x의 모든 버전에서 발생했으며 아마도 Tomcat 7에서 재현 가능할 것입니다. 이제 6.0.32에 있습니다. –

+0

이것은 FORM 기반 인증에 대한 사양 호환 동작 일 수 있습니다. ** 처음 ** AJAX 응답이 브라우저에 표시되고 마지막으로 표시되지는 않을 것으로 예상됩니다. –

답변

0

, 문제는, 완전하지 않습니다 아무도 원칙적으로 그 질문에 답할 수 없었습니다. 그 버그의 이유는 ... <body onunload="..."> 태그 정의. 이것은 예상치 못한 일이지만 코드가 사용자가 페이지를 떠날 때 호출되어야하는 AJAX 요청을 포함하고 있습니다. 나는 Location 헤더를 포함하는 응답 모듈 (FORM, j_security_check)을 반환한다는 것을 깨달았습니다. 이유가 인데, 브라우저가 리다이렉트 한 이유는 무엇입니까?

정확한 시나리오는 같았다 :

  • 열기 <body onunload="some_ajax_here">을 포함하는 페이지입니다.
  • 동일한 페이지에 머물 수 있도록 다른 탭을 사용하여 앱을 로그 아웃하십시오.
  • 페이지를 새로 고침 그래서 일부 아약스를 호출 할 수 있습니다 -이 AJAX 요청은 응용 프로그램 (당신은 로그인 페이지의 전달 된 콘텐츠를)의 보안 부분이기 때문에 지금은 허용 하지입니다.
  • 자격 증명을 입력하면 이제 브라우저 창에서 일부 ajax의 결과가 나타납니다.
빠른 수정으로

, 그리고 마지막 하나는, 내가 다음 다른 요청을 추가 희망 AJAX 요청 :

$.ajax({ 
    async: true, 
    method: "GET", 
    url: document.location.pathname + document.location.search 
}); 

따라서 HTML 페이지의 스크립트는 단순히 자기 페이지 요청 마지막 수 - j_security_check을 마지막으로 사용한 HTML 페이지를 참조하는 Location을 반환하며 리디렉션이 정상적으로 작동합니다. 아마 나의 설명이 명확하지 않고 실수로 가득차도 충분하지 않을 수도 있지만 일반적으로 그렇게 보입니다. 나는 다시 한 번 매우 유감스럽게 생각합니다. @ChristopherSchultz!

관련 문제