草庐IT

javascript - 从 CDN 获取 jquery.min.js 或其他资源时,CDN 是否知道客户端正在访问哪个网站?

coder 2025-02-22 原文

CDN 能否通过跟踪我网站的访问者或他们下载所需的库而不共享他们访问的页面的 URL 来创建某种统计数据?

最佳答案

是的,他们知道请求资源的页面的 URL(例如,通过查看 Referer header )。因此他们可以跟踪哪些网站请求了特定资源。唯一的异常(exception)是当 HTTPS 页面通过非安全连接请求资源时。在那种情况下,Referer 不会被设置,但是 Origin header 无论如何都会有一些帮助。

当然可以跟踪单个用户,但由于多种原因这是不切实际的:

  1. CDN 资源本应由浏览器进行大量缓存,因此它们将针对许多不同的页面浏览请求和下载一次,从而使“被动”统计数据变得虚假。

  2. 强制用户为访问的每个页面下载资源会使 CDN 变得毫无意义,无缘无故地减慢导航速度并使 CDN 的带宽过载。这是 90 年代 GeoCities 页面上久违的浏览量计数器所使用的技术(叹息)。

  3. 跟踪用户至少需要设置一个识别 cookie。这增加了 Web 服务的复杂性(因为它不再是一个简单的文件服务器)和响应时间的延迟,因为 UID 必须在某种形式的数据库中查找或新生成。 Etags 也可能被滥用,cookie 也有同样的问题。

  4. 作为替代方案,使用查询字符串参数可能有效,但需要目标页面的协作,目标页面必须将 UID 作为参数包含在每个请求中,这意味着 URL 不能被硬编码。我猜你说的不是这种情况。

总而言之,CDN可以跟踪您的访问者,但这样做的缺点实际上大于假设的 yield ,假设性能和相关的盈利能力是运行 CDN 的主要目标.如果分析比性能或运营经济更有值(value),例如免费 CDN,那么可以通过应用第 2 点和第 3 点来牺牲性能来获得洞察力。

到那时,人们必须证明所收集统计数据的可靠性,以便能够出于任何营销目的出售它们。此外,通常由 CDN 提供的文件的性质使它们变得非常无趣。例如,我认为了解有多少人使用特定版本的 jQuery 并不能带来多少 yield 。

关于javascript - 从 CDN 获取 jquery.min.js 或其他资源时,CDN 是否知道客户端正在访问哪个网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30743915/

有关javascript - 从 CDN 获取 jquery.min.js 或其他资源时,CDN 是否知道客户端正在访问哪个网站?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  6. ruby - 简单获取法拉第超时 - 2

    有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url

  7. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  8. ruby - 获取模块中定义的所有常量的值 - 2

    我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c

  9. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  10. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

随机推荐