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 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2767
来自专栏落花落雨不落叶

canvas画简单电路图

80611
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

8318
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2886
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2712
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2955
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2810
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4355
来自专栏跟着阿笨一起玩NET

c#实现打印功能

3562
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3575

扫码关注云+社区