0

내가 HTTP 캐싱에 새로운 해요 정말 도움이 필요가 ...HTTP 캐시 - 제어

  1. 나는 서버에 XHR을 보낼 때 많은 사람들이 "Cache-Control" 헤더를 설정했다. 그 목적은 무엇입니까? 요청 헤더에도 캐싱이 필요합니까?

  2. XHR : Cache-Control max-age=30, must-revalidate에 대해이 헤더를 설정했지만 Firefox 3.6.13은 30 초 후에 새로 고침 (강제 새로 고침) 할 때 파일의 유효성을 다시 확인하지 못합니다. 서버의 액세스 로그도 없습니다. 아파치의 파일에 만료 헤더를 설정하지 않았기 때문입니까?

    방화범 로그에서

    :

    응답 헤더
    날짜 2011년 (토) 1월 22일 그리니치 표준시 09시 59분 21초
    마지막으로 수정 그리니치 표준시 09시 05분 11초
    2011 1 월, 2 (목) ETAG "3e000000023ca7-20d-49a436e5b3413"

    요청 헤더
    연결 유지 (115)
    연결 유지 (keep-alive)
    콘텐츠 유형 응용 프로그램/XML
    캐시 제어 최대 - 나이 = 30,

    파일은 수정 된-재 검증해야하지만, 파이어 폭스도 조건부 GET하지 않습니다. Response DateLast-Modified 전혀 업데이트되지 않습니다.

답변

1

서버는 클라이언트가 아닌 다시 유효성 검사 지정 문을 설정해야합니다.

소스가 컨텐트를 어떻게 처리해야하는지 또는 캐싱하지 않을지 여부를 제어하는 ​​경우 클라이언트는이를 존중할지 여부를 결정합니다.

must-revalidate는 헤드 요청이 전송된다는 것을 의미하며, etag differes 인 경우 리소스가 새로 고쳐집니다. 이는 대용량 파일의 경우 매우 일반적이며, 내용이 변경되면 일반적으로 e- 태그가 변경되기 때문에 매우 일반적입니다.

작은 파일의 경우 그러나 어떤 요청도하지 않으려는 욕망이 있지만 짧은 시간이 걸릴 수 있습니다. must-revalidate가 잘못되었습니다. 서버로드 및 7kb 이미지에 대한 헤드 요청의 소비 시간은 전체 이미지를 제공하는 것보다 훨씬 적습니다.

1

클라이언트도 캐시 제어 지시문을 보낼 수 있습니다. 참조 : http://tools.ietf.org/html/draft-ietf-httpbis-p6-cache-12#section-3.2

불행히도 브라우저는 XHR에서 설정할 때 (아직) 존중하지 않지만 중간에 프록시 캐시가있는 것이 일반적입니다.

+0

예 클라이언트도 Cache-Control 지시어를 보낼 수 있지만 해당 IETF 문서 (및 Mozilla의 설명서)에 따라 re-revalidate는 클라이언트가 설정할 수있는 지시문 중 하나가 아니므로 "서버는 다음을 수행해야합니다. 클라이언트가 아닌 re-validate 지시문을 설정하십시오. " 그러나 그들은 또한 최대 연령이 클라이언트에 의해 설정 될 수 있다고 말하면 유용 할 것이라는데 동의합니다. 나는 어떤 브라우저 버전이 클라이언트 측에서 그들을 존중하지 않는지 잘 모르겠다. 서버의 모든 것을 최상으로 설정하십시오.Chrome 353에서 수정 된 Chromium 문제 333804 : Android 4.4 앱의 WebView 구성 요소에도 여전히 영향을 미칩니다. –

관련 문제