假设我有一个图片网址:-example.com/myimg.png
我想检查它是否包含在img src中或有人通过浏览器直接打开了它。
我需要什么:- 查看GIPHY的这张图片-https://media3.giphy.com/media/N8Lfh9gWcWYIU/giphy.gif
如果直接在浏览器中打开它,则它在图像的顶部和底部包含链接,但是如果将此图像包含在img src中,则它仅显示图像。
我尝试了以下代码,但这不是可靠的解决方案:-
$ref = isset($_SERVER['HTTP_REFERER'])? $_SERVER['HTTP_REFERER']: "";
if ($ref != "")
{
header( 'Content-Type: image/jpeg' );
readfile( 'my-image.jpg' );
}
else
{
<img src="my-image.jpg">
<a href="#">My Link</a>
}
答案 0 :(得分:1)
Accept
HTTP标头,并使用大于Age:
值的Cache-Control: max-age=
标头值当浏览器在<img>
标签中加载图片时,它会发送特定的Accept
标头。例如,Firefox 71.0b12将使用
Accept: image/webp,*/*
但是,即使您使用相同的Referer
标头在浏览器中打开此URL,浏览器也会发送带有标头的另一个请求
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
但是还有更多。由于缓存,浏览器将不会发送其他请求。
为避免这种情况,giphy将使用以下标头进行回复:
Last-Modified: ...
Etag: "..."
Content-Type: image/gif
Cache-Control: max-age=86400
Age: 99360
(省略其他标题,不保留顺序)
如您所见, Age
大于max-age
,因此浏览器立即将其视为“陈旧的” ,迫使另一个直接打开图像时要求。
请注意,此方法可能不适用于所有浏览器。