首先,我对标题感到抱歉。我找不到更好的。
我是一个由PHP脚本生成的图像文件。此脚本(图像)连接到数据库并将其引用URL保存在表中。 由于输出图像没有变化,我认为最好将其缓存。
但据我所知,如果我在每个页面上缓存1个文件(例如http://www.example.com/img.png.php),则浏览器会从缓存中读取它。它对我的剧本不利。因为在第一次调用时,它会保存引用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脚本运行................................
有可能吗? (对不起长篇文章,有很多语法问题)
答案 0 :(得分:1)
您可以使用重定向页面(未缓存)将引荐来源保存到您的数据库,然后重定向到缓存的图像。
这样你总能得到一个命中但实际的图像被缓存。
<小时/> 在您的HTML中,您可以使用:
<img src="/image.php">
在image.php
:
<?php
// save the referrer in here
header('Location: /image.jpg');
?>
和/image.jpg
是您的实际图片(可以缓存)
答案 1 :(得分:1)
首先,考虑一下用户的体验:您是否真的需要为引用者功能增加页面加载时间?此外,您应该知道许多浏览器/隐私工具配置首先禁止或不发送Referer
标题。
如果您确实希望每次都加载资源(JavaScript,样式表,图像......),则可以使用资源发送Cache-Control
HTTP header以防止缓存。例如,要防止在使用Apache时referer.js
进行缓存,请在同一目录中添加以下.htaccess
文件(需要mod_header
):
<FilesMatch "^referer\.js$">
Header set Cache-Control no-cache
</FilesMatch>
答案 2 :(得分:0)
似乎是一个反击,我是对的吗?
AFAIK你不能完全按照你所解释的那样做。
但是你总是可以在服务器端“缓存”一个图像,所以你不需要重绘它:
<?
/*
do some stuff
*/
// send an image: the content-type first
header('Content-type: image/png');
// and the image
readfile('myImage.png');