2010-02-26 4 views
0

임베디드 시스템에서 맞춤 웹 서버를 사용할 때 캐싱을위한 HTTP 헤더를 올바르게 설정하는 데 문제가 있습니다.맞춤 웹 서버 캐싱

우리의 웹 서버는 XML과 같은 모든 동적 콘텐츠를 생성하는 우리는 반 정적 인 이미지와 함께 좋은 측정을 위해 던진 몇 가지 동적 JSON 요청으로 표시 할 반 정적 XSL 파일을 사용하고 있습니다. XSL 및 이미지 파일을 변경할 수있는 펌웨어 업데이트가 필요할 때 문제가 발생하기 때문에 "반 정적"이라고 말합니다.

다음을 수행해야합니다. XSL 및 이미지 파일을 캐시하고 XML 및 JSON 응답을 캐싱하지 않습니다. 나는 HTTP 응답을 완전히 제어 할 수없는 현재입니다 :

  1. Etag입니다
  2. 설정 캐시 제어를 생성하기 위해 수정 시간 및 크기를 사용하여 XSL 및 이미지 파일과 ETag를 사용 :에는 캐시를 XML 및 JSON 응답

내가 말한 것처럼 XSL 및 이미지 파일이 캐시 때때로을 때, 모든 펌웨어 업데이트 될 때까지 멋쟁이 작동합니다. 필자는 Firefox와 Safari의 최신 버전에서 제대로 작동하는 것을 보았지만 IE에는 몇 가지 문제가있었습니다.

이 문제에 대한 한 가지 해결책은 각 버전 (예 : logo-v1.1.png, logo-v1.2.png) 다음에 XSL 및 이미지 파일의 이름을 바꾸고 Expires 헤더를 날짜로 설정하는 것입니다. 미래에는 XSL 파일을 사용하기가 어려울 것이며이를 피하고 싶습니다.

참고 :이 장치의 시계이지만를 설정할 필요하고 ETag를 사용시 내 캐싱 문제의 원인이 될 수있는 것입니다있는 100 % 신뢰할 수 없습니다.

내가 사용해야하는 가장 좋은 방법은 무엇입니까? 가능한 한 많은 웹 서버 요청을 피하고 싶지만 소프트웨어 업데이트 후에 오래된 XSL 및 이미지 파일을 무효로하는 것이 # 1 우선 순위입니다.

답변

0

동일한 프로젝트를 진행하고 있습니까? 나는 이것을 처리 할 수있는 최선의 방법을 찾아내는 많은 막 다른 길을 갔다.

my .html과 .shtml 파일 (동적 JSON 데이터)이 만료되도록 설정했습니다. ("Cache-Control : no-cache \ r \ nExpires : -1 \ r \ n") 그 외 모든 것은 10 년 후에 만료되도록 설정됩니다. ("Cache-Control : max-age = 290304000 \ r \ n")

내 메이크 파일은 모든 .html 파일에 대해 perl 스크립트를 실행하고 "반 정적"콘텐츠 (이미지, 자바 스크립트, CSS .) 그런 다음 스크립트는 해당 파일의 MD5 체크섬을 실행하고 파일에 체크섬을 추가 : 물음표 후

<script type="text/Javascript" src="js/all.js?7f26be24ed2d05e7d0b844351e3a49b1"> 

모두가 무시되지만 따옴표 사이에있는 모든 일치하지 않는 한 브라우저를 캐시하지 않습니다.

나는 all.js와 all.css를 사용하는데, 그 이유는 모든 것이 동일한 스크립트를 사용하여 결합되고 축소 되었기 때문입니다.

호기심에서 벗어나서 사용하는 내장 웹 서버는 무엇입니까?

0

시도 Cache-Control: no-store. no-cache은 클라이언트에게 응답 이 캐시 될 수 있음을 알립니다. 캐시가 원본 서버에 접속할 수 없다면 일반적으로 재사용되지 않습니다.

BTW, ETag 만 설정해도 응답을 캐시 할 수 없습니다. Cache-Control: max-age=nnn도 설정해야합니다.

귀하의 응답이 어떻게 처리되는지 확인할 수 있습니다. http://redbot.org/