2014-11-17 3 views
0

Google은 페이지 해시 변경을 통해 상태 변경을 처리하는 웹 애플리케이션 (예 : example.com/#/page1)을 개발 중입니다.Chrome : 해시 변경 사전 렌더링 사용 안함

최근에 프리 페치 옵션을 사용하면 Google 크롬 문제가 발생합니다 ('페이지로드 성능 개선을위한 네트워크 작업 예측'). 여러 경로 중에서 로그 아웃을 수행하는 #/logout이 있습니다.
"정상"상태 인 경우 페이지 example.com/#/ (기본 페이지)에 있습니다. 그 다음에 "l"을 입력하면 (example.com/#/l) 크롬 자동 완성은 logout으로 자동 완성됩니다. 그러나 자동 완성 기능뿐 아니라 "haschange"이벤트도 호출하므로 클라이언트가 서버에 로그 아웃 요청을 보내고 있습니다 ... 심지어 l을 입력하여도!

이 동작은 예상치 못한 일일뿐만 아니라 위험합니다. 설정 페이지 (기본적으로 사용 설정 됨)에서 '페이지로드 성능 개선을위한 네트워크 작업 예측'을 선택 취소하는 것 외에 Chrome에서이를 방지 할 수있는 방법이 있습니까?

편집

작은 새 "발견". 사실, Chrome은 이벤트 처리기에서 console.log가 실행되고 있지 않기 때문에 "hashchange"이벤트를 발생시키지 않습니다. Chrome은 #/logout 페이지를 방문하면 서버 (GET /auth/destroy)에 대한 요청이 호출되므로 해당 요청을 단독으로 실행한다고 알았습니다. 우리가 이것을 막기 위해 무엇을 할 수 있습니까?

+0

왜 아직도 해시 변경 이벤트를 사용하고 있습니까? 아직도 구 버전의 IE를 지원하고 있습니까? – epascarello

+0

@epascarello IE 지원 때문이 아니라 질문의 범위를 벗어나는 다른 이유 때문입니다. GMail 자체는 결국 해시 변경 이벤트를 사용합니다. – Qualcuno

+0

HTTPS를 사용하도록 설정하면 프리 패치가 사용 중지됩니다 (https://developers.google.com/chrome/whitepapers/prerender ). 그러나 다른 방법이 있는지 알면 좋습니다. – Qualcuno

답변

0

내 질문에 답하십시오. 이것은 실제로 해결책이 아니라 오히려 해결 방법입니다.

this documentation에 따르면, 특정 상황에서 POST 요청 (우리의 경우 옵션이 아님)과 자원이 HTTPS를 통해 제공되는 경우 사전 결합이 비활성화됩니다.
프로덕션 환경에서 이미 HTTPS를 사용하도록 설정 했으므로 개발 단계에서 HTTPS를 사용하도록 설정 했으므로 문제가 사라졌습니다. 그러나 나는 여전히 이것이 실제 솔루션보다 더 많은 해결 방법이라고 생각합니다.

+0

지금 프리렌더 상태에서도 POST 요청이 실행되고있는 것 같습니다. 나는 어떤 소스도 가지고 있지 않지만 나의 인증 시스템은'''document.visibilityState === "prerender"'''중에 POST 요청을 통해 나의 토큰을 새로 고칠 수있다. (Chrome 46.0.2490.80 m 사용) – gligoran