public function cached($public = true, $expires = '+1 year')
    {
        if (!is_int($expires)) {
            $expires = strtotime($expires);
        }
        $maxAge = $expires - time();
        $pragma = $public ? 'public' : 'private';
        $cache = $pragma . ', max-age=' . $maxAge;
        $response = clone $this;
        $response->setHeader('Expires', Message::date($expires));
        $response->setHeader('Pragma', $pragma);
        $response->setHeader('Cache-Control', $cache);
        return $response;
    }