0

我对跟踪像素有疑问。trackingpixel 包含在主页上,如下所示:

<img src="tracking.gif" alt="" />

tracking.gif 包含以下内容:

<?php
header("Location: http://www.mydomain.com/referrer.php?url=http%3A%2F%2Fwww.external.com")
?>

referrer.php 看起来像这样:

<?php
$url = $_GET['url'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Referring...</title>
        <link rel="stylesheet" type="text/css" href="css.css" />
        <meta http-equiv="refresh" content="0.3; URL=<?php echo $url ?>" />
        <script type="text/javascript">
                    window.setTimeout(function() {
                        location.href = '<?php echo $url ?>';
                    }, 300);
        </script>
    </head>
    <body>
        Some text.
    </body>
</html>

不幸的是,重定向到外部网站不起作用。只有referrer.php 被加载。这是为什么?如果我将 tracking.gif 中的 referrer-url 替换为外部网站的 url,则该代码有效。

更多信息: 如果我直接调用referrer.php,它就可以工作。我通过 htaccess 设置服务器,它应该将 tracking.gif 作为 php 文件处理。

提前感谢您的帮助!

4

1 回答 1

0

您的问题的答案在于浏览器如何处理不同类型的资产,以及允许实际执行哪些资产。

您的第一段代码:

<img src="tracking.gif" alt="" />

告诉浏览器从某个位置加载和显示图像。为此,它将对图像发出 HTTP 请求。这就是为什么您的第二段代码:

<?php header("Location: ....") ?>

确实有效。浏览器发送一个对 tracking.gif 的 HTTP 请求,响应将浏览器定向到另一个位置。这一切都很好(尽管您还应该将响应状态设置302为完整性)并且浏览器会转到您的新 URL 以搜索图像数据。

这是我们遇到的问题。当我们跟随重定向到我们的新页面时,我们没有得到图像——我们得到了一些 HTML。浏览器无法将其解释为图像。这似乎是无稽之谈。所以它被丢弃了。浏览器当然不会检查或执行嵌入在无意义图像数据中的代码。它只是将数据交给负责绘制图像的管道,然后它会说“我不明白”并继续下一个任务。

这就是为什么referrer.php当您直接在浏览器中加载页面时您的页面实际上可以工作 - 因为浏览器需要 HTML 和 Javascript。当浏览器接收到相同的数据时正在等待图像,结果是失败。

似乎试图在加载图像时使浏览器转到不同的 URL,这是安全模型不允许的 - 图像文件无法将行为注入包含它们的页面中。你能更详细地解开你真正想要实现的目标吗?

于 2012-06-02T11:25:53.853 回答