2017-02-22 4 views
0

파일이 로컬로 제공되는 경우에만 작동한다는 것을 알기 전까지는 HTML meta 태그를 사용하여 캐시를 사용하지 않도록 설정 했으므로 내 페이지 상단에 캐시를 사용하지 않도록 설정했습니다.페이지 캐시를 비활성화해도 캐시 된 리소스가 비활성화되지 않습니다?

header("Cache-Control: no-cache, no-store, must-revalidate"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 

답변을 찾을 수 없으며 요청하는 것이 어리석은 일이지만 리소스가 캐싱되지 않도록 설정하지 않았습니까? 내 개발자 도구를보고 네트워크 탭을보고 페이지가 항상 새로 고침 중이지만 CSS 및 Javascript와 같은 리소스가 여전히 캐시에서로드되어 페이지 캐시를 막는 것이 의미가 없다고 생각하게되었습니다. 페이지 리소스가 캐싱되는 것을 막아 주지만 실제로 사실인지는 알 수 없습니다. 그래서 내가 한 것은과 같이 자원에 어떤 버전을 추가했다 : 다음 좀 더가 추가 헤더가 사용될 수 있다는 것을 나타납니다 읽은 후 내가 원하는,하지만, 이는 캐시되는 자원을 중지

<link rel="stylesheet" href="css/style.css?version=1"> 

특정 파일 형식을 대상으로하고 캐싱도 중지 시키십시오. 다른 방법이지만 버전 관리와 동일한 결과를 얻을 수 있습니다.

이 점에 대한 제 의견이 맞습니까? 아니면 나쁜 방법을 혼합하고 있습니까?

+0

어쩌면 웹 서버 수준에서 캐싱 중입니까? IIS에서이 옵션을 사용하면 다른 사람도 거의 확실합니다. – Oscar

+2

(appach) : http://httpd.apache.org/docs/current/mod/mod_expires.html – nogad

답변

1

귀하의 의견과 이해가 정확합니다. 예를 들어, PHP에서 캐싱 헤더를 설정하면 해당 페이지에만 유효합니다. 보기의 브라우저의 관점에서 봐 :

  • 요청 페이지 - 지침에 응답이
  • 구문 분석이 페이지를받은 캐시받지 아니, 자원 (CSS, JS, IMG 등)
  • 의 URI를 얻을
  • 각 리소스에 대한 요청 보내기 - 응답 받기

이 마지막 응답에 브라우저에 캐시하지 말라고 알리는 헤더가없는 경우 표준 규칙에 따라 캐싱됩니다.

캐싱을 방지하는 데는 여러 가지 방법이 있습니다. 하나는 정확히 설명하는 것입니다. 즉, 끊임없이 변화하는 매개 변수를 요청 된 URI에 추가하십시오. 이렇게하면 요청할 때마다 다른 매개 변수로 요청됩니다. 여전히 캐시되지만 다음 요청은이 요청과 일치하지 않으며 캐시는 사용되지 않습니다.

또 다른 예로는 특정 유형의 자원 (파일 이름, 확장자, 컨텐츠 유형 등)이 캐시되지 않아야 함을 나타 내기 위해 웹 서버의 구성을 변경해야합니다. 예를 들어, 다음 아파치의 구성은 캐싱은 어떤 파일을 전혀 발생하지 않습니다 나타냅니다

  • 클라이언트가 응답을 얻을 수 있도록 :

    <Files *> 
        Header set Cache-Control: "private, pre-check=0, post-check=0, max-age=0" 
        Header set Expires: 0 
        Header set Pragma: no-cache 
    </Files> 
    

    캐싱의 개념은 두 가지입니다 점에 유의 함 적은 응답

를 제공 할 필요에 의해 자원

  • 서버의 부하 이하의 이전에 다운로드 한 로컬 복사본을 사용하여 빠른 것은 따라서 caref 수 않습니다 ul 캐싱을 끕니다. 처리해야하는 요청 수가 심각하게 과소 평가되는 경우 (극단적 인 경우) 서버가 종료 될 수 있습니다.

  • +0

    브라우저의 POV를 이용해 주셔서 감사합니다. 왜 캐시하지 않는 초기 명령어가 페이지의 다른 모든 것들로 넘어가 리라고 생각하는지 모르겠지만 지금은 이해합니다! – Slime

    +1

    이렇게해도 파일이 여전히 ISP와 같은 다양한 위치에 캐시 될 수 있습니다. – nogad

    +0

    @nogad correct. 일부 프록시는 캐싱 헤더를 무시하거나 제거 할 수 있습니다. –

    관련 문제