如何在php中编写未来8小时的HTTP响应头/

如何在php中编写未来8小时的HTTP响应头/,php,http-headers,Php,Http Headers,我知道如何在PHP中设置基本的expires HTTP响应头,如下所示 header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 但是,我想让它更具动态性,因为我想使用PHP,在用户访问内容之前八小时指定过期时间。有人能帮我做到这一点吗 提前谢谢 用于将来制作时间戳,并在GMT时区将其格式化为字符串 define('EXPIRE_FORMAT', 'D, d M Y H:i:s T'); $expires = gmdate(EXPIRE_FORMAT,

我知道如何在PHP中设置基本的expires HTTP响应头,如下所示

header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
但是,我想让它更具动态性,因为我想使用PHP,在用户访问内容之前八小时指定过期时间。有人能帮我做到这一点吗

提前谢谢

用于将来制作时间戳,并在GMT时区将其格式化为字符串

define('EXPIRE_FORMAT', 'D, d M Y H:i:s T');
$expires = gmdate(EXPIRE_FORMAT, strtotime('+8 hours'));
header("Expires: $expires");
您可以使用指示相对于响应时间的秒数的:

实体的过期时间可由源服务器使用Expires标头指定(参见第14.21节)。或者,可以在响应中使用max age指令指定。当缓存响应中存在max age cache control指令时,如果响应的当前期限大于新请求该资源时给定的期限值(以秒为单位),则该响应将过时

例如:

header('Cache-Control: max-age=28800');
请注意,如果同时存在Expires和Cache Control的max age,则max age优先于Expires:

如果响应同时包含Expires标头和max age指令,则max age指令将覆盖Expires标头,即使Expires标头的限制性更强


@Pragma有什么价值?我不确定,这就是为什么我要问;)我读过,但不确定,鉴于我的上述情况,我应该将该值设置为什么。@Drew2345:嗯,注意:“因为没有实际指定“Pragma:no cache as response header”字段的含义,它不能可靠地替代响应中的“cache Control:no cache”因此,它是毫无用处的。如果您希望缓存响应在没有重新验证的情况下不会被缓存使用,请改用它。这是什么:header('cache-Control:private,max age=28800,must revalidate');header('Expires:'.gmdate('D,D M Y H:i:s T',strotime('+8小时'));header('Pragma:private'));@Drew2345:嗯,private意味着响应只能由本地缓存缓存,而不能由共享缓存缓存;max age指定新鲜度生存期;并且必须重新验证要求客户端重新验证缓存的条目。因此,响应只能由专用缓存缓存,并且必须在缓存的响应过时后重新验证(即在28800秒之后)。但是没有指定
Pragma:private
的行为。
strotime()
$expires=gmdate(time()+8*86400)慢得惊人;
乘以~7如果服务器默认自动发送Expires响应,我可以用php脚本覆盖/null,这样Expires头字段就不会被设置吗?Marc B,你当然是对的。对于喜欢微优化的人,调用strotime()可以换成
time()+8*86400
与$_SERVER['REQUEST_TIME'];-)Drew2345相比,它的速度也“非常慢”,这可能取决于服务器。试试看!