응답 헤더에 서버에서 캐시 없음, 저장 없음, 재검증 필수 항목을 보냈음에도 불구하고 브라우저에 캐시된 페이지가 계속 표시됩니다.

응답 헤더에 서버에서 캐시 없음, 저장 없음, 재검증 필수 항목을 보냈음에도 불구하고 브라우저에 캐시된 페이지가 계속 표시됩니다.

페이지의 콘텐츠는 계속 변경되므로 브라우저가 페이지를 캐시하거나 캐시된 페이지 또는 사용자를 표시하는 것을 원하지 않습니다. 그러나 응답 헤더에서 서버로부터 캐시 없음, 저장 없음, 재검증 필수를 전송했음에도 불구하고 브라우저는 캐시된 페이지를 계속 표시합니다. 정말 실망스럽습니다. 수천 명의 사용자가 있고 그들은 모두 오래된 뉴스를 읽고 있습니다!!!

클라이언트 측 js 템플릿(핸들바 js)을 사용하여 서버에서 데이터를 읽고 페이지를 렌더링하지만 브라우저는 마지막으로 렌더링된 페이지를 사용자에게 계속 표시하고 핸들바는 서버에서 새 데이터를 읽지 않고 콘텐츠를 업데이트하지 않습니다. 무엇이 잘못되었을 수 있나요??

Shift Reload를 누르면 브라우저에 새 콘텐츠가 표시되지만 사용자가 페이지를 로드할 때마다 그렇게 하도록 요청하거나 기대할 수는 없습니다.

누군가 유용한 조언을 해줄 수 있나요?

200 OK

응답 헤더:

Accept-Ranges: bytes
Cache-Control: no-cache, no-store, must-revalidate
Connection: keep-alive
Content-Length: 12229
Content-Type: text/html
Date: Fri, 14 Aug 2020 09:08:10 GMT
ETag: "1e9602c3ddcf81c338fa4194c61ea035"
Last-Modified: Fri, 07 Aug 2020 12:38:22 GMT
Server: nginx/1.19.1
Strict-Transport-Security: max-age=0; includeSubDomains
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-request-id: tx00000000000004b9d2b06-005f36547a-ab8956-ams3b
x-rgw-object-type: Normal

요청 헤더:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Cache-Control: max-age=0
Connection: keep-alive
Cookie: _ga=GA1.1.709310680.1596978913; _gid=GA1.1.2045080055.1596978913
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36
(index):48 [Violation] Avoid using document.write(). https://developers.google.com/web/updates/2016/08/removing-document-write

​ nginx 앞에 tls 종료를 수행하고 nginx에 대한 일반적인 http get을 수행하는 cloudflare가 있으므로 http GET을 수행하고 있습니다. Cloudflare가 활성화되면 cloudflare 캐싱으로 인해 어떤 다른 캐싱 문제가 발생할지 생각이 두렵습니다. 며칠 안에 출시해야 하며 이 버전으로 프로덕션에 출시하기 전에 이 문제를 해결해야 합니다. 위 문제를 해결하기 위해 빠른 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변1

당신은 사용했습니다캐시 제어 지시문서로 충돌하므로 브라우저는 어떤 지시문을 따르고 어떤 지시문을 무시할지 결정해야 합니다.

구체적으로 다음을 사용했습니다.

  • no-cache. 이를 통해 응답이 즉시 오래된 것으로 표시되고 원본 서버에서 항상 재검증되더라도 응답을 캐시할 수 있습니다.
  • must-revalidate: 오래된 캐시된 문서를 원본 서버에서 재검증해야 함을 의미합니다. 여기에는 추가 효과 가 no-cache없습니다.
  • no-store: 응답을 캐시하지 마세요.

캐시하지 말라고 했는데 캐시해도 괜찮다면 브라우저는 무엇을 합니까?

응답이 캐시되는 것을 원하지 않으면 다음을 사용하십시오.오직 no-store. 다른 두 개의 Cache-Control 지시문을 사용하지 마십시오.

관련 정보