深入Web请求过程

B/S网络架构

带来的好处:

  1.客户端使用同一的浏览器。 --浏览器的交互特性使其使用起来非常简便

  2.服务器基于统一的http。  --简化、规范开发模式,大大节省开发成本.如tomcat nginx这些服务器可以直接拿来使用

 

1.1 B/S网络架构概述

    从前端到后端都得到了简化,都基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接的通信方式(一次请求就完成一次数据交互、对应一个业务逻辑,然后此次通信断开)。这种方式是为了能够服务更多的用户,因为当前互联网应用每天都会处理上亿的用户请求。

  固定不变的原则

  a.互联网上所有的资源都要用一个URL来表示。

  b.必须基于HTTP与服务端教书。

  c.数据展示必须在浏览器中进行。

 

1.2 如何发起一个请求 

步骤:1)浏览器在建立Socket连接之前,先将URL的域名DNS解析出IP地址

   2)根据IP和默认80端口与远程服务器建立Socket连接

   3)浏览器根据URL组装成一个get类型的HTTP请求头,通过outputstream.write发送到目标服务器,服务器等待inputstream.read返回数据

   4)最后断开连接

 

1.3 HTTP解析

  B/S网络架构的核心是HTTP,要理解HTTP,最重要的就是要熟悉HTTP中的HTTP Header,HTTP Header控制着互联网成千上万用户的数据传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。

常见的HTTP请求头
请求头 说明
Accept-Charset 用于指定客户端接受的字符集
Accept-Encoding   用于指定可接受的内容编码,如Accept-Encoding:gzip.deflate
Accept-Language   用于指定一种自然语言,如Accept-Language:zh-cn
Host 用于指定被请求资源的Internet主机和端口号,如Host:www.taobao.com
User_Agent 客户端将它的操作系统、浏览器和其他属性告诉服务器
Connection 当前连接是否保持,如Connection:Keep-Alive

 

 

 

 

 

 

 

 

 

 

常见的HTTP响应头
响应头 说明
Server 使用的服务器名称,如Server:Apache/1.3.6
Content-Type  用来指明发送给接收者的实体正文的媒体类型,如Content-Type:text/html;charset=GBK
Content-Encoding   与请求报头Accept-Encoding对应,告诉服务器采用的是什么压缩编码
Content-Language 描述了资源所用的自然语言,与Accept-Language对应
Content-Length 指明实体正文的长度,用以字节方式存储的十进制数字来表示
Keep-Alive 保持连接的时间,如Keep-Alive:timeout=5,max=120

 

 

 

 

 

 

 

 

  a.浏览器缓存

  在浏览(测试)网页的时候发现有异常的情况下,通常考虑的是不是浏览器做了缓存,所以一般的做法是按Ctrl+F5组合件重新请求一次这个页面(组合刷新)。

当使用Ctrl+F5刷新一个页面的时候,在HTTP的请求头中会增加一些请求头(Pragma  no-cache,Cache-Control no-cache),它告诉服务端我们要获取最新的数据而不是缓存。

 

1.4 DNS域名解析

  DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的。

  域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

  其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。

  域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。将域名映射为IP地址的过程就称为“域名解析”。

在Internet上域名与IP地址之间是一对一(或者多对一)的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,DNS就是进行域名解析的服务器。 DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。因为,你在上网时输入的网址,是通过域名解析系统解析找到了相对应的IP地址,这样才能上网。其实,域名的最终指向是IP。

 

 a. DNS域名解析过程

  当用户在浏览器中输入域名并按下回车键后,

  1.浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束。(有缓存大小,缓存时间的限制,域名缓存时间由TTL属性设置)

  2.如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

  3.操作系统会把这个域名发送到LDNS,也就是本地区的域名服务器(联通、电信、学校)。它们性能都会很好,一般会缓存域名解析结果。

  4.如果LDNS任然没有命中,那么就直接到Root Server 根域名服务器请求解析。

  5.根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com,.cn,.org等

  6.本地域名服务器再向上一步返回的gTLD服务器发送请求

  7.接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址。(比如 你在阿里云上买的域名服务器地址)

  8.NameServer域名服务器会查新存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器

  9.返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL控制。   TTL Time to live

  10.把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。

 

 b.清除缓存的域名

  DNS域名解析后会缓存解析结果,其中主要在两个地方缓存结果,一个是Local DNS Server,另外一个是用户的本地机器。

  第一个很难人工介入清除,第二个可以使用如下方式清除:

Windows下 在cmd命令行模式中执行 ipconfig/flushdns命令来刷新缓存

Linux下可以通过/etc/init.d/nscd restart来清除缓存

  重启依然是解决很多问题的第一选择

  JAVA应用中JVM也会缓存DNS的解析结果,我不理解这个,请大神补充。。

 

C.几种域名解析方式

  A记录,A代表的是Address,用来指定域名对应的IP地址。A记录可以将多个域名解析到一个IP地址,但不能将一个域名解析到多个IP地址。

  MX记录,表示的是Mail Exchange,就是将某个域名下的邮件服务器指向自己的Mail Server。

  CNAME记录,全称是Canonical Name 别名解析。可以为一个域名设置一个或多个别名。

  NS记录,为某个域名指定DNS解析服务器,也就是这个域名由指定的IP地址的DNS服务器去解析。

  TXT记录,为某个主机名或域名设置说明。

 

1.5 CDN工作机制

CDN(内容分布网络)=镜像+缓存+整体负载均衡

相当于1.4步骤7)后增加一步:Name Server域名服务器把它重新解析到另一个域名,而这个域名最终被指向CDN全局中的DNS负载均衡服务器,再由这个GTM判断是哪个地方的访问用户,返回给离这个访问用户最近的CDN节点。

1.5.2 负载均衡

  负载均衡就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等。

  

    ---------参考自《深入分析Jav Web技术内幕》

 

posted @ 2017-04-11 15:00  _勿忘初心  阅读(173)  评论(0编辑  收藏  举报