前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CDN 学习中的一点小思考

CDN 学习中的一点小思考

原创
作者头像
张小波
修改2017-06-19 18:59:32
3.7K0
修改2017-06-19 18:59:32
举报
文章被收录于专栏:云之翼云之翼

背景描述

由于刚进部门,部门基本每个项目都需要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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景描述
  • 问题回顾
  • 思考过程
相关产品与服务
内容分发网络 CDN
内容分发网络(Content Delivery Network,CDN)通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容,避免因网络拥堵、跨运营商、跨地域、跨境等因素带来的网络不稳定、访问延迟高等问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档