【问题标题】:cache 1 file for multi domains为多域缓存 1 个文件
【发布时间】:2012-04-12 05:02:52
【问题描述】:

首先,我对标题感到抱歉。我找不到更好的了。

我有一个由 PHP 脚本生成的图像文件。此脚本(图像)连接到数据库并将其引荐来源网址保存在表中。 因为输出的图片没有变化,我觉得还是缓存比较好。

但据我所知,如果我缓存 1 个文件(例如 http://www.example.com/img.png.php),在每个页面上,浏览器都会从缓存中读取它。这对我的剧本不利。因为在第一次调用时,它会保存引荐来源网址并由浏览器缓存。并且在接下来的调用中,在不同的网站(referrer)上,将使用缓存版本,浏览器不会向服务器发送任何请求,最终referrer url不会保存在数据库中。

我可以对浏览器说,请为每个域缓存 1 个图像副本吗? 我的意思是:

http://wwww.abc.com/index.html 发送请求以获取我的图像(脚本)

浏览器检查它的缓存,但没有找到。所以从 服务器。并且 PHP 脚本会保存引荐来源网址。

用户转到 ABC.COM 的另一个页面。 (例如:http://wwww.abc.com/about.html)浏览器检查缓存,发现 它。所以不会向服务器发送请求以获取文件内容。 并且 PHP 脚本不会运行。

另一个站点 (http://wwww.efg.com/index.html) 发送请求以获取我的图像(脚本) 浏览器检查缓存,但不会找到它。所以发送文件请求 内容。和 PHP 脚本运行..........................

有可能吗? (对不起,文字很长,语法问题很多)

【问题讨论】:

  • HTTP referer 无论如何都是完全不可靠的

标签: php caching cache-control


【解决方案1】:

您可以使用重定向页面(未缓存)将引荐来源网址保存到您的数据库,然后重定向到缓存的图像。

这样,您总是会获得成功,但实际图像会被缓存。


在您的 HTML 中,您可以使用:
<img src="/image.php">

image.php:

<?php
    // save the referrer in here

    header('Location: /image.jpg');
?>

/image.jpg 是您的实际图像(可以缓存)

【讨论】:

  • 我听不懂。你能解释更多吗?
【解决方案2】:

首先,考虑一下用户的体验:你真的需要仅仅为了引荐来源功能增加页面加载时间吗?此外,您应该知道,许多浏览器/隐私工具配置首先会抑制或不发送 Referer 标头。

如果您确定要每次都加载资源(JavaScript、样式表、图像...),您可以发送带有资源的Cache-Control HTTP header 以防止缓存。例如,为防止在使用 Apache 服务时缓存 referer.js,请在同一目录中添加以下 .htaccess 文件(需要 mod_header):

<FilesMatch "^referer\.js$">
Header set Cache-Control no-cache
</FilesMatch>

【讨论】:

  • 因为想用户,所以想缓存。我的意思是浏览器可以为 2 个不同的网站(推荐人)缓存相同的文件两次
【解决方案3】:

好像是计数器,对吗?

AFAIK 你不能完全按照你解释的那样去做。

但您始终可以在服务器端“缓存”图像,因此您无需重新绘制它:

<?
/*
  do some stuff
*/
// send an image: the content-type first
header('Content-type: image/png');
// and the image
readfile('myImage.png');

【讨论】:

  • 图片就是一个例子。它可以是脚本、样式表等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2016-09-17
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
相关资源
最近更新 更多