深入Web请求过程

深入Web请求过程

学习《深入分析Java Web技术内幕》第1章的笔记

浏览器输入URL发生的操作

  1. 域名解析:DNS服务把域名解析为IP地址
  2. 向找到IP地址的服务器发送一个get请求
  3. 服务器返回默认的数据资源给访问的用户
  4. 注意事项
    • 服务器可能有多台,需要通过负载均衡来确定哪一台服务器来接受请求
    • 请求数据可能储存在分布式缓存/静态文件/数据库
    • 当数据返回给浏览器时,浏览器解析数据发现有一些静态资源(CSS,JS,IMG…)时又会发起另外的HTTP请求,而这些静态资源很可能在CDN上,于是CDN服务器来处理这个用户请求

浏览器缓存机制

  1. 在浏览器端按Ctrl+F5组合键,浏览器会直接向目标URL发送请求,而不会使用浏览器的数据
  2. 即使请求发送到服务器,也可能访问到缓存起来的数据
  3. 按下Ctrl+F5,实际上是在请求头中加入了两个请求头:Pragma:no-cacheCache-Control:no-cache,这两个字段的作用是如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP相关的缓存或代理服务器,这两个字段的可选值可百度
  4. 其它缓存相关字段
    • Expires:值为日期和时间,超过这个时间值后缓存内容将会失效,即浏览器发送请求前检查这个页面的这个字段,看该页面是否过期,过期了就重新向服务器发送请求
    • Last-Modified:表示一个服务器上的资源的最后修改时间,响应报文中返回,浏览器再次发送请求时在请求头中增加一个If-Modifified-since字段,询问浏览器页面是否为最新的,如果为最新的服务器就返回304状态码,告诉浏览器为最新的,服务器也不会传输新的数据
    • Etag:类似Last-Modified字段,该字段作用为让服务器给每一个页面分配一个唯一的编号,通过这个编号来确定当前页面是否为最新的

DNS域名解析过程

  1. 浏览器首先检查缓存中有没有域名对应解析过的IP地址(浏览器缓存域名有大小和时间限制,时间一般为几分钟到几小时不等,域名被缓存时间限制可以通过TTL属性来设置)
  2. 如果上一步找不到,浏览器会检查操作系统缓存中是否有解析结果,例如hosts文件
  3. 如果上一步找不到,那么向LDNS即本地区域名服务器发送请求,这个LDNS的IP是我们自己设置的。大部分的域名解析都在这里已经完成了
  4. LDNS没有命中,那么向Root Server发送域名解析请求
  5. 根域名服务器返回LDNS一个查询的主域名服务器(gTLD Sserver)地址,gTLD是国际顶级域名服务器,如.com/.cn/.org
  6. LDNS向上一步返回的gTLD服务器发送请求
  7. 接受请求gTLD服务器查找并返回该域名对应的Name Server域名服务器地址,这个Name Server通常就是我们注册的域名服务器,例如我们在某个域名服务提供商申请域名,那么这个域名解析任务就由这个提供商的服务器完成
  8. LDNS向Name Server发送请求,接受请求的服务器查询存储域名和IP地址的映射关系表,正差情况下都可以根据域名得到目标IP记录,连同一个TTL值返回给LDNS
  9. LDNS缓存这个域名和IP对应关系,缓存时间由TTL值控制
  10. 解析结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束

CDN(Content Delivery Network)

  1. CDN即内容分布网络,构筑在Internet上的一种先进流量分配网络,目的为将网站内容发布到最接近用户的网络边缘,使得用户可以就近获取所需内容
  2. CDN缓存网站静态数据为主,如CSS/JS/图片/静态页面等
  3. 一个用户访问某一个静态页面,首先向LDNS发起域名解析请求,最后会到这个域名的注册服务器上解析,一般一个公司都会有一个DNS解析服务器,这个DNS解析服务器会将它重新CHAME(一种域名解析方法)解析到另外一个域名,这个域名最终被指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配哪一个地方的访问用户,返回给离这个访问用户最近的CDN节点

你可能感兴趣的:(计算机基础)