栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

由PHP动态创建HTTP响应时缓存它们

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

由PHP动态创建HTTP响应时缓存它们

用PHP服务大量或许多辅助文件并不完全是它的目的。

取而代之的是,将Nginx用作X-accel,将Lighttpd
用作X-Sendfile或将Apache
用作mod_xsendfile。

最初的请求由PHP处理,但是一旦确定了下载文件,它将设置一些标头以指示服务器应处理文件发送,此后,PHP进程将释放以处理其他内容。

然后,您可以使用Web服务器为您配置缓存。

静态生成的内容

如果您的内容是从PHP生成的,并且创建起来特别昂贵,则可以将输出写入本地文件,然后再次应用上述方法。

如果您无法写入本地文件或不想写入本地文件,则可以使用HTTP响应标头来控制缓存:

Expires: <absolute date in the future>Cache-Control: public, max-age=<relative time in seconds since request>

这将导致客户端缓存页面内容,直到它过期或当用户强制重新加载页面时(例如,按F5键)。

动态生成的内容

对于动态内容,您希望浏览器每次都能ping通您,但仅在有新内容时才发送页面内容。您可以通过设置其他一些响应头来完成此操作:

ETag: <hash of the contents>Last-Modified: <absolute date of last contents change>

当浏览器再次ping您的脚本时,它们将分别添加以下请求标头:

If-None-Match: <hash of the contents that you sent last time>If-Modified-Since: <absolute date of last contents change>

ETag
主要用于降低网络流量在某些情况下,知道的内容哈希,你首先要计算它。

Last-Modified
如果您具有本地文件缓存(文件具有修改日期),则最容易应用。一个简单的条件使其起作用:

if (!file_exists('cache.txt') ||     filemtime('cache.txt') > strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {    // update cache file and send back contents as usual (+ cache headers)} else {    header('HTTP/1.0 304 Not modified');}

如果您不能进行文件缓存,则仍然可以使用它

ETag
来确定内容是否已更改。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/594694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号