2013-04-02 3 views
1

나는 이상한 일이 생겼을 때 ETags, IF_NONE_MATCH 등을 사용하여 PHP로 놀고있었습니다. 아래 코드를 작성하여 IF_NONE_MATCH를 확인합니다. ETag와 일치하면 304 응답 헤더를 보냅니다. 그렇지 않은 경우 다른 헤더를 보내 브라우저에 페이지 캐시와 ETag를 캐시하도록 지시합니다. 나는 한 번 페이지를 얻고 나서 항상 304를 얻으려고했다. 그 대신 페이지를 한 번 가져온 다음 304, 다음 페이지를 304 등으로 처리합니다. Chrome의 헤더보기를 확인할 때 304 코드에서 ETag를 다시 설정하지 않으면 ' 다음 번에 요청 헤더에서 다시 페이지를 보냅니다. 정상적인 동작입니까, 아니면 그냥 Chrome입니까? 내가 뭔가 잘못하고 있는거야? 나는 문제가 헤더 호출로 생각304 Not Modified 헤더를 사용하여 ETag를 다시 보내야합니까?

<?php 
    $etag = '89453fo245tyu5o423ty5349gu0p34'; 

    if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && 
            $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) { 
     header('', true, 304); 
    } else { 
     header('Expires: Fri, 06 Apr 2013 23:59:59 03:00 GMT'); 
     header('Pragma: cache'); 
     header('Cache-Control: public, must-revalidate, max-age=0'); 
     header('ETag: ' . $etag); 
     echo 'new page'; 
    } 

답변

1

: 여기

는 코드입니다. 올바른 헤더 호출을 사용하여, as mention in this answer 모든 것이 괜찮을 것 :

header('HTTP/1.1 304 Not Modified'); 

은 또한 F5이 페이지를 새로 고침 누르면, 아마도 브라우저 캐시를 무시하고 웹 서버로 바로 이동 기억 해요. 테스트하려면 동일한 페이지에 링크를 추가하거나 브라우저 주소 표시 줄을 클릭하고 Enter 키를 누릅니다.

+0

이 헤더 호출도 시도해 본 결과 같은 결과였습니다. 하지만 당신이 Refresh를 치는 것이 옳은 것 같아요. 감사! – user884248

관련 문제