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

knm*_*knm 6 javascript cdn

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

Ste*_*ppo 6

是的,他们知道请求资源的页面的URL(例如,通过查看Referer标题).因此,他们可以跟踪哪些网站请求某个资源.唯一的例外是HTTPS页面通过非安全连接请求资源.在这种情况下,Referer将不会设置,但Origin无论如何,标题可能会有所帮助.

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

  1. CDN资源意味着被浏览器大量缓存,因此对于许多不同的页面视图,它们将被请求和下载一次,从而使"被动"统计数据变得虚假.

  2. 强制用户下载每个访问页面的资源会使CDN毫无意义,无缘无故地减慢导航速度并使CDN的带宽过载.这是90年代(叹息)GeoCities页面上长时间死视图计数器使用的技术.

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

  4. 作为替代方案,使用查询字符串参数可以工作,但需要来自目标页面的协作,目标页面必须包括UID作为每个请求的参数,这意味着URL不能被硬编码.我想你说的不是这种情况.

总而言之,CDN 可以跟踪您的访问者,但这样做的缺点实际上大于假设的收益,假设性能和链接的盈利能力是运行CDN的主要目标.如果分析比性能或经济运行更有价值,就像它可以用于免费的CDN一样,那么可以通过应用第2点和第3点来牺牲性能以获得洞察力.

在这一点上,人们必须证明收集的统计数据的合理性,以便能够出于任何营销目的出售它们.此外,通常由CDN提供的文件的性质使它们非常无趣.例如,我不知道有多少人在那里使用某个版本的jQuery有很多盈利.

  • @knm几乎没有免费的CDN是企业的核心部分。有些是“因为他们可以做”作为副项目运行的,或者因为它首先使他们受益(例如Google CDN,它被所有Google网站使用),而另一些则是由捐赠赞助的(例如jQuery CDN)。Microsoft和Amazon Cloudfront都提供对某些形式的CDN的付费访问,这意味着某些网站/ webapp的所有者为提高可用性和交付速度付费。我不太了解这种业务的经济性,因此确实存在获利空间。我的是技术原因:) (2认同)

小智 5

是的,他们可以使用referer头字段:

HTTP引用器(最初是引用者的拼写错误)是HTTP头字段,其标识链接到所请求的资源的网页的地址(即URI或IRI).通过检查引荐来源,新网页可以查看请求的来源.

该字段是请求标头的一部分,可能看起来像这样,例如,重新加载此页面将显示此链接到googleapis(请参阅控制台F12和网络选项卡):

http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
Run Code Online (Sandbox Code Playgroud)

发送此请求标头:

Host: ajax.googleapis.com
User-Agent: Mozilla/5.0 (...)
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://stackoverflow.com/questions/30743915/does-cdn-know-which-website-the-client-is-visiting-when-fetching-jquery-min-js-o
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Run Code Online (Sandbox Code Playgroud)

使用引用来报告它来自哪个站点:

Referer: http://stackoverflow.com/questions/30743915/does-cdn-know-which-website-the-client-is-visiting-when-fetching-jquery-min-js-o
Run Code Online (Sandbox Code Playgroud)