1 深入web请求过程

B/S架构的好处

  1. 客户端使用统一的浏览器,没有平台限制
  2. 服务端基于统一的HTTP协议

 

B/S网络架构概述

当在浏览器中输入一个www.taobao.com这个URL时:

  1. 请求DNS将域名解析成对应的IP地址
  2. 根据这个IP地址找到对应的服务器发起一个get请求,服务器决定返回默认的数据资源给访问的用户
  3. 服务端更复杂的业务逻辑:
  1. 多台服务器需要做负载均衡来平均分配用户的请求
  2. 请求的数据存储在分布式缓存、静态文件、数据库中
  3. 浏览器解析静态资源(CSS/JS/图片)时CDN内容分发网络上请求

 

HTTP解析

 

浏览器缓存机制

  1. 获取最近数据采用Ctrl+F5来直接向URL发送请求,不会使用缓存数据
  2. 如果服务器端调用了缓存服务器,如Varnish,也可能直接使用缓存数据
  3. 为了保证看到最新数据采用HTTP请求头中加入Cache-Control:no-cache(HTTP1.1)和Prama:no-cache(HTTP1.0)两个参数来控制,浏览器和缓存代理服务器必须服从最新的数据

 

常用标志

Cache-Control: public

响应被缓存,并且在多用户间共享,  (公有缓存和私有缓存的区别,请看另一节

Cache-Control: private

响应只能作为私有缓存,不能在用户之间共享

Cache-Control:no-cache

提醒浏览器要从服务器提取文档进行验证

Cache-Control:no-store

绝对禁止缓存(用于机密,敏感文件)

Cache-Control: max-age=60

60秒之后缓存过期(相对时间)

Date: Mon, 19 Nov 2012 08:39:00 GMT

当前response发送的时间

Expires: Mon, 19 Nov 2012 08:40:01 GMT

缓存过期的时间(绝对时间)

Last-Modified: Mon, 19 Nov 2012 08:38:01 GMT

服务器端文件的最后修改时间

ETag: "20b1add7ec1cd1:0"

服务器端文件的Etag值

 

ETag是实体标签(EntityTag)的缩写, 根据实体内容生成的一段hash字符串(类似于MD5或者SHA1之后的结果),可以标识资源的状态。 当资源发送改变时,ETag也随之发生变化。

ETag是Web服务端产生的,然后发给浏览器客户端。浏览器客户端是不用关心Etag是如何产生的。

为什么使用ETag呢?主要是为了解决Last-Modified 无法解决的一些问题。

1.某些服务器不能精确得到文件的最后修改时间, 这样就无法通过最后修改时间来判断文件是否更新了。

2. 某些文件的修改非常频繁,在秒以下的时间内进行修改. Last-Modified只能精确到秒

3.一些文件的最后修改时间改变了,但是内容并未改变。 我们不希望客户端认为这个文件修改了。

 

DNS域名解析过程

  1. 浏览器检查缓存中有没有域名对应的IP地址,有解析过程结束。会有一个TTL时间来决定域名被缓存的时间限制。
  2. 查找操作系统host文件中有无对应域名解析
  3. 将这个域名发送给LDNS(本地区的域名服务器)
  4. 如果LDNS没有命中去Root Server域名服务器请求
  5. RootServer返回查询域 .com .cn. org主域名服务器gTLD国际顶级域名服务器(13台)
  6. 请求LDNS请求gTLD发送请求
  7. gTLD返回对应的NameServer域名服务器(即注册的域名服务提供商的服务器)
  8. NameServer根据域名找IP并返回IP和对应的TTL
  9. 返回并在LDNS上缓存这个IP和TTL

 

清除域名缓存

windowsipconfig /flushdns

linux        /etc/init.d/nscd restart

 

CDN工作机制

CDN内容分发网络,目的是通过现有的Internet将网站内容发布到最接近用户的网络边缘,是用户可以就近取得所需的内容,提高用户访问网站的响应速度。

CDN=镜像+缓存+整体负载均衡

 

CDN网络是在用户和服务器之间增加Cache层,将用于引导到Cache上获得源服务器的数据主要通过接管DNS实现

 

  1. 用户向浏览器提供要访问的域名
  2. 浏览器调用域名解析库获得CNAME该网站的别名(CDN提供商的域名),浏览器对CNAME解析IP;再次过程中使用全局负载均衡DNS解析,根据地理位置信息解析对应的IP地址保证就近访问。
  3. 浏览器得到IP之后向缓存服务器发送请求
  4. 缓存服务器根据浏览器要访问的域名通过Cache内部专用DNS解析到此域名实际的IP地址,再由缓存服务器向次此IP地址提交访问请求;
  5. 缓存服务器得到数据之后,A.本地缓存一份,以备下次使用,B. 将数据返回给客户端
  6. 客户端收到数据显示出来。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值