내 애플리케이션에서 사용자는 사이트의 CSS를 수정할 수 있습니다.출력 캐싱이 동적으로 생성됨 CSS
이렇게 자주 변경하지는 않지만 그럴 경우 해당 방문자와 사이트 방문자가 즉시 결과를 볼 수 있도록해야합니다.
사용자가 CSS를 업데이트 한 날짜와 시간을 기록하여 URL에 타임 스탬프를 추가하기 만하면됩니다.
그러나 변경된 경우 브라우저가 프로그래밍 방식으로 CSS 헤더를 다시 요청하도록 캐시 헤더를 설정할 수 있는지 알고 싶습니다.
내 애플리케이션에서 사용자는 사이트의 CSS를 수정할 수 있습니다.출력 캐싱이 동적으로 생성됨 CSS
이렇게 자주 변경하지는 않지만 그럴 경우 해당 방문자와 사이트 방문자가 즉시 결과를 볼 수 있도록해야합니다.
사용자가 CSS를 업데이트 한 날짜와 시간을 기록하여 URL에 타임 스탬프를 추가하기 만하면됩니다.
그러나 변경된 경우 브라우저가 프로그래밍 방식으로 CSS 헤더를 다시 요청하도록 캐시 헤더를 설정할 수 있는지 알고 싶습니다.
당신이 당신의 URL에 해시를 포함하는 경우, 즉
http://server.example.com/styles/css.css?hash
가 다시로드받을 때 브라우저가 새 URL에서 그것을 가져 오기 때문에 해시 변경 :
버전 1 :
<style type="text/css" link="styles/css.css?hash=v1" />
버전 2 :
<style type="text/css" link="styles/css.css?hash=v2" />
클라이언트 캐싱은 클라이언트 문제입니다. 새로운 URL은 resource가 변경되었음을 의미하므로 다시로드해야합니다. 캐시 제어 헤더를 사용하여 동일한 URL을 유지하면 다양한 클라이언트 구현으로 인해 많은 어려움이 발생할 수 있습니다.
당신이 캐시 제어 헤더 (마지막으로 수정 된 만료, ETAG)를 두는 경우에, 당신은 당신이 변경 될 때 새로 얻을 것이다 CSS 확신 할 수 없습니다 공격적인 브라우저 (또는 프록시) 캐싱을 무시할 수
URL 해시가있는 최악의 시나리오는 클라이언트가 캐시에 캐시를 넣지 않지만 항상 최신 버전을 얻으므로 사용자 환경이 변경되지 않는다는 것입니다. 유효 기간 또는 마지막으로 수정 한 날짜와
가, 최악의 경우 클라이언트가 이전 버전을 얻을 수 있다는 것입니다, 이것은 내가 출력 캐싱의 조합을 사용하고 마티유의 응답에 대한 사용자 경험 :
감사를 변경하고 캐시 무효화를 처리하는 버전 번호.
출력 캐시 프로필 :
내가 타임 스탬프를 추가하기위한 다음과 같은 확장 방법을 만들어 :
public static string AppendTimeStamp(this string src, DateTime lastModified)
{
if (string.IsNullOrEmpty(src))
return src;
return string.Format("{0}?v={1}", src, lastModified.ToString("yyyyMMddHHmmss"));
}
사용법 : 당신이 돈의 경우
<link rel="stylesheet" href="@Url.Content("~/assets/usercss").AppendTimeStamp(CustomizationSettings.LastModified)"/>
' 당신은 단지 DateTime.UtcNow
을 전달할 수있는 파일을 캐시하고 싶지 않습니다. 마지막으로 수정 한 날짜.
제 질문을 다시 읽어주십시오. URL에 뭔가를 추가 할 수 있지만 캐시 헤더를 설정하여이를 수행하는 방법을 알고 싶습니다. –
이것은 동일하지 않습니다. 캐시 헤더는 응답의 일부입니다. url이 요청을 시작합니다. – mathieu
업데이트 된 답변에 감사드립니다. 클라이언트가 캐시를 마지막으로 수정 한 날짜를 존중하지 않습니까? –