2012-08-30 2 views
4

나는 이것에 대한 많은 연구를 해왔고 많은 사람들에게 도움을 요청했지만 여전히 성공을 거두지 못했습니다. 여기에 세부 사항이 있습니다 ...no-cache 헤더를 보낸 후에도 페이지가 여전히 캐싱되는 이유는 무엇입니까?

저는 다양한 데이터 파일의 데이터를 가져 와서 임시 .csv 파일로 결합한 웹 사이트를 개발 한 후 유명한 그래프 라이브러리 dygraphs를 사용하여 그래프로 작성했습니다. 웹 사이트의 대부분은 PHP로 작성되었습니다. 그래프로 표시되는 데이터를 결정하는 매개 변수는 사용자 세션에 저장되고 .csv는 사용자 세션의 이름을 따서 지정되며 다운로드 할 수 있으며 .csv 파일은 dygraphs 개체에 전달되는 스크립트로 작성됩니다. 그리고 우리는 노 캐시 헤더를 보내도 함께 발견했습니다

header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 

많은 사용자 경험을 세션의 중간에, (충분히 다른 그래프가 생성되는 경우)의 이전, 정적 렌더링을 표시하는 페이지 페이지 (이전 세션에서 그래프로 표시 한 데이터)를 마치 새로운 요청을받는 대신 캐시되고로드 된 것처럼 처리합니다. 그래도 문제는 더 이상 발생하지 않습니다.

Firefox와 Chrome에서 개발자 도구를 사용하여 확인했는데 두 브라우저 모두 no-cache 헤더를 정상적으로 수신합니다. 페이지 소스를 볼 때 문제가 발생하더라도 소스는 올바른 컨텐츠입니다 (테이블/범례는 PHP를 사용하여 동적으로 생성되고 소스는 올바른 테이블을 나타내지 만 렌더링되는 것은 이전 컨텐츠입니다). 그래프가 표시 될 때까지 페이지가 올바르게 렌더링되기 시작한 다음 이전 내용이 표시됩니다. 캐시 된 그래프는 동일한 동적 기능 (롤오버 데이터 포인트 표시, 줌 및 팬 등)을 갖지 않습니다. 그리고 올바른 페이지가 그 아래 어딘가에 있었던 것처럼 보입니다 (csv 파일의 다운로드 버튼은 테이블의 크기에 따라 이동합니다. 오래된. 정적 페이지는 다운로드 .csv 버튼을 클릭해도 아무런 변화가 없지만 그 페이지 아래에서 페이지를 찾을 수 있으면 클릭 할 수 있습니다. 여전히 .csv 파일을 다운로드하십시오 .csv 파일의 데이터는 정확합니다.)

지금까지 개발 한 것 중에 가장 이상한 것 중 하나입니다. 다른 관련 사실은 내가 Chrome을 사용하는 동안 개인적으로 경험 한 모든 문제가 발생했다는 것입니다. 이러한 증상 중 일부는 Firefox 사용자에 의해보고되었습니다. IE 사용자는 동일한 문제가 있습니다 (IE 사용자는 크롬 프레임을 사용해야합니다).

나는 현 시점에서 끝내고있다. 우리는 PHP 헤더를 보냈습니다. 우리는 IIS의 캐시 프로필을 "DisableCache"(또는 무엇이든)로 설정하려고했습니다. 결과 페이지에 임의의 쿼리 문자열을 보내려고했습니다. 우리는 모든 적절한 메타 태그를 시도했습니다 - 모두 성공하지 못했습니다.

답변

0

서버가 URL 매개 변수를 무시하면 "url.csv"대신 "url.csv? (random number)"를 가져 와서 브라우저 캐싱을 무시할 수 있습니다.

+0

고마워요, 이것이 효과가있는 것 같습니다. – clementine

0

"Last-Modified"및 "ETag"를 사용해 보셨습니까? 그 그래프에 대한 HTTP 헤더 만 봅니다.

+0

죄송합니다. 저는 HTTP에 익숙하지 않고 여전히 익숙하지 않습니다. 즉, 타임 스탬프가 포함 된 고유 한 Etag를 매번 보내면 그래프 페이지가로드되어 브라우저가 캐시 된 페이지를 사용하지 않도록 보장 할 수 있습니까? – clementine

+0

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 여기에 HTTP 헤더 필드 정의에 대한 세부 정보가 있습니다. url 뒤에 임의의 arg를 추가하면 아마 괜찮을 것이다. @ danvk는 말했다. – meadlai