public static function isResponseCacheable(Google_Http_Request $resp)
  {
    // First, check if the HTTP request was cacheable before inspecting the
    // HTTP response.
    if (false == self::isRequestCacheable($resp)) {
      return false;
    }

    $code = $resp->getResponseHttpCode();
    if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
      return false;
    }

    // The resource is uncacheable if the resource is already expired and
    // the resource doesn't have an ETag for revalidation.
    $etag = $resp->getResponseHeader("etag");
    if (self::isExpired($resp) && $etag == false) {
      return false;
    }

    // [rfc2616-14.9.2]  If [no-store is] sent in a response, a cache MUST NOT
    // store any part of either this response or the request that elicited it.
    $cacheControl = $resp->getParsedCacheControl();
    if (isset($cacheControl['no-store'])) {
      return false;
    }

    // Pragma: no-cache is an http request directive, but is occasionally
    // used as a response header incorrectly.
    $pragma = $resp->getResponseHeader('pragma');
    if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
      return false;
    }

    // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
    // a cache cannot determine from the request headers of a subsequent request
    // whether this response is the appropriate representation."
    // Given this, we deem responses with the Vary header as uncacheable.
    $vary = $resp->getResponseHeader('vary');
    if ($vary) {
      return false;
    }

    return true;
  }
public static function isResponseCacheable(Google_Http_Request $resp)
  {
    // First, check if the HTTP request was cacheable before inspecting the
    // HTTP response.
    if (false == self::isRequestCacheable($resp)) {
      return false;
    }

    $code = $resp->getResponseHttpCode();
    if (! in_array($code, self::$CACHEABLE_STATUS_CODES)) {
      return false;
    }

    // The resource is uncacheable if the resource is already expired and
    // the resource doesn't have an ETag for revalidation.
    $etag = $resp->getResponseHeader("etag");
    if (self::isExpired($resp) && $etag == false) {
      return false;
    }

    // [rfc2616-14.9.2]  If [no-store is] sent in a response, a cache MUST NOT
    // store any part of either this response or the request that elicited it.
    $cacheControl = $resp->getParsedCacheControl();
    if (isset($cacheControl['no-store'])) {
      return false;
    }

    // Pragma: no-cache is an http request directive, but is occasionally
    // used as a response header incorrectly.
    $pragma = $resp->getResponseHeader('pragma');
    if ($pragma == 'no-cache' || strpos($pragma, 'no-cache') !== false) {
      return false;
    }

    // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that
    // a cache cannot determine from the request headers of a subsequent request
    // whether this response is the appropriate representation."
    // Given this, we deem responses with the Vary header as uncacheable.
    $vary = $resp->getResponseHeader('vary');
    if ($vary) {
      return false;
    }

    return true;
  }
public static function isResponseCacheable ( Google_Http_Request $ resp ) { // First, check if the HTTP request was cacheable before inspecting the // HTTP response. if ( false == self :: isRequestCacheable ( $ resp ) ) { return false ; } $ code = $ resp -> getResponseHttpCode ( ) ; if ( ! in_array ( $ code , self :: $ CACHEABLE_STATUS_CODES ) ) { return false ; } // The resource is uncacheable if the resource is already expired and // the resource doesn't have an ETag for revalidation. $ etag = $ resp -> getResponseHeader ( "etag" ) ; if ( self :: isExpired ( $ resp ) && $ etag == false ) { return false ; } // [rfc2616-14.9.2]  If [no-store is] sent in a response, a cache MUST NOT // store any part of either this response or the request that elicited it. $ cacheControl = $ resp -> getParsedCacheControl ( ) ; if ( isset ( $ cacheControl [ 'no-store' ] ) ) { return false ; } // Pragma: no-cache is an http request directive, but is occasionally // used as a response header incorrectly. $ pragma = $ resp -> getResponseHeader ( 'pragma' ) ; if ( $ pragma == 'no-cache' || strpos ( $ pragma , 'no-cache' ) !== false ) { return false ; } // [rfc2616-14.44] Vary: * is extremely difficult to cache. "It implies that // a cache cannot determine from the request headers of a subsequent request // whether this response is the appropriate representation." // Given this, we deem responses with the Vary header as uncacheable. $ vary = $ resp -> getResponseHeader ( 'vary' ) ; if ( $ vary ) { return false ; } return true ; }
Check if an HTTP response can be cached by a private local cache.

@static
@param Google_Http_Request $resp
@return bool True if the response is cacheable.
False if the response is un-cacheable.
Check if an HTTP response can be cached by a private local cache .