本文探讨了Debug Headers的常见优点,所能提供的信息,为CDN调试的相关内容提供全面指导。

文 / Eric Klein

翻译 / John

原文

https://medium.com/disney-streaming/the-cdn-edge-debug-headers-can-be-your-best-friend-af06cfd9f2db

Debug Headers背景

在之前的一篇文章中,我们讨论了如何读取可能随HTTP响应返回的基本HTTP消息头,以及这些消息头是如何影响缓存的。为了能有效地帮助我们了解在不同内容分发网络(CDN)世界中缓存对象的位置以及如何实现缓存,这些只是其中的第一个构建块。若想透彻了解CDN中发生的一切,真正关键在于熟练掌握调试头文件。

这些方便的工具可让您充分利用Content Delivery Network的每项特性,虽然其中一些调试头文件十分容易在每个请求上被发布,但某些CDN只有在一些特定请求头文件存在时才会附加一部分调试头文件。为了安全起见,CDN有时甚至需要额外的请求头文件、自定义密钥与请求一起传递,以便确保合适的调试头文件被接收。

尽管最终接收的这些调试头文件相对来说较为简单,但响应中信息返回所需要的实际解释可能会为开发者带来不小的挑战。在某些情况下,开发者需要详细参考CDN指南,这些指南详尽阐述了每个标题的含义。在其他情况下,单个字符可能提供大量数据,这些数据只能通过Internet规范加以解释。

在本篇文章中,我将探讨这些调试头文件的常见优点,其所能提供的信息以及解释这些数据的最佳思路。尽管我们会在本文中关注Apache Traffic Server的调试头文件,但这不影响我们提供指向某些CDN的链接并讨论他们自己的调试头文件,以便为CDN调试的所有相关内容提供全面指导。

Debug Header示例

通过在对象请求中显示“X-Debug”,Apache Traffic Server(当使用适当的软件包进行设置时)将响应一部分庞大的基于调试的选项。传统意义上,这些选项包括一些有助于调试请求的关键信息元素。这些变量包括:缓存状态和缓存位置、事务ID、缓存密钥等。

缓存状态和位置 - 缓存状态和位置通常由“X-Cache”标头中包含的响应显示。在这里,开发者将收到有关对象缓存状态的信息以及该对象的位置(对于多层内容传送网络)。缓存状态的值通常包括:

  • Miss - 对象不在缓存中。这通常意味着系统通过不断返回原点来检索有用的东西来服务对象。

  • Hit-Stale - Cache中的对象,但需要对目标对象进行新鲜度检查。通常在304请求之前验证对象的新鲜度。

  • Hit-Fresh - 缓存中的对象,从缓存中提供服务。

  • Skipped - 缓存查找被跳过。如果配置定义了缓存旁路,通常会执行此操作。

“X-Cache”响应中的附加信息是使用上述缓存信息进行响应的服务器的名称。通过在同一个响应头中附加多个响应,CDN通常能够呈现一个对象的整个请求流。

例如,下面的响应将指示对象不在第一位置的高速缓存中;位于第二个位置的高速缓存中的对象是过时的,而在第三个位置的高速缓存中是新的。

【X-Cache:Miss  server01.ats.lga.foo.com ; Hit-Stale  server03.ats.lga.foo.com ; Hit-Fresh  server01.ats.yyz.foo.com 】

作为此调试头的结果,您可以通过CDN查看这个对象的流程,并了解事件对您的个人请求的影响。最终数据在位于多伦多(YYZ)节点的父级缓存中进行处理。

Transaction ID - 由“X-Transaction-ID”指定,该值通常提供一个唯一的字符串,用于识别日志中的事务。这样就可以追溯分析请求,以准确地追踪单个资产的特定请求。在尝试确定特定对象在整个CDN工作流程中的行为方式以及诊断配置可能出现的任何问题时,此功能非常有用。

Cache Key - 缓存键可能是您可以评估的最有用的调试头。通过所提供的CDN解释和缓存对象的确切方式,您可以查看事件是否根据特定的请求进行了适当的配置。

例如,假设您正在从可缓存对象中删除查询字符串以提高缓存效率。虽然对该对象的请求可能是 http://www.bar.com/page/uri.jpg?123456 ,但从缓存键中删除查询参数应该会导致与x-cache-key头不同的响应。在这种情况下,缓存键应该是:

【X-Cache-Key: origin.bar.com/page/uri.jpg 】

如果您有一个更复杂的设置,X-Cache-Key也可为您带来帮助。假设您正在使用不同的字符串匹配来替换对象中的路径。通过查看缓存键您可以确保路径替换按照预期进行,从而确保针对此特定设置请求的任何资源请求流程顺畅。

这种情况的一个示例是,如果您的配置调用的是上面URI中的/page/,则在请求返回到原点时将其剥离,并用/home/替换。在这种情况下,X-Cache-Key响应如下所示:

【X-Cache-Key: origin.bar.com/home/uri.jpg 】

随着正则表达式配置和高级选项的复杂性的增加,X-Cache-Key特性成为确保CDN正确处理对象的关键因素。

有关Debug Headers的更多信息

CDN调试头的用途和种类很多。每个CDN的独特之处使得记忆这些选项和解释变得困难。

虽然有企业正在致力于将这些更好地标准化这些请求和选项,但作为CDNi在互联网工程任务组工作的一部分,这些头文件在多个不同平台上的成熟度仍旧为内容交付专家留下了一个杂乱无章的选项。

为了更好地指导您使用这些响应头文件,下面是许多流行的商业内容交付网络的示例。

  • Akamai Pragma Headers: 

    https://community.akamai.com/customers/s/article/Using-Akamai-Pragma-headers-to-investigate-or-troubleshoot-Akamai-content-delivery?language=en_US

  • Fastly Debug Headers:

    https://support.fastly.com/hc/en-us/community/posts/360040167211-Deciphering-Fastly-Debug-header

  • Limelight Debug Headers:

    https://slideplayer.com/slide/3116110/

  • Catchpoint blog:

    http://blog.catchpoint.com/2017/02/27/debugging-cdns-need-change/

LiveVideoStack  招募

LiveVideoStack正在招募编辑/记者/运营,与全球顶尖多媒及技术专家和LiveVideoStack年轻的伙伴一起,推动多媒体技术生态发展。了解岗位信息请在BOSS直聘上搜索“LiveVideoStack”,或通过微信“Tony_Bao_”与主编包研交流。

点击【阅读原文】或扫描图中二维码,即刻了解更多大会讲师及分享内容信息!

CDN调试—Debug Headers相关推荐

  1. Tensorflow之调试(Debug) tf.py_func()

    Tensorflow之调试(Debug)及打印变量 tensorflow调试tfdbg 几种常用方法: 1.通过Session.run()获取变量的值 2.利用Tensorboard查看一些可视化统计 ...

  2. 利用VSCode阅读OpenFOAM源代码及其调试Debug【终极总结篇】

    利用VSCode阅读OpenFOAM源代码及其调试Debug[终极总结篇] 1. 本文总结了Win10系统中利用VSCode连接wsl或远程服务器,阅读OF源代码及其调试Debug的方法(不仅适用于W ...

  3. C++ 学习之旅(4)——调试Debug

    调试Debug程序,首先应该确保处于Debug模式而不是Release模式下,因为后者会优化你的程序,也就是对你的程序作出了改变,这样你很难找出问题所在. 我们有以下的文件: Log.h #pragm ...

  4. 断点调试 debug模式 1006

    断点调试 debug模式 1006 打断点 在需要监视的位置打断点 调试 F5可以开启调试 或者 调试>启动调试 视频 演练调试模式 c sharp 1006 - 西瓜视频 https://ww ...

  5. 一个简单的Eclipse调试Debug流程(四)

    本文链接:https://blog.csdn.net/u011781521/article/details/55000066    http://blog.csdn.net/u010075335/ar ...

  6. eclipse调试debug时出现source not found

    eclipse调试debug时出现source not found 在代码中设置了断点,程序调试过程中可以继续运行使用断点,但是看不见程序走到哪了,debug页面出现source not found, ...

  7. Eclipse 断点调试(Debug), 使用方法

    1.问题:Java学习中,使用Eclipse时,会遇到各种各样的问题,对内部底层的运行,或运行顺序不同,会导致不能真正理解,灵活运用. 使用debug断点调试,可以完成,程序每一步一步是怎么样运行的, ...

  8. python初级8(buffering:缓冲区,encoding,文本操作,写入,文件指针,with关键字,调试 debug)

    buffering:缓冲区 buffering= -1 t和b都是io.DEFAULT_BUFFER_SIZE buffering=0 二进制模式 关闭缓冲区,文本模式不支持 buffering=1 ...

  9. # Idea 调试 Debug 技巧

    Idea 调试 Debug 技巧 IDEA 为我们提供了很多简单且非常强大的调试功能 在需要调试的行打上断点,debugger 方式启动Idea 控制台如下 调试功能说明 Show Execution ...

最新文章

  1. 手把手教你用Python模拟登录淘宝
  2. 【学习笔记】超简单的多项式开方
  3. mysql带where条件导出数据表以及部分错误解析
  4. SpringMvc多视图整合(jsp、velocity、freemarker)
  5. 基于pygtk的linux有道词典
  6. LF AI Day中国站火热报名中
  7. MySQL多项模糊查询
  8. 【Redis】Redis Jedis实现发布订阅功能
  9. 平凡函数依赖是什么?
  10. 计算机的英语对话,英语口语对话:谈论电脑
  11. ES6 面向对象编程
  12. c语言串逐位和 思路,蓝桥杯c语言练习题答案.doc
  13. Louvain 算法的核心思路以及数据结构(最完善版)
  14. Dungeon Game
  15. 面对5400万抑郁症患者,这600位志愿者“树洞”打算用AI拯救他们
  16. Olympic Class Ships【奥林匹克级邮轮】
  17. Kubernetes(k8s)的Secret以密文的方式存储数据
  18. LocalDateTime获取月第一天最后一天和年的第一天和最后一天获取周的第一天和最后一天,上周的第一天和最后一天
  19. [vue] Vuex中四个map方法的使用 mapState mapGetters mapActions mapMutations
  20. JavaScript中的name和classname有什么区别

热门文章

  1. 现代浏览器的工作原理
  2. 张首晟:量子计算、人工智能与区块链
  3. WebView与JavaScript交互
  4. 解决 SQLSERVER 2008 无法删除作业
  5. CentOS Linux防火墙配置及关闭
  6. 数据结构-线性表(栈与队列的特殊性)
  7. 洛谷 - P3246 [HNOI2016]序列(莫队+单调栈)
  8. CodeForces - 1408D Searchlights(思维)
  9. npoi 删除多行 操作excel_NPOI操作excel 2007/2010版本
  10. pandas 季度_pandas_时间序列和常用操作