WEB请求过程的深入学习(深入分析JavaWeb技术内幕,第一章读后总结和深入学习)

几天前,看到了这样一本书,《深入分析JavaWeb技术内幕》,作者是许令波,非常全面的对整个web进行了分析和讲解,但是其中可能会有很多地方和名词对于一个我来说,不能理解,所以根据原文,总结整理了这个笔记。

1.B/S架构带来的好处

   a.统一使用浏览器,操作起来相对简单,且浏览器具有统一性,屏蔽了用户使用服务的差异性。
   b.服务端(S端)统一使用http协议,简化开发模式,并且使开发模式规范化,降低开发人员的开发成本和学习成本。
2.B/S架构的概述
   a. B/S架构基于统一的应用层协议http来进行数据交互,C/S架构通常使用长连接(始终保持连接状态),http协议使用无状态短连接的通信方式,一次请求对应一次数据交互,也就是对应一个业务逻辑(比如进行一次搜索),请求之后断开通信连接,这样做的好处就是保证同时服务更多的用户,保证高并发的访问。目前B/S架构都采用类似于下图所示架构设计,既满足海量用户的访问请求,又要保证用户请求的快速响应,所以网络结构也变得越来越复杂。
                          
   一个用户在浏览器中输入一个URL(如www.baidu.com)时,会发生这样的一些操作,首先他会请求DNS把这个域名解析成对应的IP地址,然后浏览器根据这个IP地址去查找对应的服务器,再向这个服务器发送一个请求,然后在服务器上进行一些操作,然后由服务器决定返回默认的数据资源给访问的用户。(由上图可以看出,服务器端还有很多复杂的逻辑,比如服务器可能有多台,到底是那一台服务器来响应这个请求,这里需要一个负载均衡设备来平均所有的请求,当数据返回浏览器时,浏览器再解析是发现还有一些静态的数据比如JS和CSS或者图片时,会发起另外的http请求,而这个请求,而这些请求很可能在CDN上,然后CDN服务器又会处理这个请求)。不管网络架构如何变化,始终有些固定不变的原则需要遵守
 a.互联网上所有的资源都需要一个URL来表示
 b.必须基于HTTP协议与服务端来进行交互
 c.数据展示必须在浏览器中
3.如何发起一个请求
   浏览器在地址栏输入URL,然后根据URL的域名DNS解析出对应的IP地址和端口号,在根据这个IP地址和端口号与远程服务器建立SOCKET连接 ,然后浏览器根据这个URL,构建一个get类型的HTTP请求头,使用outputStream.write发送到目标服务器,服务器根据inputStream.read返回数据,然后断开连接。
4.常见的http请求头,响应头,状态码
       
         
       
5.浏览器的缓存机制:浏览器缓存是一个比较复杂并且重要的机制,在浏览器端如果进行同一个请求,就有可能拿到浏览器中缓存                                    的数据,一个非常有效的解决办法就是按ctrl+f5组合键,ctrl+F5浏览器会直接想目标URL发送请求,不会取                                  浏览器的缓存数据,其次 在服务端也可能会有缓存的数据(服务器的前端可能有一个缓存服务器,如                                              Varnish代理,Varnish也肯能直接拿取缓存的数据),所以为了保证拿到最新的数据,必须通过HTTP协议来                                 进行控制,使用ctrl+F5组合键的时候,在HTTP的情求头中会增加一些请求头,他会告诉服务器我们要的是最                                 新的数据。
                                这里的请求头是:
                               a.Cache-Control(多种浏览器支持)/Pragma(服务器遵守):这个HTTP head字段用于指定所有缓存机制在                                   整个请求/响应链中必须服从的指令,不仅可以控制 浏览器端,还可以控制缓存或代理服务器
                                
                                b.Expires:后面通常跟着的是时间格式,超过这个时间之后,缓存内容就将失效,浏览器再发送请求之前来检                                 查这个字段 查看这个页面是否过期,若是过期则重新请求。
                                c.Last-Modified/Etag:Last-Modified用于表示资源的最后一次修改时间,浏览器发送请求时,请求头中会                                   带这个字段,来询问这个资源修改时间是否是最新,如果是最新的,就返回304状态码,服务器不会返回数据                                 给浏览器。Etag与 Last-Modified很像,只不过它是为每一个页面分配唯一的编号,然后通过编号来判断是否                                 是最新的。
6.DNS域名解析过程  :DNS的工作就是将域名解析成IP地址。(如图)
                                 DNS的解析过程:
                                 第一步:浏览器检测缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,结束解析(浏览器中缓存                                               与域名是 有限制的,时间和大小上都有限制,时间限制由TTL属性设置,这个时间太长太短都不好,                                               太长,有可能服务器 地址发生变化,太短,会导致每次请求都需要解析)
                                 第二步:如果浏览器中没有这个域名的缓存,浏览器会查找操作系统缓存中是否有这个域名对应的解析结果.
                                 第三步:如果在本机中无法完成域名的解析,就会来到这一步。我们的网络配置中DNS服务器地址这一项,                                                 操作系统会把域名发送给这里设置的LDNS(本地区的域名服务器),大约80%域名的解析到这一步                                               就结束了。
                                 第四步:如果LDNS没有解析成功,就会到Root Server域名服务器进行解析。
                                 第五步:根域名服务器会返回给LDNS一个所查询域的主域名(gTLD Server)服务器地址,gTLD是世界上顶                                               级域名服务 器,如com cn 全世界只有13台左右
                                 第六步:本地服务器再向主域名服务器发送请求
                                 第七步:接受请求的主域名服务器查找并返回此域名对应的NameServer域名服务器地址(这个域名服务器通                                                常就是你要访问的那个域名的域名提供商)
                                 第八步:NameServer域名服务器会查询储存的域名服务器和IP的映射关系表,然后将查询的IP以及TTL传回                                                  LDNS
                                 第九步:LDNS会缓存这个域名和IP的对应关系,缓存时间由TTL控制。
                                 第十步:把解析结果返回给用户,用户根据TTL值,将结果保存至本地缓存中。
                                
7.清除缓存的域名:域名一般会缓存在两个位置,一个是LDNS,一个是用户的本地机器,这两个的缓存时间都是由TTL和本地缓存                                大小控制的,基本上来说LDNS上面的缓存时间就是TTL,控制,很难人工介入,但是本地缓存可以通过                                           ipconfig/flushdns来清除,在java应用中JVM也会缓存DNS解析结果,这个缓存是在InetAddress中完成的,                                 而且缓存比较特殊,它有两种缓存策略,一种是正确解析结果缓存,另一个是失败的解析结果缓存,这两个的                                缓存时间由一个配置项控制,是在java的lib下面的security/java.swecurity中配置的,他们两个的配置项分别是                               networkaddress.cache.ttl和networkaddress.cache.negative.ttl,他们的默认值分别为-1(永不失效)和                                      10(10秒后失效),可以直接修改
                             注意:使用InetAddress来进行域名解析是,一定要使用单例,否则会有严重性能问题(因为每次创建都是一次                              完整解析)
8.CDN
                             a:CDN的定义:CDN(content Delivery Network)也就是内容分布网络,它是构筑在现有Internet上的一种                              先进 的流量分配网络。
                             b:CDN的工作机制:其目的是通过现有Internet增加一种新的网络架构,将网站内容发送到最接近用户的网                                  络“边缘”使用户就近取得信息,提高响应效率,目前CDN主要已缓存静态数据为主,如CSS,JS等,用户从主                              网站请求动态内容再从CDN上下载静态数据。
                             c.CDN要达到的目标:可扩展行(性能可扩展:应对新增大量数据,用户,事物的拓展能力。成本可扩展:用低                              廉的运营成本提供动态的服务能力和高质量内容的分发);安全性;可靠性;
                             
9.负载均衡:负载均衡就是对任务进行平衡,分摊到多个操作单元上执行,如应用服务器,图片服务器,通常有三种负载均衡架构
                   链路负载均衡,集群负载均衡以及操作系统负载均衡
                   通过DNS解析出不同的IP,用户根据不同的IP访问不同的服务器,这就是一种链路负载均衡。
                   集群负载均衡分为硬件负载均衡和软件负载均衡,硬件负载均衡成本高,性能好,但是不能进行动态扩容,软件负载均                    衡 成本低,但是要经过多个代理服务器会增加网络延时。
                   操作系统负载均衡,就是利用操作系统级别的软中断或者是硬件中断来达到负载均衡,比如多队列网卡。
                   
                      
注解:
  应用层协议http:TCP/IP是个协议组,大致可以分为五个层次:应用层,传输层,网络层,数据链路层,物理层
                            每个层下面都有很多的协议:
                            应用层:http----超文本传输协议,用于网页浏览
                                         smtp----简单邮件传输协议,用于邮件发送
                                         pop3----邮局协议版本3,用于邮件接收
                                         telnet---- 用于远程登陆
                                         snmp----简单网络管理协议,用于网络管理 
                                         ftp----文件传输协议,用于远程文件传输
                                         dhcp----动态主机配置协议,自动分配IP
                                         tftp----简单文件传输协议,短小文件远程传输
                            传输层:tcp----传输控制协议,在传输层保证数据可靠传输的一种协议
                                         udp----用户数据包协议,在传输层是数据具有较高传输效率的协议
                                         spx----序列分组交换协议,在Novell网络传输层中的一种协议
                             网络层:IP----网际协议,实现异网互联通信机制和逻辑编址的协议
                                          ipx  在Novell网络中网络层的一种协议
                                          apple talk苹果公司计算机专业的网络层通信协议
                             数据链路层:  802.3、802.4、802.5、802.11、FDDI、ATM
                             物理层 :v.24 v.35 RS232 RS485
                             那么这几个层次之间都是做什么的?有这么一个例子
                             把整个过程比喻成邮局寄信,应用层就是写信,然后放入信箱。传输层就是你把信件投到邮局。网络层就是邮                                  局把你的信件投放到对方所属的中心邮局,链路层就是对方中心邮局把信件发送到小邮政点,物理层就是就是把                              信件送到对方手上。
      无状态 :   协议的状态是指下一次传输可以记住这次传输信息的能力,http是不会为下一次链接而维护这一次链接的信息的。
                       无状态就是指 当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再次发生请求时,服务器还会响                          应,但是他不知道你就是刚才的浏览器,简单的说,就是服务器不会去记得你,所以是无状态协议。在客户端与服务                        端进行动态交互的web程序出现之后,http无状态的特性严重阻碍了这些应用程序的实现,毕竟交互需要呈上起下,                        比如购物车程序需要知道用户买了什么,于是两种用于保持HTTP连接状态的技术应运而生,一个是cookie,一个                          是session,session和cookie是有区别的,一个是客户端保持连接状态,一个是服务端保存连接状态。
      短连接:    短连接就是指SOCKET连接,发送,接收数据后马上断开连接。
                       长连接就是指建立SOCKET连接之后,不管是否使用都保持连接,但是安全性比较差
                       HTTP也是可以支持长连接的,使用Connection:keep-alive,HTTP1.1默认进行持久连接,但还是无状态的,也就                        是不可信任的。
      

发布了32 篇原创文章 · 获赞 6 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章