php 사이트의 브라우저 캐시를 방지하는 방법
클라우드 서버에서 실행 중인 php 사이트가 있습니다.새로운 파일 css, js 또는 이미지를 추가할 때마다 브라우저는 캐시에 저장된 동일한 오래된 js, css 및 이미지 파일을 로드합니다.
내 사이트에는 아래와 같은 doctpe 및 메타 태그가 있습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
위의 doctpe 및 메타 코드 때문에 새 파일이 아닌 브라우저에 캐시된 동일한 파일을 로드하고 있습니다.
이거 먹어봐
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
HTML을 사용하여 제어하려면 다음 옵션1과 같이 합니다.
<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/>
<meta http-equiv="pragma" content="no-cache" />
또한 PHP를 통해 제어하고 싶다면 아래 옵션 2와 같이 제어하십시오.
header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
프록시 기반 캐시 문제를 피하기 위해서는 옵션2가 항상 좋습니다.
다음과 같이 시험해 보십시오.
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Connection: close");
캐시(있는 경우)를 방지하는 데 도움이 되었으면 합니다.
css 파일을 캐싱하는 데 문제가 있었습니다.PHP에서 헤더를 설정하는 것은 도움이 되지 않았습니다(아마도 헤더를 링크하는 페이지가 아닌 스타일시트 파일로 설정해야 하기 때문일 것입니다).
이 페이지에서 솔루션을 찾았습니다.https://css-tricks.com/can-we-prevent-css-caching/
해결 방법:
링크된 파일에 대한 URI 쿼리 부분으로 타임스탬프를 추가합니다.
(CSS, js, 이미지 등에 사용 가능)
개발의 경우:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
운영 환경(캐싱이 대부분인 경우):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(필요한 경우는 수동으로 고쳐 씁니다)
또는 다음 두 가지 조합:
<?php
define( "DEBUGGING", true ); // or false in production enviroment
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>">
편집:
또는 이 두 가지 조합의 예쁜 조합:
<?php
// Init
define( "DEBUGGING", true ); // or false in production enviroment
// Functions
function get_cache_prevent_string( $always = false ) {
return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : "";
}
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">
경우에 따라서는 브라우저 캐시 방지를 권장하지 않습니다.솔루션을 찾다가 다음과 같은 솔루션을 찾았습니다.
<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">
여기서의 문제는 서버 업데이트 중에 파일을 덮어쓰면(나의 시나리오), 파일의 내용이 같아도 타임 스탬프가 변경되기 때문에 캐시가 무시된다는 것입니다.
이 솔루션을 사용하여 브라우저의 콘텐츠가 변경된 경우에만 자산을 강제로 다운로드하도록 합니다.
<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">
캐시된 파일에 조회 문자열을 사용할 수도 있습니다.스타일 동작이나 js 파일에는 영향을 주지 않습니다.
예를 들어 다음과 같습니다.
example.com/mystyle.css ->
example.com/mystyle.css?<?php echo random(1000, 5000); ?>
언급URL : https://stackoverflow.com/questions/13640109/how-to-prevent-browser-cache-for-php-site
'programing' 카테고리의 다른 글
@Null 주석 사용법 (0) | 2022.12.20 |
---|---|
Python foreach 등가물 (0) | 2022.12.20 |
MariaDB - 두 엔티티 간에 다수의 관계 테이블을 만듭니다. (0) | 2022.12.20 |
Nuxt.js에서 rootGetters를 사용하는 데 문제가 있습니다. (0) | 2022.12.20 |
Python에서 전체 경로 파일 이름 만들기 (0) | 2022.12.20 |