0

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

我有一个由 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 脚本运行..........................

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

4

3 回答 3

1

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

这样,您总是会受到打击,但实际图像会被缓存。


在您的 HTML 中,您可以使用:

<img src="/image.php">

并在image.php

<?php
    // save the referrer in here

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

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

于 2012-04-11T20:39:40.630 回答
1

首先,想想用户的体验:你真的需要仅仅为了referrer特性而增加页面加载时间吗?此外,您应该知道,许多浏览器/隐私工具配置首先会抑制或不发送Referer标头。

如果您确实确定每次都希望加载资源(JavaScript、样式表、图像...),则可以将Cache-ControlHTTP 标头与资源一起发送以防止缓存。例如,为了防止使用 Apache 服务时的缓存,请在同一目录中referer.js添加以下文件(需要):.htaccessmod_header

<FilesMatch "^referer\.js$">
Header set Cache-Control no-cache
</FilesMatch>
于 2012-04-11T20:47:23.940 回答
0

似乎是一个计数器,对吗?

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

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

<?
/*
  do some stuff
*/
// send an image: the content-type first
header('Content-type: image/png');
// and the image
readfile('myImage.png');
于 2012-04-11T20:36:26.957 回答