2010-12-13 5 views
3

가끔을 변경하는 큰 데이터 청크를로드하는 플래시 응용 프로그램이있어서 클라이언트 버전이 오래되어 있지 않으면 Last-Modified 헤더를 보내고 304 Not Modified을 사용하여 응답하도록 서버를 설정합니다.Flash의 적극적인 캐싱 해결

모든 브라우저에서 정상적으로 작동하지만 Flash는이를 무시하고 리소스를 적극적으로 캐시합니다. 심지어 서버에 요청을 보내지도 않습니다. 이전에 방문한 URL을 URLLoader.load하려고하면 디스크에서 캐시 된 파일을 검색합니다.

Google에서 발견 된 해결 방법은 유용하지 않습니다. URL 매개 변수를 변경할 때마다 캐시를 ​​영구 저장하거나 리소스를 다시 다운로드하십시오. 리소스가 업데이트 될 때 redownload, 그렇지 않으면 캐시를 사용합니다.

+1

방법의 로컬 SharedObject를 저장에 대한 버전 번호를 변경하는 경우에만 URL 매개 변수로 버전 번호 ... 그 때마다 플래시 플레이어로드를 다시 다운로드되지 않습니다이 방법을 사용할 수 있습니다 클라이언트 컴퓨터는 최신 다운로드를 추적합니다. 공유 객체가 없으면 사용자의 첫 번째 방문입니다. 거기에 있다면 공유 객체에 저장된 날짜를 서버의 Last-Modified 날짜와 비교하여 확인하십시오. 클라이언트에 이전 다운로드가있는 경우 업데이트하십시오. 그렇지 않은 경우 업데이트하십시오. 클라이언트가 다운로드해야하는 파일의 이름이 같거나 자동으로 캐시 된 경우 마지막 URL (예 : 'FileForDownload.zip?r='+new Date(). milliseconds 또는 Math.random)을 사용하여 이전 url 트릭을 사용하십시오.()) –

답변

4

당신은 당신이 실제로

+0

그래, 질문을 게시 후 초 깨달았다 :) – lzm

+1

+1 : 현재 타임 스탬프를 사용하여 URL을 고유하게 만들기 위해 매우 잘 작동하므로 캐싱을 방지 할 수 있습니다. – bedwyr

1

이 방법이 효과가 있는지는 잘 모르겠지만 시도해 볼 가치가 있습니다.

파일 요청에 캐시 차단기 코드를 추가 할 수 있습니다. 일반적으로 임의의 문자열을 파일 이름 끝에 첨부하여이 작업을 수행합니다. new URLRequest("bigFile.foo?uncache=273095285209750"). 당신을 위해 임의의 문자열을 사용하는 대신 날짜 객체를 사용하여 문자열을 생성 할 수 있습니다. 예를 들어 ...

이렇게하면 콘텐츠를 하루에 한 번 (또는 한 번 또는 자주 원하는 경우) 다시 캐시해야합니다. 더욱 세분화 된 제어가 필요하다면 짧은 서버 측 스크립트를 작성하여 파일이 수정되었는지 여부를 확인하고 거대한 다운로드를 요청하기 전에 확인할 수 있습니다.

도움이 되었기를 바랍니다.