>백엔드 개발 >PHP 튜토리얼 >PHP로 캐싱하기 위해 HTTP 헤더를 효과적으로 활용하려면 어떻게 해야 합니까?

PHP로 캐싱하기 위해 HTTP 헤더를 효과적으로 활용하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-04 03:03:291004검색

How can I effectively leverage HTTP headers for caching with PHP?

PHP 헤더를 사용한 HTTP 캐싱 이해

Q: PHP를 사용한 효과적인 캐싱에 필수적인 HTTP 헤더는 무엇입니까?

A: 웹사이트에 HTTP 캐싱을 구현할 때 특정 헤더는 캐시된 콘텐츠를 관리하는 방법을 브라우저에 안내하는 데 중요한 역할을 합니다. 필수 헤더에는 다음이 포함됩니다.

  • Vary: 이 헤더는 콘텐츠가 언어나 사용자 에이전트와 같은 매개변수에 따라 달라지도록 지정하여 브라우저가 적절한 캐시 버전을 검색하도록 합니다.
  • 마지막 수정: 콘텐츠가 마지막으로 수정된 시간을 나타냅니다. 브라우저는 이 값을 후속 요청의 If-Modified-Since 헤더와 비교하여 콘텐츠를 새로 고쳐야 하는지 결정합니다.
  • ETag: 이 헤더는 콘텐츠의 엔터티 태그 또는 체크섬을 나타냅니다. 브라우저는 변경되지 않은 콘텐츠를 다시 요청하지 않도록 이 값을 If-None-Match 헤더와 비교합니다.

구현:

  1. 캐시 정책 설정:

    <code class="php">session_cache_limiter('private_no_expire'); // Allow caching but do not reveal cache expiry time</code>
  2. 만료 설정:

    <code class="php">header("Cache-Control: max-age=" . (60 * 60 * 24 * 30)); // Set cache expiration to 30 days</code>
  3. If-Modified-Since 및 If-None-Match 헤더 관리:
    이 헤더의 값을 Last-Modified 및 ETag 헤더와 비교하여 불필요한 재요청을 방지하세요.

    <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 && $if_none_match == $etag) || (!$if_none_match)) &&
        ($if_modified_since && $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으로 문의하세요.