CDN 学习中的一点小思考

背景描述

由于刚进部门,部门基本每个项目都需要CDN,以前自己对CDN基本没怎么了解,但是有一定Web开发的基础。在学习CDN的过程中,结合自己的经验,对遇到的几个问题刨根揪底,好好掰扯掰扯。

问题回顾

首先,借用腾讯云CDN官网中的一个图片,来解释一下CDN的基本流程和原理,这两张图对CDN是什么解释的非常清楚。但是CDN学习的过程中又会涉及到很多的概念,会让初学者很困惑。下面逐个掰扯掰扯。

1)最困惑的莫过于回源host,回源Host怎么影响用户的访问和CDN的行为。

2)源站,域名,回源host又是什么关系。

3)如何进行基本的CDN测试和信息查看。

思考过程

在介绍回源host之前,根据自己的理解,来介绍一下用户通过域名访问或者下载(基于http协议)的一段主要行为和动作:

如上图所示,用户在浏览器中敲入www.abc.com/xxx?a=b以后,会发生哪些行为,涉及哪些动作,跟我们介绍的CDN有什么关系,跟腾讯云上的服务又有哪些关系?

1)首先用户输入网址后,按下回车,浏览器经过内核处理后,会构建http请求(忽略前面的DNS解析过程),以如下http请求为例,可以看到请求的URL,Method,Host,Content-Type等参数。其中Host代表请求的资源真实所在的位置。Host在Htttp协议中是必带的,否则返回4xx bad request(参见RFC2616 14.23小节,参考https://www.ietf.org/rfc/rfc2616.txt).

2)用户将请求发送到对应的远端Http服务器上,现在业界用的最常见的是apache,nigx等,apache/nginx服务监听本机的端口(可配置),接受请求,解析静态文件,包括html,链接的css,jpg图片,动画等等。这里的静态文件,我理解CDN加速类型中对应的静态加速是对他们的加速。举个简单的例子,取一个相对简单的网页源代码为例,在html link rel和href甚至script指定的有很多需要加载的静态资源。

3)同时用户的部分动态业务请求,例如的jsp,php等代码会到后台对应的模块去处理,以我有限的知识,以前我大学时间用的比较多的是tomcat。tomcat基于servlet规范实现,会处理动态请求,例如数据库操作等等,然后将请求转发到后端的业务逻辑,甚至数据库,然后将结果返回以html返回给http服务器->浏览器。

4)后面的几步不讨论了,与今天讨论的无关。

今天要讨论回源host,源站,加速域名到底是什么,刚开始这个概念一直没搞清楚,看看腾讯云官网的文档介绍:

1.先看看回源host是指什么:

回源host是CDN回源的时候,http请求中host字段指定的地址。那么Host字段又是干什么用的呢?在baidu里面很多地方说的不清不楚,还是看看Http RFC2616里面怎么给出官方的说法:

如上红框中的说明,Host是指请求到达一个服务器或者网关(CGI?)后,用来区分内部的多个URL,例如在同一个IP地址根目录下代表多个host名称的目录,具体是指哪一个。

上面说得可能也比较拗口,那我们拿一个具体的遵循http规范的服务器实例来看看到底怎么回事,以apache为例,如下图所示,apache的virtualhost配置,可以支持同一个地址下配置多个virtual host,每个都有对应的server name,以及对应的访问目录。例如如果host为www.example.com,那么请求会转发到100.10.10.10下的example1路径。

apache virtualhost配置,参见:https://httpd.apache.org/docs/2.4/vhosts/examples.html

到这里,我们就能回源host是什么了。

那源站又是什么呢?实际上从上图可以看出,如果回源,只是指定了在回源站点上最终访问的host(或者目录),那具体是哪个站点(哪个IP)下面的目录呢。这个时候,就需要通过源站的配置来获得了,如果直接是IP,那就是对应IP服务器。如果源站配置的是域名,那么会先将源站域名,通过DNS解析,获得真实的IP地址,在到该IP地址的站点下面,寻找对应的host(目录)。

顺便再来说一下自己对curl这个命令的理解吧,如下curl命令模仿http请求,通过-H选项,强制将http host请求包头设置为指定的host如下图所示,由于在进行CDN的配置,前面的https请求中的IP地址是一个CDN OC的地址,结果返回为202 OK,表示在CDN请求可以返回结果,已经成功缓存源站的数据。

既然CDN节点中,已经存在缓存的资源,那么通过加速域名访问,真实的结果是什么:

网上对这几个字段解释如下,还待详细学习:

X-Cache-Lookup:Hit From MemCache 表示命中CDN节点的内存

X-Cache-Lookup:Hit From Disktank 表示命中CDN节点的磁盘

X-Cache-Lookup:Hit From Upstream 表示没有命中CDN

注:如上仅是个人理解,如果有误,欢迎各位指正,谢谢

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏BestSDK

Python开发必备的6个库,有了它事半功倍!

01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python ...

3308
来自专栏lestat's blog

vps使用google的bbr脚本加速

2997
来自专栏开源项目

码云推荐 | J2EE 快速开发平台 renren-security-boot

renren-security-boot 是一款基于代码生成器的 J2EE 快速开发平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展;使用 Spring...

3298
来自专栏企鹅号快讯

专为渗透测试人员设计的 Python 工具大合集

如果你对漏洞挖掘、逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言。Python不仅语法简单上手容易,而且它还有大量功能强大的库和...

2048
来自专栏FreeBuf

Windows 10 S中的Device Guard详解(上篇)

本文探讨Windows 10 S(下称Win10S)中的Device Guard(设备保护,下称DG)。我将提取策略,并弄清楚在默认Win10S系统上可以和不可...

36611
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用wrk对HTTP延迟进行基准测试

本文重点介绍称为开源HTTP基准测试工具WRK,它可以在高负荷下测量HTTP服务的延迟。

1900
来自专栏张戈的专栏

借助PageSpeed,为Nginx网站服务器提速

网站加载速度越快,访客互动性、留住率和转换率就越高,这早已不是什么秘密。网站每延迟 100 毫秒,亚马逊的销售额就会减少 1%;延迟增加 500 毫秒,这意味着...

3487
来自专栏Python中文社区

一个多线程知乎用户爬虫的实现

專 欄 ❈默然,Python中文社区专栏作者。 博客:https://www.zhihu.com/people/moranzcw GitHub:https:/...

2275
来自专栏非著名程序员

你可能不知道的10款Android开发辅助工具

1XAppDbg XAppDbg是一个可以在运行中改变代码中参数的一个应用开发工具。这个工具可以为你省下大量的时间,因为你不用为应用的每次小改变而重新编译运行你...

1827
来自专栏大史住在大前端

webpack4.0各个击破(4)—— Javascript & splitChunk

javascript之所以需要打包合并,是因为模块化开发的存在。开发阶段我们需要将js文件分开写在很多零碎的文件中,方便调试和修改,但如果就这样上线,那首页的h...

933

扫码关注云+社区