>  기사  >  백엔드 개발  >  정적 콘텐츠가 포함된 동적 웹사이트에 대해 PHP를 사용하여 HTTP 캐싱을 효과적으로 구현하려면 어떻게 해야 합니까?

정적 콘텐츠가 포함된 동적 웹사이트에 대해 PHP를 사용하여 HTTP 캐싱을 효과적으로 구현하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 09:35:01833검색

How can I effectively implement HTTP caching with PHP for dynamic websites with static content?

PHP와 HTTP 캐싱 통합

페이지 콘텐츠가 기본적으로 정적으로 유지되지만 동적 템플릿으로 둘러싸인 상황에서는 HTTP 캐시 헤더를 활용하여 최적화할 수 있습니다. 페이지 전달. 다음은 PHP를 사용하여 효과적인 캐싱을 구현하기 위한 간단한 가이드입니다.

캐싱을 위한 필수 헤더

캐싱을 활성화하려면 다음 헤더 전송을 고려하세요.

  • Content-Type: 응답의 MIME 유형과 문자 집합을 지정합니다.
  • Vary: Accept: 클라이언트의 Accept에 따라 응답이 달라질 수 있음을 나타냅니다. 헤더, 콘텐츠 협상 제어
  • Cache-Control: private_no_expire와 같은 지시문을 설정하여 개인 캐싱을 허용하지만 재검증을 방지합니다. 또는 공개를 사용하여 공유 캐싱을 허용하세요.
  • 최종 수정: 콘텐츠가 마지막으로 수정된 날짜와 시간을 제공하세요.
  • ETag: 클라이언트가 캐시된 버전이 아직 최신인지 확인하는 데 사용할 수 있는 고유 식별자를 콘텐츠에 할당합니다.

조건부 요청 및 처리

if-modified-sinceif-none-match:

  • if-modified-since를 사용하여 들어오는 조건부 요청을 처리합니다. : 요청 헤더를 Last-Modified 헤더와 비교하세요. 캐시된 버전이 여전히 유효한 경우 304(수정되지 않음) 상태 코드를 반환합니다.
  • if-none-match: ETag 헤더에 대해 유효성을 검사합니다. 캐시된 버전이 일치하면 304를 반환합니다.

캐시 유효성 확인

ETag를 생성할 때 체크섬 또는 사용자와 같은 요소의 조합 사용을 고려하세요. ID, 언어, 타임스탬프. 정적 콘텐츠를 오래 지속하려면 만료 시간을 더 길게 설정하세요.

구현 예시

<code class="php">$tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
$etag = $language . $timestamp;

$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
if ((($if_none_match &amp;&amp; $if_none_match == $etag) || (!$if_none_match)) &amp;&amp; 
($if_modified_since &amp;&amp; $if_modified_since == $tsstring))
{
header('HTTP/1.1 304 Not Modified');
exit();
}
else
{
header("Last-Modified: $tsstring");
header("ETag: \"{$etag}\"");
}</code>

위 내용은 정적 콘텐츠가 포함된 동적 웹사이트에 대해 PHP를 사용하여 HTTP 캐싱을 효과적으로 구현하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.