http - 설정 - Cache-Control:max-age=0과 no-cache의 차이점은 무엇입니까?



s max age (6)

Cache-Control: max-age=0 헤더는 즉시 내용이 부실하다고 간주되므로 (다시 페치해야 함) Cache-Control: no-cache 와 동일한 의미입니다.

https://src-bin.com


Answer #1

IE8과 Firefox 3.5의 최근 테스트에서이 둘 모두 RFC를 준수하는 것으로 보입니다. 그러나 원본 서버와의 "친숙 함"이 다릅니다. IE8은 no-cache 응답을 max-age=0,must-revalidate 와 동일한 의미로 처리 max-age=0,must-revalidate . 그러나 파이어 폭스 3.5는 no-cacheno-store 와 동등한 것으로 취급하는 것으로 보인다. no-store 는 성능과 대역폭 사용을 망쳐 놓는다.

오징어 캐시는 기본적으로 Firefox처럼 no-cache 헤더를 사용하여 저장 no-cache .

모든 조언에 대해 신선도를 확인하고 싶지만 캐싱의 성능 및 대역폭 이점을 허용하려는 민감하지 않은 리소스에 대해서는 public,max-age=0 으로 설정하는 것이 좋습니다. 같은 고려 사항을 가진 사용자 별 항목의 경우 private,max-age=0 .

나는 no-cache 의 사용을 완전히 피할 것입니다. 일부 브라우저와 인기있는 캐시에서는 기능이 no-store 의해 손상된 것처럼 보입니다.

또한 Akamai 및 Limelight를 모방하지 마십시오. 근본적으로 대규모 캐싱 어레이를 기본 비즈니스로 운영하고 전문가가되어야하지만 실제로는 네트워크에서 더 많은 데이터를 다운로드하도록하는 데에는 큰 관심이 있습니다. Google은 에뮬레이션에도 적합하지 않을 수 있습니다. 리소스에 따라 max-age=0 또는 no-cache 무작위로 사용하는 것으로 보입니다.


Answer #2

그런데 일부 모바일 장치, 특히 iPhone / iPad와 같은 Apple 제품은 no-cache, no-store, Expires : 0 또는 다른 용도로 사용하지 않으려 고 시도 할 수도있는 헤더를 무시합니다. 양식 페이지.

이것은 우리가 두통을 끝내지 못하게 만들었습니다. 사용자의 iPad 문제를 해결하기 위해 폼 프로세스를 통해 도달 한 페이지에 잠드는 것입니다. 3 단계 중 2 단계라고 말하면 장치는 완전히 저장소 / 캐시 지시문을 사용하고 내가 알 수있는 한, 마지막 상태에서 페이지의 가상 스냅 샷을 가져옵니다. 즉, 명시 적으로 무엇을 말했는지 무시하고, 저장해서는 안되는 페이지를 가져 오는 것뿐입니다. 실제로 다시 확인하지 않고 저장함으로써 모든 종류의 이상한 세션 문제가 발생할 수 있습니다.

나는 누군가가 따라 와서 왜이 분야의 최악의 범죄자 인 것처럼 특별히 아이폰과 ipads로 세션 오류가 발생하는지 파악할 수없는 경우에 대비하여이 기능을 추가하고있다.

이 문제로 상당히 광범위한 디버거 테스트를 수행했는데 이것이 내 지시 사항입니다. 디바이스는이 지시문을 완전히 무시합니다.

정기적 인 사용에서도 일부 휴대 전화는 Expires : 0을 통해 새 버전을 확인하지 못하고 마지막으로 수정 한 날짜를 확인하여 새 버전을 받아야하는지 확인합니다.

그것은 단순히 발생하지 않습니다. 그래서 나는 강제로 바꿔야 할 css / js 파일에 쿼리 문자열을 추가했습니다. 바보 같은 모바일 장치가 가지고 있지 않은 파일 인 것처럼 생각합니다. my .css? v = 1이면 CSS / js 업데이트의 경우 v = 2입니다. 이것은 주로 작동합니다.

또한 사용자 브라우저는 2016 년까지 (사이트에 대한 많은 변경과 업데이트를 지속적으로 수행함) 해당 파일에 대한 최종 수정 날짜를 확인하지는 못하지만, 문자열 메서드는 그 문제를 해결합니다. 이것은 브라우저에서 기본 일반 사용자 기본값을 사용하는 경향이있는 클라이언트 및 사무실 사람들에게 눈치 챘으며 css / js 등의 캐싱 문제에 대한 인식이 거의 없으며 변경시 새로운 CSS / js를 거의 얻지 못하고, MSIE / Firefox를 비롯한 대부분의 브라우저의 기본값은 변경 사항을 무시하고 마지막으로 수정 한 날짜는 무시하며 명시 적으로 Expires : 0으로 설정 한 경우에도 유효성을 검사하지 않습니다.

이것은 좋은 기술 정보가 담긴 좋은 스레드 였지만, 특히이 장치에 대한 지원이 특히 모바일 장치에 얼마나 나쁜지주의하는 것이 중요합니다. 몇 달에 한 번 나는 그들이받은 헤더 명령을 따르지 않거나 명령을 적절하게 해석하지 못하는 것에 대비하여 더 많은 보호 계층을 추가해야합니다.


Answer #3

나는이 같은 질문을 가지고 내 검색에서 몇 가지 정보를 발견했습니다. (귀하의 질문은 결과 중 하나였습니다). 내가 결정한 것은 ...

Cache-Control 헤더에는 두 가지 측면이 있습니다. 한 쪽은 웹 서버 ( "원 서버"라고도 함)에서 보낼 수있는 곳입니다. 다른 쪽은 브라우저 ( "사용자 에이전트"라고도 함)가 보낼 수있는 곳입니다.

원본 서버에서 보낸 경우

max-age=0 단순히 캐시 (및 사용자 에이전트)에게 응답이 유효하지 않음을 알려주기 때문에 캐시 된 복사본을 사용하기 전에 응답 (예 : If-Not-Modified 헤더)을 재 검증해야하며, , no-cache 는 캐시 된 사본을 사용하기 전에 반드시 유효성을 다시 확인 해야 한다고 알려줍니다. 14.9.1 에서 캐시 가능 내용 :

노 캐시

... 캐시는 원본 서버와의 성공적인 유효성 재확인없이 후속 요청을 만족시키기 위해 응답을 사용하지 않아야합니다 (MUST NOT). 이로 인해 원 서버는 클라이언트 요청에 대한 부실한 응답을 리턴하도록 구성된 캐시조차도 캐싱을 방지 할 수 있습니다.

즉, 캐시는 부실 응답을 사용하기도하지만 ( Warning 헤더를 추가해야한다고 생각하기는하지만) no-cache 를 사용하지 않을 경우 어떤 경우이든 부실 응답을 사용할 수 없다고합니다. 어쩌면 야구 통계가 페이지에서 생성 될 때 행동을 다시 확인 해야 하지만, 전자 상거래 구매에 대한 응답을 생성 할 때 반드시 동작을 재 검증 해야 합니다.

no-cache 가 기억 장치를 막지 않아야한다고 말했을 때 의견이 정확하다고해도 no-cache 를 사용할 때 실제로 다른 점이있을 수 있습니다. 캐시 컨트롤 지시문 (Cache Control Directives)에 대한 설명이 나왔습니다. (정확함을 보장 할 수는 없습니다.)

실제로 IE와 Firefox는 no-cache 지시어를 브라우저가 페이지를 캐시하지 않도록 지시하는 것처럼 처리하기 시작했습니다. 우리는 1 년 전에이 행동을 관찰하기 시작했습니다. 우리는이 변경이 캐싱을 방지하기 위해이 지시문을 광범위하게 (그리고 올바르지 않게) 사용함으로써 촉발 된 것으로 의심합니다.

...

최근 "cache-control : no-cache"도 "no-store"지시어처럼 작동하기 시작했습니다.

제쳐두고 Cache-Control: max-age=0, must-revalidateCache-Control: no-cache 와 기본적으로 같은 의미입니다. 어쩌면 그게 no-cache 의 명백한 이전을 피하면서 no-cache store의 동작을 다시 검증하는 동작을 얻는 방법 일 것입니다 (즉, 캐싱이 전혀없는 것).

사용자 에이전트가 보낸 경우

shahkalpesh의 답변 은 사용자 에이전트 측에 적용된다고 생각합니다. 13.2.6 복수 응답의 모호성을 살펴볼 수도 있습니다.

사용자 에이전트가 Cache-Control: max-age=0 (일명 "end-to-end revalidation")으로 요청을 전송하면, 길을 따라가는 각 캐시는 캐시 항목을 다시 유효화합니다 (예 : If-Not-Modified 헤더)를 원 서버로 전송합니다. 응답이 304 (Not Modified)이면 캐시 된 엔티티를 사용할 수 있습니다.

반면, Cache-Control: no-cache (일명 "end-to-end reload")로 요청을 보내면 응답은 다시 유효성을 검사하지 않으며 서버는 캐시 된 사본을 사용 하지 않아야 합니다 ( MUST NOT) .


Answer #4

지금은 오래된 질문이지만, 다른 사람들이 내가 한 것처럼 검색을 통해이 문제가 발생하면 IE9에서 뒤로 및 앞으로 버튼을 사용할 때 리소스 동작을 구성하는 것으로 나타납니다. max-age = 0 을 사용하면 브라우저는 뒤로 / 앞으로 누를 때 자원을 볼 때 마지막 버전을 사용합니다. no-cache 를 사용하면 자원을 다시 페치합니다.

IE9 캐싱에 대한 자세한 내용은 msdn 캐싱 블로그 게시물 에서 볼 수 있습니다.


Answer #5

차이점을 분명히 할 수있는 작은 의사 결정 트리가 있습니다.


Answer #6

최대 연령 = 0

이는 Refresh (새로 고침 )를 클릭하는 것과 같습니다. 즉, 이미 최신 사본이 없으면 최신 사본을 제공합니다.

노 캐시

Shift 키 를 누른 채 [새로 고침]을 클릭하면 아무 래도 모든 것을 다시 실행합니다.





http-headers