代码之家  ›  专栏  ›  技术社区  ›  Shoban

这个网址到底是什么意思?

  •  1
  • Shoban  · 技术社区  · 16 年前

    我在我们的一个Web应用程序中使用了不同的分析标记。它们中的大多数调用一个javascript代码进行跟踪。

    有些标签有带查询字符串的GIF图像的URL。

    例子: http://www.google-analytics.com/__utm.gif?utmwv=45.542

    这个网址到底是做什么的?他们如何从querystring中获取值?

    更新:(在阅读了一些答案之后)我知道每个浏览器都会加载1x1像素的GIF。但是他们是如何从查询字符串中获取值的呢?在上述情况下,他们如何才能检索到utmvv的值?有代码样本吗?

    7 回复  |  直到 16 年前
        1
  •  4
  •   seanb    16 年前

    基本上,你用你喜欢的语言写一个脚本,然后把它映射到 你的脚本.gif . …JPG,PNG偶数。

    已在ASP.NET中使用HTTP处理程序完成此操作。

    该脚本像其他任何动态页面(aspnet、asp、php,任何真正的内容)一样读取querystring,然后将其写入数据库或日志文件,或者对其执行任何其他操作。

    然后适当地设置Content-Type标题,例如“image/gif”,并发送回一个1像素的图像或任何其他您喜欢的大小的图像。

    对于一个1像素的图像,我已经在十六进制编辑器中打开了一个1像素spacer.gif类型的图像,并将其硬编码为一个字节数组以作为响应发送,如果它经常受到攻击,将节省一点IO开销,也就是说,您可以从磁盘或数据库读取一个文件并将其发送回来。

    这是电子邮件通讯中常用的跟踪未结价格等的技巧。
    通常,最困难的一点是,当您没有足够的权限将URL映射到共享计算机上的脚本时,但是您可以将其开发为一个普通的脚本/程序,然后在您使其工作后,对其进行排序。

    大多数现代浏览器会以图像的形式响应ASPX或PHP(.etc…)URL,如果它发送正确的头文件,它是旧的浏览器、浏览器保姆插件和电子邮件客户端,这是最挑剔的。

        2
  •  1
  •   Ana Betts    16 年前

    就像可以将查询字符串传递给ASP.NET页面一样,实际上可以将查询字符串传递给任何URL;如果使用基于MVC的框架(如ASP.NET MVC或Rails),那么从这样的URL捕获参数很容易。然后,你要做的就是返回一个GIF图像。

        3
  •  1
  •   Alex Wayne    16 年前

    任何浏览器都会在其URL上加载图像,即使没有javascript。完成后,可以捕获来自客户端的查询字符串参数和请求头进行分析。因此,它允许在完全不使用JavaScript的情况下捕获分析。

        4
  •  1
  •   Piskvor left the building Rohit Kumar    16 年前

    那不是GIF,那是太空站 (β) !

    换句话说,虽然URL似乎指向一个图像,但是www.google-analytics.com的Web服务器将这个请求传递给一些处理脚本,然后这些脚本将提取数据并将1x1 gif图像内容发送回浏览器。

    以下是使用Apache Web服务器和mod_rewrite的示例:

    # in .htaccess
    RewriteEngine On
    RewriteRule ^__utm\.gif /someprocessingscript.php [QSA]
    
    <?php // in someprocessingscript.php
    do_some_tracking($_GET); // this would probably analyze and log data
    header('Content-Type: image/gif');
    readfile('1x1.gif');
    exit;
    ?>
    

    另一种选择:提供真正的GIF(可能与 Cache-Control: no-cache )记录所有访问,然后分析日志。这可能更快,因为这不需要内部重写,也不需要在每个访问上编写脚本。

        5
  •  0
  •   Andy Hume    16 年前

    请求映像时,查询字符串仍会发送到服务器。

    当然,我不知道他们如何处理服务器上的数据的确切细节,但是.gif是一种非常常见的将数据发送回分析目的的方法。

        6
  •  0
  •   Scott Evernden    16 年前

    好。。_ utm.gif是一个1x1像素的图像,谷歌必须记录访问权限,这意味着他们也在日志中收集查询字符串值。真的没什么棘手的。我认为utmvv是一个版本号,但不清楚这个数字意味着什么。

        7
  •  0
  •   Julien Roncaglia    16 年前

    但是他们是如何从查询字符串中获取值的呢?在上述情况下,他们如何才能检索到utmvv的值?有代码样本吗?

    如果他们想要调用页面,他们有引用,如果他们想要参数,他们有请求URI。

    print($_SERVER['HTTP_REFERER']);
    print($_SERVER['REQUEST_URI']);