前言
几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要。比如:跟踪使用情况,安全性,计费,错误检测,等等。
记录内容
大多数情况下,日志的记录出于两种原因:查找服务器或代理存在的问题(比如,哪些请求失败了),或者是生成Web站点访问方式的统计信息。统计数据对市场营销,计费和容量规划(比如,决定是否需要增加服务器或带宽)都非常有用。
通常,只记录事务的基本信息就行了。通常会记录下来的几个字段示例为:
- HTTP 方法
- 客户端和服务器的HTTP版本
- 所请求资源的URL
- 相应的状态码
- 请求和响应报文的尺寸(包含所有的实体主体部分)
- 事务开始的时间戳
- Referer 首部和 User-Agent 首部的值
HTTP方法和URL说明了请求试图做些什么,比如,GET某个资源或POST某个订单。可以用URL来记录Web站点上页面的受欢迎程度。
版本字符串给出了与客户端和服务器有关的一些提示,在客户端和服务器之间出现的一些比较奇怪或非预期的交互动作时,它会非常有用。比如,如果请求的失败率高于预期,那版本信息指向的可能是一个无法与服务器进行交互的新版浏览器。
HTTP状态码说明了请求的执行状况:是否成功执行,认证请求是否失败,资源是否找到等。
请求/响应的大小和时间戳主要用于记账;就是记录流入,流出或流径应用程序的字节有多少。还可用时间戳将观察到的问题与当时发起的一些请求关联起来。
命中率测量
原始服务器通常会出于计费的目的保留详细的日志记录。内容提供者需要知道URL的受访频率,广告商需要知道广告的出现频率,网站作者需要知道所编写内容的受欢迎程度。客户端直接访问Web服务器时,日志记录可以很好的跟踪这些信息。
但是,缓存服务器位于客户端和服务器之间,用于防止服务器同时处理大量访问请求(这正是缓存的目的)。缓存要处理很多HTTP请求,并在不访问原始服务器的情况下满足它们的请求,服务器中没有客户端访问其内容的记录,导致日志文件中出现遗漏。
由于日志记录会遗失,所以,内容提供者会将其最重要的页面进行缓存清除。缓存清除是指内容提供者有意将其某些内容设置为无法缓存,这样,所有对此内容的请求都会被导向原始服务器。于是,原始服务器就可以记录下访问情况了。不使用缓存可能会生成更好的日志,但会减缓原始服务器和网络的请求速度,并增加负荷。
由于代理缓存(及一些客户端)都会保留自己的日志,所以如果服务器能够访问这些日志(或者至少有一种错略的方式可以判断代理缓存会以怎样的频率提供其内容),就可以避免使用缓存清除。命中率测量协议是对HTTP的一种扩展,它为这个问题提供了一种解决方案。命中率测量协议要求缓存周期性的向原始服务器汇报缓存访问的统计数据。
关于隐私的考虑
日志记录实际上就是服务器和代理执行的一项管理功能,所以整个操作系统对用户来说都是透明的。通常,用户甚至都不清楚他们的HTTP事务已被记录,实际上,很多用户可能甚至都不知道它们访问Web上的内容是在使用HTTP协议。
Web应用程序的开发者和管理者要清楚跟踪用户的HTTP事务可能带来的影响。他可以根据获取的信息收集很多有关用户的情况。很显然,这些信息可以用于不良目的,歧视,骚然,勒索等。进行日志记录的Web服务器和代理一定要注意保护其终端用户的隐私。