深入Web请求过程

B/S网络架构概述

B/S网络架构基于统一的应用层协议HTTP协议交互数据,与传统的C/S网络应用程序使用长连接交互模式是不同,HTTP采用无状态的短连接的通信方式,通常一次请求就完成一次数据交互,然后就断开连接。采用这种方式是为了能够同时服务更多的用户,因为当前互联网每天都会处理上亿的用户,不可能每个用户访问一次后就一直保持这个连接。

一些固定不变的原则:

  • 互联网上所有的资源都用一个URL(统一资源定位符)来表示
  • 必须基于HTTP与服务器交互
  • 数据展示必须在浏览器中进行

如何发起一个请求

如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过写入的二进制字节数据要符合HTTP规范。具体步骤如下:

  1. 浏览器在建立Socket连接之前,必须根据地址栏输入的URL的域名解析出IP地址
  2. 根据IP地址+默认的80端口和服务器建立Socket连接
  3. 浏览器根据这个URL组装一个get类型的HTTP请求,通过outputStream.write发送到服务器
  4. 服务器等待inputStream.read读取请求并响应数据
  5. 响应完毕则断开连接

在Java中可以通过HttpClientOkHttp等处理的HTTP的工具包模拟浏览器请求;在Linux中可以通过curl命令,通过curl+URL就可以简单地发起一个HTTP请求

DNS域名解析

DNS域名解析的目的就是将域名解析出对应的IP地址,解析过程如下:

  1. 浏览器会先检查自身缓存中有没有域名对应的IP地址,同时浏览器缓存域名也是有限制的,不仅浏览器缓存的大小有限制,而且缓存的时间也有限制 (域名被缓存的时间限制可以通过TTL属性来设置)
  2. 如果浏览器缓存中没有,浏览器会检查操作系统缓存是否有这个域名对应的DNS解析结果,即host文件。在Windows中在C:\Windows\System32\drivers\etc\hosts文件来设置,可以将任何域名解析到任何IP地址。在Linux中这个配置文件是/etc/hosts。同样的缓存的时间受这个域名失效时间和缓存空间大小控制。以上两步属于在本机解析,还没涉及到域名服务器,如果本机解析不到就需要请求域名服务器来解析这个域名了
  3. 在我们的网络配置中都会有"DNS服务器地址"这一项,当上述两个过程无法解析时,操作系统会把这个域名发送到设置的这些地址上,即LDNS(Local DNS Server 本地域名服务器),你所属区域的电信或联通,或者是学校,通常不会很远。在Windows通过ipconfig可以查看LDNS的IP地址,在Linux通过cat /etc/resolv.conf查看,如果没有可能看到有可能使用的是自动获取DNS的方式。这个专门的域名服务器性能都会很好,一般缓存空间不是影响域名失效的主要因素,而是受失效时间控制。LDNS主要承担了域名解析工作,大部分解析到这里都已经完成了
  4. 如果LDNS没有命中,就直接到Root Server( . 根域名)域名服务器请求解析
  5. 根据域名服务器返回给本地域名服务器(LDNS)一个说查询域的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com .cn .org等
  6. 本地域名服务器(LDNS)再向上一部返回的gTLD服务器发送请求
  7. 接受请求的gTLD服务器查找并返回此域名对应的Name Server服务器地址,这个Name Server就是该域名注册的域名服务器地址
  8. Name Server域名服务器查询存储的域名和IP地址映射表,得到对应IP记录,连同一个TTL值返回给LDNS域名服务器
  9. LDNS域名服务器缓存域名和IP对应关系,缓存时间由TTL值控制
  10. 把解析结果返回给用户(操作系统,浏览器),用户根据TTL值缓存在本地中,域名解析过程结束

CDN网络介绍

CDN也就是内容分布网络,是构建在现有Internet上的先进的流量分配网络。将网站的内容发布到最接近用户的网络,使用户可以就近取得所需资源,提高访问网站的响应速度

目前CDN都是以缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据

CDN = 资源镜像(Mirror)+ 缓存(Cache)+ 整体负载均衡(GSLB)

posted @ 2020-10-03 14:42  OverZeal  阅读(266)  评论(0编辑  收藏  举报