Web请求过程
一、B/S网络架构概述
B/S网络架构基于统一的应用层协议 HTTP来交互数据,与大多数的传统 C/S互联网应用程序采用的长连接的交互模式不同,HTTP采用无状态的短连接的通信方式。一次请求就完成一次数据交互,然后通信就断开。采用这种方式能够同时服务更多的用户,因为当前互联网应用每天都会处理上亿的用户请求,不可能每个用户访问一次后就一直保持这个链接。B/S架构设计如下:既要满足海量用户的访问请求,又要保持用户请求的快速响应。(当浏览器解析服务器返回的数据时,会发现还有一些静态资源,如:CSS/JS/imager等时又会发起另外的 HTTP请求,而这些请求很可能会在CDN上,那么 CDN服务器又会处理这个用户的请求)
二、浏览器缓存机制
开发过程中,为了防止缓存问题。一般会按Ctrl+F5组合键重新请求页面,此时浏览器会直接向目标URL发送请求,不会使用浏览器缓存数据;其次即使请求发送到服务端,也有可能访问到的是缓存数据,比如:应用服务器的前端部署一个缓存服务器,如Varnish代理,那么Varnish也可能直接使用缓存数据。所以为了保证用户能够看到最新的数据,必须通过HTTP来控制。
当我们使用Ctrl+F5组合键刷新一个页面时,在HTTP的请求头中会增加一些请求头信息,它告诉服务端我们要获取最新的数据而不是缓存。(新增了Cache-Control和Pragma两个字段)
Cache-Control/Pragma:这个HTTP Head 字段用于指定所有缓存机制在整个请求头/响应链中必须服从的命令,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器。HTTP Head字段有一些可选值。
可选值 | 说明 |
Public | 所有内容都被缓存,在响应头中设置。 |
Private | 内容只缓存到私有缓存,在响应头中设置。 |
no-cache | 所有内容都不会被缓存,在请求头中设置。 |
no-store | 所有内容都不会被缓存到缓存或Internet临时文件中,在响应头中设置。 |
must-revalidation/proxy-revalidation | 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证,在请求头中设置。 |
max-age=xxx | 缓存内容在xxx秒后失效,在响应头中设置。 |
● Cache-Control请求字段被各个浏览器支持得较好,而且它的优先级也比较高,它和其他一些请求字段(如Expires)同时出现时,Cache-Control会覆盖其他字段。
● Pragma字段的作用和Cache-Control有点类似,它也是在HTTP头中包含一个特殊的指令,使相关服务器遵守该指令,最常用的就是Pragma:no-cache,它和Cache_Control:no-cache的作用是一样的。
三、DNS域名解析
一旦DNS解析出错,可能会导致非常严重的互联网灾难。目前世界上整个互联网就有几个DNS根域名服务器,任何一台服务器坏掉,后果都会非常严重。DNS域名解析的主要请求过程实例图:
四、CDN工作机制
CDN也就是内容分布网络(Content Delivery Network),它是构筑在现有Internet上的一种先进的流量分配网络。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
目前CDN都以缓存网站中的静态数据为主,如CSS、JS、图片和静态页面等数据。用户在从主站服务器请求到动态内容后,再从CDN上下载静态资源,从而加速网页数据内容的下载速度,如淘宝90%以上的数据都是有CDN来提供的。
通常来说CDN要达到一下几个目标:
● 可扩展(Scalability):性能可扩展性,应对新增的大量数据、用户和事务等具有扩展能力。成本可扩展:用低廉的运营成本提供动态的服务能力和高质量的内容服务。
● 安全性(Security):强调提供物理设备、网络、软件、数据和服务过程的安全性,减少因为DDos攻击或者其他恶意行为造成商业网站的业务中断。
● 可靠性、响应和执行(Reliablility、Responsiveness和Performance)。服务可用性指能够处理可能的故障和用户体验下降的问题,通过负载均衡及时提供网络的容错机制。
CDN架构图:
五、CDN动态加速
CDN的动态加速技术也是当前比较流行的一种优化技术,它的技术原理就是在CDN的DNS解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上回源,从而加速用户访问的效率。