HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是服务器(网站)与客户端(浏览器)之间请求与应答的标准。通过在HTTP或HTTPS协议后补充URL实现具体资源的定位。当客户端(用户浏览器)与服务端(网站服务器)发生HTTP通讯时候(过程参见Cookie的实现),一些重要的信息都会包含其中:

请求信息(Request Message)

当客户端(用户浏览器)发出的请求时,会包括以下信息:

  • 请求行:声明请求方法和具体的请求地址;
  • 头(请求头,Headers),请求的相关信息;
  • 空行
  • 其他消息

常用请求方法

HTTP通讯也常包含有不同的方法,常用的方法有:

  • GET方法:向指定的资源发出“显示”请求。
  • POST方法:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。

状态码(Status Code)

当某个方法被请求之后,服务器会响应一个状态码。常用的状态码包括:

  • 200 OK(正常访问)
  • 301 Moved Permanently(永久迁移,永久重定向)
  • 302 Found(查找,暂时重定向)
  • 304 Not Modified(请求文件无修改)
  • 404 Not Found(未找到)
  • ……

可以看到,状态码是有分类原则的:

  • 1XX:临时响应;
  • 2XX:成功;
  • 3XX:已重定向;
  • 4XX:请求错误;
  • 5XX:服务器错误;

Google站长工具帮助文档也有这样一份HTTP 状态代码的说明。另外,W3有一个详细标准的HTTP/1.1 状态码列表

HTTPS

安全超文本传输协议,开头为 https:// 。

Google Analytics(Universal Analytics)请求

首先,当网页被加载到Google Analytics(Universal Analytics)跟踪代码的时候,跟踪代码会去向GA服务器请求analytics.js文件,当发现返回的文件与用户本地的一致的时候,则不会下载该文件。如果不一致,则会重新下载一个analytics.js文件。

这里我使用了Chrome浏览器开发者工具(当然,也可以使用Fiddler这类更强大的抓包工具)查看这个analytics.js的请求,我们可以看到:

[code lang=”js”]
Request URL:http://www.google-analytics.com/analytics.js
Request Method:GET
Status Code:304 Not Modified
[/code]

这样就表示:

  • 请求URL(Request URL)是analytics.js的地址;
  • 请求方法(Request Method)是GET;
  • 状态码:304 Not Modified(未修改)

注意:这里的文件比较不是仅比较文件,会先比较请求地址,然后再比较文件,因此,当Google Analytics被部署到越多网站的时候,意味着大多数用户都不需要重新下载这个文件。而如果你部署一个本地版(网站服务器)的analytics.js,就意味着您网站的用户很可能需要新下载这个文件。

紧接着,当下载完analytics.js和收集完跟踪数据之后,Google Analytics会向GA服务器发送数据收集的请求:

[code lang=”js”]
Request URL:http://www.google-analytics.com/collect?v=1&_v=j11&a=800631110&t=pageview&_s=1&dl=http%3A%2F%2Fwww.abbo.cn%2Ftest.html&dr=&ul=zh-cn&de=UTF-8&dt=JavaScript%20%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD&sd=32-bit&sr=1920×1080&vp=1920×913&je=1&fl=11.8%20r800&_utma=199317630.1953204040.1373639607.1373643235.1373643241.5&_utmz=199317630.1373643241.5.5.utmcsr%3Dgoogle%7Cutmccn%3Dhot%7Cutmcmd%3Dcps&_utmht=1375878643647&_u=MACC~&cid=1172761150.1374069301&tid=UA-41464639-1&z=40436446
Request Method:GET
Status Code:200 OK
[/code]

这就是Google Analytics(Universal Analytics)数据收集请求,OMG!请求URL怎么会这么长?我们将请求URL格式化一下,提取其中的查询参数(QueryString):

[code lang=”js”]
v:1
_v:j11
a:800631110
t:pageview
_s:1
dl:http://www.abbo.cn/test.html
dr:
ul:zh-cn
de:UTF-8
dt:JavaScript
sd:32-bit
sr:1920×1080
vp:1920×913
je:1
fl:11.8 r800
_utma:199317630.1953204040.1373639607.1373643235.1373643241.5
_utmz:199317630.1373643241.5.5.utmcsr=google|utmccn=hot|utmcmd=cps
_utmht:1375878643647
_u:MACC~
cid:1172761150.1374069301
tid:UA-41464639-1
z:40436446
[/code]

对头,Google Analytics(其他统计工具也大体类似原理)通过向GA服务器上一个35B的gif文件发出一个请求,然后将在网页上统计到的数据都写在请求URL的查询参数(QueryString)中了。这样一来,GA服务器则会收到带有统计信息的请求日志了。

最终,GA服务器通过分析这些日志,处理完写入到数据库,再由数据接口读出来,便成了我们从Google Analytics中看到的数据报告了!

参考资料:

5 对 “网站分析的HTTP”的想法;

  1. Pingback: 网站分析的HTTP

发表评论

您的电子邮箱地址不会被公开。