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 删除。

编辑于

张小波的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序猿

Burp Suite第十九节: 使用Burp, Sqlmap进行自动化SQL注入渗透测试

在OWSAP Top 10中,注入型漏洞是排在第一位的,而在注入型漏洞中,SQL注入是远比命令行注入、Xpath注入、Ldap注入更常见。这就是...

32910
来自专栏小白课代表

编程 | 计算机等级考试——VC++2010 Express学习版

1612
来自专栏木头编程 - moTzxx

ThinkCMF 初次见面/折腾一下

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

802
来自专栏电光石火

Emlog博客系统IIS 7/8伪静态

最近在论坛看到很多朋友的主机系统升级到IIS7或IIS8,所以伪静态规则不能用以前IIS6的。其实前一两年,很多国外的空间就升级到WIN2008,那时我有个网站...

1908
来自专栏北京马哥教育

小白学Python | 最简单的Django 简明教程

? 一、Django简介 1. web框架介绍 具体介绍Django之前,必须先介绍WEB框架等概念。 web框架: 别人已经设定好的一个web网站模板,你学...

3497
来自专栏FreeBuf

基于Github的源码白盒扫描工具Raptor

Raptor(猛禽)是一款基于WEB界面的github源代码扫描器。你只需要给它一个Github repository的URL地址,它就能进行自动扫描。 简单介...

2677
来自专栏Youngxj

AE博客原创 | 开源的短网址程序Myurl

1202
来自专栏听雨堂

PowerPoint发布及链接图片的处理

        用PPT做了一个纯播放类的课件,希望发布到CD上,首先想到的是打包,找到一个PowerPoint Slide Show Converter的程序...

1718
来自专栏小白课代表

录制屏幕?有它就够了。

对于玩电脑很多的人来说,截屏、gif录制、屏幕录制三大功能几乎是不可避免的。今天就给大家介绍一款屏幕录制工具——Bandicam。相比于屏幕录制专家和kk录制等...

502
来自专栏FreeBuf

Neto:一款分析浏览器插件的专业安全工具

Neto项目采用Python 3开发,可用于寻找和分析热门浏览器(例如Firefox和Chrome)插件及扩展的隐藏特性。它可以自动化实现对数据包文件的解压操作...

653

扫码关注云+社区