我的 PHP 脚本缓存(公共)友好吗?

2024-01-29

我已经完成了一个可以提供许多文档的小型 PHP 应用程序。这些文件must可由客户端缓存and代理。

由于代理可以缓存我的结果,因此我必须格外小心,因为我提供的文档可以具有不同的 MIME 类型(基于 $_SERVER['HTTP_ACCEPT'] 的内容协商)和不同的语言(按此顺序:$_POST 值 / $_GET 值/ URL / PHP 会话值 / $_COOKIE 值 / $_SERVER['HTTP_ACCEPT_LANGUAGE'] / 默认脚本值)。

简而言之,一个页面可以提供多种 MIME 类型and许多语言与sameURL(问题已更改:请参阅下面的编辑)。

为了帮助缓存代理,我使用“Vary: Accept”标头结合与 ETag 标头。 ETag 是当前语言和最后修改时间戳的 MD5。

我总是:

  • 发送 Expires 标头
  • 发送 Cache-Control 标头
  • 发送 Last-Modified 标头
  • 发送 Content-Type 标头
  • 发送 ETag 标头(基于当前语言和 Last-Modified 时间戳)
  • 发送内容语言
  • 如果文档是 XHTML,则发送“Vary: Accept”标头

现在我的问题是:这是否足以帮助缓存代理and客户?我错过了什么/标题吗?

为了帮助您,这里是测试页面的 HTTP 响应标头(在我的本地环境中):

"
Date             Wed, 30 Dec 2009 18:56:26 GMT
Server           Apache/2.0.63 (Win32) PHP/5.1.0
X-Powered-By     PHP/5.1.0
Set-Cookie       Tests=697daqbmple2e1daq2dg74ur96; path=/
Expires          Wed, 30 Dec 2009 21:56:26 GMT
Cache-Control    public, max-age=10800
Last-Modified    Mon, 28 Dec 2009 15:11:49 GMT
Etag             "44fa50be4638161a596e4b75d6ab7a94"
Vary             Accept
Content-Language en-us
Content-Length   3043
Keep-Alive       timeout=15, max=100
Connection       Keep-Alive
Content-Type     application/xhtml+xml; charset=UTF-8
"

编辑:好的,我明白在这种情况下提供具有许多 MIME 的文档and使用不同的语言(可以来自很多来源 - 见上文)只是简单的糟糕设计。如果你想这样做,只需使用“私有”缓存(代理上没有缓存)......我对吗?

如果每种语言都有自己的 URL(但每个 URL 仍然可以提供许多 MIME),那么我当前的实现对于“公共”缓存(客户端 + 代理上的缓存)是否可以?


由于您的输出还取决于代理无法知道的内容(例如会话数据),因此将(不可缓存的)重定向发送到实际内容不是更容易吗?这对于给定的 URL(带参数)是固定的,因此更容易缓存。我知道这涉及额外的往返,但它可能不太容易出错,并且也会减少不完全理解/支持所有标头组合的代理的问题。

另外,我猜测,如果您有两个客户端通过相同的代理但使用不同的语言 cookie,则您当前的方法将为同一 URL 返回两个不同的 ETag,这将使代理在每次看到其他客户端。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的 PHP 脚本缓存(公共)友好吗? 的相关文章

  • 未捕获的 ValueError:mysqli_stmt::execute():参数 #1 ($params) 必须是列表数组

    我试图通过这两个查询在我的数据库中插入准备好的语句多个值 这两个查询都发生故障 返回 未捕获的错误 调用未定义的方法 mysqli stmt bindValue 对于第一个代码或 未捕获的 ValueError mysqli stmt ex
  • 如何将 Filesystem 类的 glob 方法与 StorageFacade 结合使用?

    这涉及到拉拉维尔 5 我可以看到Illuminate Filesystem Filesystem一个方法叫做glob pattern flags 0 不幸的是 这个方法并没有体现在默认的情况下FilesystemAdapter随 Larav
  • 如何在Web服务中传递URL

    我想将此 URL 作为网址中的值传递http localhost h2orn php verify php email emails hash hash但是 我只能在 符号之前传递 我想传递所有 URL 我正在使用java网络服务 代码在这
  • Symfony php.ini Debian

    我在 Oracle VM VirtualBox 上使用 Debian 7 amd64 LAMP 服务器 我正在尝试安装 Symfony 但遇到了一些小问题 当我运行命令时 php my project name app check php
  • 在 Linux 中使用 --digest 选项通过curl 进行“摘要式身份验证”

    我正在尝试在Linux中使用curl更改基于Onvif的相机的日期 我已经在 C 中成功完成了此操作并使用摘要身份验证 但我陷入了这种情况 我正在使用以下命令 curl u admin admin digest http 10 104 37
  • Laravel 5 与 SAML 2 和现有 IDP 集成

    我使用 Laravel 5 我正在尝试将 SAML 2 0 与其集成 我找到了这个包 https github com aacotroneo laravel saml2 https github com aacotroneo laravel
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • 配置 .htaccess 以在 PHP 框架 (Silex) 上工作

    我的 Apache2 本地主机 linux 上有一个工作路径 http localhost lab silex web index php hello name 我想成为 http localhost lab silex hello nam
  • 适用于 Windows 的 PHP 支持的 GUI 应用程序

    我知道 PHP 是一种解释性语言 对于基于 Web 的事物来说 不是为在实际操作系统上运行 GUI 应用程序而设计的 但是有没有办法呢 基本上 是否有一个框架 系统允许我创建 本机 基本上是二进制文件 exe 看起来像带有本机控件和所有内容
  • jQuery和PHP中如何知道返回数据是Json还是String?

    我想在客户端 jQuery 检查 PHP 函数返回的数据是否是 Json 对象或 String 来分配不同的函数 如果 json 的格式不正确 jQuery 的 parseJson 将生成异常 您可以将调用包装在 try catch 块中
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • 将参数传递给 http.HandlerFunc

    我正在使用 Go 的内置 http 服务器pat http github com bmizerany pat响应某些 URL mux Get products http HandlerFunc index func index w http
  • 使用 DOM 获取 div 的内容(包括子标签)

    我正在使用 DOM 来获取 div 标签的内容 但内部 html 部分未显示 功能是 dom new DOMDocument libxml use internal errors true dom gt loadHTMLFile url l
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • ZF2 工厂获取参数

    我有一个动态类别导航 在导航工厂中 我想从路线获取参数 我怎样才能做到这一点 在我看来 在我的 module php 中 public function getServiceConfig return array factories gt
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • Laravel 5 注销特定用户

    在我的 laravel 5 应用程序中 有一个功能允许具有管理员角色的用户重置非管理员的任何人的密码 但这不会强制该人注销并再次登录 更改密码后如何强制用户注销 我没有对用于验证用户身份或任何内容的中间件进行任何更改 我不知道它是否有效 但
  • 哪个 PHP 5 版本最常用?

    当我开发将在不同配置的客户端 Web 服务 通常使用共享托管 上使用的应用程序时 我应该假设大多数 Web 服务器都具有哪个 PHP 5 版本 例如 5 2 x 5 3 x 等 在所有使用 PHP 版本 5 的网站中 有 84 9 使用版本

随机推荐

  • PHP:在 for () 循环中创建函数

    有谁知道我如何编写一个函数 该函数能够使用变量的内容作为其名称来创建其他函数 这是我在 php 中讨论的一个基本示例 function nodefunctioncreator for i 1 i lt 10 i newfunctionnam
  • 在 Ruby 中递归列出目录的单行代码?

    在 Ruby 中获取目录 不包括文件 数组的最快 最优化的单行方法是什么 包含文件怎么样 Dir glob for directories Dir glob for all files 代替Dir glob foo 你也可以写Dir foo
  • Python 支持短路吗?

    Python 支持布尔表达式中的短路吗 是的 两个and and or运算符短路 参见the docs http docs python org library stdtypes html highlight short 20circuit
  • 当我指定凭据时,为什么我的 Http 客户端会发出 2 个请求?

    我创建了 RESTful Web 服务 WCF 在其中检查每个请求的凭据 我的一个客户是 Android 应用程序 服务器端的一切似乎都很棒 我收到请求 如果它有正确的标头 我会处理它 等等 现在我创建了使用此服务的客户端应用程序 这就是我
  • java jprogressbar 在繁重操作期间挂起

    我正在编写一个 java 程序 在调用大量使用 CPU 的方法之前 我会显示一个带有 JProgressBar 的框架 虽然我在调用方法之前显示它 但直到方法结束才显示 JProgressBar 进度条 还 没有以任何方式与该方法交互 这就
  • 如何将汉字一一拆分?

    如果没有特殊字符 如空白 等 在名字和姓氏之间 那么下面如何拆分汉字呢 use strict use warnings use Data Dumper my fh DATA my fname 小三 my lname 张 while my n
  • 监控浏览器控制台中的所有 JavaScript 事件

    是否可以监听所有的javascript事件 我试图猜测 AJAX 请求修改 DOM 后是否会触发事件 With firebug http getfirebug com wiki index php Command Line API moni
  • Git 恢复未按预期工作

    我遇到了问题git revert命令 我使用 Ubuntu 12 04 Linux 和 Git 版本 1 7 9 5 我创建了一个全新的b test repo在我的本地电脑上 从远程跟踪它origin b test repo 我在本地创建了
  • 在 C# 中创建部分(或有界)FileStream

    我有一个 FileStream 它由放入一个文件中的多个文件组成 并且我有一个文件长度的列表 换句话说 我可以轻松计算所有文件的位置和长度 我想要创建的是一个 Open 方法 它接受文件索引并返回仅包含该文件的流 目前我已经使用内存流实现了
  • 如何从maven pom文件构建项目

    我有一个开源项目的 Maven pom 文件 这个pom文件包含所有信息 比如它所依赖的其他jar等 我安装了maven 创建一个 samprj 目录并将 pom 文件复制到该目录中 cd 进入该目录并运行 mvn 命令而不带任何参数 但我
  • 什么是 git 边界提交

    The git log command https git scm com docs git log has a boundary选项 这会导致程序 输出排除的边界提交 但什么是边界提交 我什么时候可以将它们包含在输出中 边界提交是限制修订
  • 为什么我们需要 onUpgrade(); SQLiteOpenHelper 类中的方法

    我正在关注这个教程 http www androidhive info 2011 11 android sqlite database tutorial http www androidhive info 2011 11 android s
  • Excel 宏第一次工作,然后下次就很慢

    因此 在未共享的工作表中运行我的宏时 它工作得很好 没有任何问题 只要我共享它 通常第一次就会运行良好 但第二次需要永远运行 如果我第一次运行宏后关闭工作簿并重新打开它将再次运行良好 我尝试清除剪贴板 还尝试了使用宏清除剪贴板的另一个版本
  • dax 中选取不同值的动态总和

    以下是样本数据 Week Practice Type capacity Gen 1 BI c 80 0 1 BI c 80 1 1 BI sc 160 1 1 BI pc 240 0 1 BI pc 240 3 1 BI mc 1160 1
  • 如何在 pandas 中填充直到一天结束?

    我有一个pandas TimeSeries与日内指数 如何分别填充 前向填充 每天的 NaN 值 以这个系列为例 2013 03 27 22 07 00 04 00 1 0 2013 03 27 22 08 00 04 00 nan 201
  • 当我们从 Fragment 类调用 facebook 或 twitter 时如何处理后退按钮?

    我想从 Fragment 连接 Facebook 和 Twitter 但是当我从 Facebook 或 Twitter 返回时 应用程序已关闭 我想留在该应用程序中 我的代码在这里 Override public View onCreate
  • Java:将光标保持在某个区域

    对于玩过 Madness Interactive 的人来说 最令人沮丧的事情之一就是当光标离开游戏区域时 您不小心点击了 这会导致游戏失焦 你的角色会在几秒钟内死亡 为了解决这个问题 我想制作一个可以在后台运行的java应用程序 它将光标保
  • Tkinter 在 Windows XP 上激活窗口

    我有一个小型 GUI 应用程序 用于侦听网络消息 以便用户可以更新一些信息并接受它 这是在生产工厂环境中 用于与特定的物理硬件交互 在某些情况下通过串行 工作流程如下所示 用户正在与另一个程序交互 5250 绿屏 他们输入特定的键绑定 将
  • 来自位图源的图像的 LazyColumn 闪烁/闪烁

    我是 Jetpack Compose 的新手 我目前正在开发一个聊天应用程序 我要求用户从图库中选择图像或从相机中拍照 然后我将文件 Uri 保存到数据库中 然后监听所有消息的列表 当此列表更新时 此图像正在重新组合并闪烁 视图模型中的消息
  • 我的 PHP 脚本缓存(公共)友好吗?

    我已经完成了一个可以提供许多文档的小型 PHP 应用程序 这些文件must可由客户端缓存and代理 由于代理可以缓存我的结果 因此我必须格外小心 因为我提供的文档可以具有不同的 MIME 类型 基于 SERVER HTTP ACCEPT 的