5月阅读周·HTTP权威指南:日志记录与使用情况跟踪之记录内容篇

举报
叶一一 发表于 2025/05/21 22:50:59 2025/05/21
【摘要】 引言HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不...

引言

HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案。HTTP有很多应用,但最著名的是用于Web浏览器和Web服务器之间的双工通信。

《HTTP权威指南》一书将HTTP中一些互相关联且常被误解的规则梳理清楚,并编写了一系列基于各种主题的章节介绍HTTP各方面的特性。纵观全书,对HTTP“为什么”这样做进行了详细的解释,而不仅仅停留在它是“怎么做”的。此外,这本书还介绍了很多HTTP应用程序正常工作所必需且重要的非HTTP技术。

这本书主要包括以下内容:

  • 第一部分描述了Web的基础构件与HTTP的核心技术
  • 第二部分重点介绍了Web系统的结构构造块:HTTP服务器、代理、缓存、网关以及机器人应用程序。
  • 第三部分提供了一套用于追踪身份、增强安全性以及控制内容访问的技术和技巧。
  • 第四部分涵盖HTTP报文主体和Web标准,前者包含实际内容,后者描述并处理主体内容。
  • 第五部分介绍了发布和传播Web内容的技巧。
  • 第六部分是一些很有用的参考附录,以及相关技术的教程。

日志记录与使用情况跟踪

记录内容

大多数情况下,日志的记录出于两种原因:查找服务器或代理中存在的问题(比如,哪些请求失败了),或者是生成Web站点访问方式的统计信息。统计数据对市场营销、计费和容量规划(比如,决定是否需要增加服务器或带宽)都非常有用。可以把一个HTTP事务中所有的首部都记录下来,但对每天要处理数百万个事务的服务器和代理来说,这些数据的体积超大,很快就会失控。不应该记录实际上你并不感兴趣,甚至从来都不会去看一眼的数据。通常,只记录事务的基本信息就行了。通常会记录下来的几个字段示例为:· HTTP方法;· 客户端和服务器的HTTP版本;· 所请求资源的URL;· 响应的HTTP状态码;· 请求和响应报文的尺寸(包含所有的实体主体部分);· 事务开始时的时间戳;· Referer首部和User-Agent首部的值

HTTP方法和URL说明了请求试图做些什么——比如,GET某个资源或POST某个定单。可以用URL来记录Web站点上页面的受欢迎程度。版本字符串给出了与客户端和服务器有关的一些提示,在客户端和服务器之间出现一些比较奇怪或非预期的交互动作时,它会非常有用。比如,如果请求的失败率高于预期,那版本信息指向的可能是一个无法与服务器进行交互的新版浏览器。HTTP状态码说明了请求的执行状况:是否成功执行,认证请求是否失败,资源是否找到等(HTTP状态码列表参见3.2.2节)。请求/响应的大小和时间戳主要用于记账;就是记录流入、流出或流经应用程序的字节有多少。还可用时间戳将观察到的问题与当时发起的一些请求关联起来。

命中率测量

原始服务器通常会出于计费的目的保留详细的日志记录。内容提供者需要知道URL的受访频率,广告商需要知道广告的出现频率,网站作者需要知道所编写的内容的受欢迎程度。客户端直接访问Web服务器时,日志记录可以很好地跟踪这些信息。但是,缓存服务器位于客户端和服务器之间,用于防止服务器同时处理大量访问请求[插图](这正是缓存的目的)。缓存要处理很多HTTP请求,并在不访问原始服务器的情况下满足它们的请求,服务器中没有客户端访问其内容的记录,导致日志文件中出现遗漏。由于日志数据会遗失,所以,内容提供者会对其最重要的页面进行缓存清除(cache bust)。缓存清除是指内容提供者有意将某些内容设置为无法缓存,这样,所有对此内容的请求都会被导向原始服务器。[插图]于是,原始服务器就可以记录下访问情况了。不使用缓存可能会生成更好的日志,但会减缓原始服务器和网络的请求速度,并增加其负荷。

由于代理缓存(及一些客户端)都会保留自己的日志,所以如果服务器能够访问这些日志(或者至少有一种粗略的方式可以判断代理缓存会以怎样的频率提供其内容),就可以避免使用缓存清除。命中率测量协议是对HTTP的一种扩展,它为这个问题提供了一种解决方案。命中率测量协议要求缓存周期性地向原始服务器汇报缓存访问的统计数据。RFC 2227详细定义了命中率测量协议。

概述

命中率测量协议定义了一种HTTP扩展,它提供了一些基本的功能,缓存和服务器可以实现这些功能来共享访问信息,规范已缓存资源的可使用次数。缓存给日志访问带来了问题,命中率测量并不是这个问题的完整解决方案,但它确实提供了一种基本方式,以获取服务器希望跟踪的度量值。命中率测量协议并没有(而且可能永远都不会)得到广泛的实现或应用。也就是说,在维护缓存性能增益的同时,像命中率测量这样的合作方案会给出一些提供精确访问统计信息的承诺。希望这会推动命中率测量协议的实现,而不是把内容标记为不可缓存的。

Meter首部

命中率测量扩展建议使用新增加的首部Meter,缓存和服务器可以通过它在相互间传输与用法和报告有关的指令,这与用来进行缓存指令交换的Cache-Control首部很类似。

给出了一个执行中的命中率测量实例。事务的第一部分就是客户端和代理缓存之间一个普通的HTTP事务,但在代理请求中,要注意有插入的Meter首部和来自服务器的响应。这里,代理正在通知服务器它可以进行命中率测量,作为回应,服务器则请求代理报告它的命中次数。

从客户端的角度来看,请求正常结束了,代理开始代表服务器跟踪该请求资源的命中次数。稍后,代理会尝试与服务器再次验证资源。代理会在发送给服务器的条件请求中嵌入它跟踪记录的计量信息。

关于隐私的考虑

日志记录实际上就是服务器和代理执行的一项管理功能,所以整个操作对用户来说都是透明的。通常,用户甚至都不清楚他们的HTTP事务已被记录——实际上,很多用户可能甚至都不知道他们访问Web上的内容时是在使用HTTP协议。Web应用程序的开发者和管理者要清楚跟踪用户的HTTP事务可能带来的影响。他可以根据获取的信息收集很多有关用户的情况。很显然,这些信息可以用于不良目的——歧视、骚扰、勒索等。进行日志记录的Web服务器和代理一定要注意保护其终端用户的隐私。有些情况下,比如在工作环境中,跟踪某用户的使用情况以确保他没有偷懒是可行的,但管理员也应该将监视大家事务处理的事情公之于众。简单来说,日志记录对管理者和开发者来说都是很有用的工具。只是要清楚在没有获得用户许可,或在其不知情的情况下,使用记录其行为的日志可能会存在侵犯隐私的问题。

总结

几乎所有的服务器和代理都会记录下它们所处理的HTTP事务摘要。这么做出于一系列的原因:跟踪使用情况、安全性、计费、错误检测,等等。

日志记录,研究了通常会记录HTTP事务哪些方面的信息以及一些常见日志格式中所包含的内容。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。