php 處理瀏覽器緩衝

來源:互聯網
上載者:User

主要涉及到 Header 裡面三個屬性

lastModified:設定一個最後修改時間,瀏覽器下次訪問的時候,發送一個”If-Modified-Sinc”的頭資訊,如果內容在這個時間之後沒有更新,伺服器直接返回一個304 Not Modified而不傳輸詳細內容,可以節省頻寬。

    Etag:設定一個標記,瀏覽器下次訪問時,發送一個”If-None-Match”的頭資訊,如果伺服器內容還是這個標記沒變,也直接返回一個304 Not Modified而不傳輸詳細內容,同樣可以節省頻寬。

    Expires:設定一個到期時間,如果當前請求在這個到期時間之類,則不發送HTTP請求,不僅可以節約伺服器頻寬,還可以減少伺服器HTTP請求數

Cache-control: max-age=seconds  緩衝相對時間   seconds 是緩衝的秒數  即第一次訪問後 多少秒之內再訪問直接存取的時候瀏覽器本機快取 不會訪問伺服器

 

過程如下:
1.用戶端請求一個頁面(A)。
2.伺服器返回頁面A,並在給A加上一個Last-Modified/ETag。
3.用戶端展現該頁面,並將頁面連同Last-Modified/ETag一起緩衝。
4.客戶再次請求頁面A,並將上次請求時伺服器返回的Last-Modified/ETag一起傳遞給伺服器。
5.伺服器檢查該Last-Modified或ETag,並判斷出該頁面自上次用戶端請求之後還未被修改,直接返迴響應304和一個空的響應體。

 

相關函數

//http header 狀態代碼 和 對應描述

$statusTexts = array(
        '100' => 'Continue',
        '101' => 'Switching Protocols',
        '200' => 'OK',
        '201' => 'Created',
        '202' => 'Accepted',
        '203' => 'Non-Authoritative Information',
        '204' => 'No Content',
        '205' => 'Reset Content',
        '206' => 'Partial Content',
        '300' => 'Multiple Choices',
        '301' => 'Moved Permanently',
        '302' => 'Found',
        '303' => 'See Other',
        '304' => 'Not Modified',
        '305' => 'Use Proxy',
        '306' => '(Unused)',
        '307' => 'Temporary Redirect',
        '400' => 'Bad Request',
        '401' => 'Unauthorized',
        '402' => 'Payment Required',
        '403' => 'Forbidden',
        '404' => 'Not Found',
        '405' => 'Method Not Allowed',
        '406' => 'Not Acceptable',
        '407' => 'Proxy Authentication Required',
        '408' => 'Request Timeout',
        '409' => 'Conflict',
        '410' => 'Gone',
        '411' => 'Length Required',
        '412' => 'Precondition Failed',
        '413' => 'Request Entity Too Large',
        '414' => 'Request-URI Too Long',
        '415' => 'Unsupported Media Type',
        '416' => 'Requested Range Not Satisfiable',
        '417' => 'Expectation Failed',
        '500' => 'Internal Server Error',
        '501' => 'Not Implemented',
        '502' => 'Bad Gateway',
        '503' => 'Service Unavailable',
        '504' => 'Gateway Timeout',
        '505' => 'HTTP Version Not Supported',
    );

//設定緩衝到期時間

function expires($seconds = 1800)
{
        $time = date('D, d M Y H:i:s', time() + $seconds) . ' GMT';
        header("Expires: $time");

}

//返回指定header狀態資訊

function statusCode($code, $text = null)
 {

        global $statusTexts;//http header 狀態
        $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1';
        $text = (null === $text) ? $statusTexts[$code] : $text;
        $status = "$protocol $code $text";
        header($status);
}
//lastModified

function lastModified($modifiedTime, $notModifiedExit = true)
 {
        $modifiedTime = date('D, d M Y H:i:s \G\M\T', $modifiedTime);
        if ($notModifiedExit && isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && $modifiedTime == $_SERVER['HTTP_IF_MODIFIED_SINCE']) {
            statusCode('304');
            exit();
        }
        header("Last-Modified: $modifiedTime");

}

//設定頁面charest

function charset($enc = 'UTF-8', $type = 'text/html')
 {
        header("Content-Type:$type;charset=$enc");
 }

//禁止瀏覽器快取頁面面

function disableBrowserCache()
{
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
 }

//etag 設定內容標記 etag 多用 md5(要輸出的內容)

function etag($etag, $notModifiedExit = true)
{
        if ($notModifiedExit && isset($_SERVER['HTTP_IF_NONE_MATCH']) && $etag == $_SERVER['HTTP_IF_NONE_MATCH']) {
            statusCode('304');
            exit();
        }
        header("Etag: $etag");

}

http://hi.baidu.com/tenyaoshen/item/f7c99b4a86bba6e01281da0b

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.