web请求过程,DNS, CDN

本文详细介绍了B/S架构下web请求的完整流程,包括HTTP解析、浏览器缓存机制、DNS域名解析过程和CDN的工作机制。重点讨论了DNS的多级解析、缓存策略以及Java中DNS解析的缓存设置。此外,还阐述了CDN如何通过内容分发加速用户访问,并提及了负载均衡的不同层次和方法。
摘要由CSDN通过智能技术生成

看深入分析javaweb技术内幕,做个摘抄总结

B/S(Browser/Server)网络架构,基于统一的应用层协议HTTP来交互数据,HTTP采用无状态的短连接的通信方式,通常情况下,一次请求就完成了一次数据交互,也对应一个业务逻辑。然后连接就断开了。这种情况下,相比长链接,服务器能够同时服务更多的用户。

B/S架构大多要求满足海量用户的访问请求,同时保持用户请求的快速响应。

请求流程如下:

1,用户浏览器输入URL,www.xx.com。
2,浏览器请求DNS把这个URL的域名部分(www.xx.com)解析成对应的IP。
3,浏览器通过ip去寻找对应的服务器地址,向服务器发起一个get请求。
4,这时的服务器地址,可能是一个负载均衡设备,负责平均分配所有用户的请求,指定真实处理请求的服务器,比如Tomcat/Jetty/JBoos服务器
5,Tomcat/Jetty/JBoos服务器收到请求后,会对请求需要的数据类型进行判断,是存储在分布式缓存(比如redis)里,还是静态文件(文件系统)中,还是数据库中,去获取对应的数据后,把处理好的数据返回给浏览器。
6,浏览器接收到数据,并且解析,解析数据的时候可能会发现,还需要一些静态资源,(如CSS,JS或者图片),于是又再次发起HTTP请求,重复3-4的过程。
7,服务器这时候把请求通过反向代理,交由CDN去完成静态资源的请求。
8,浏览器接收并缓存静态资源。

HTTP解析

常见的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(Unix)
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

常见的HTTP状态码

状态码说明
200客户端请求成功
302临时跳转,跳转的地址通过Location指定
400客户端请求有语法错误,不能被服务器识别
403服务器收到请求,但是拒绝提供服务
404请求的资源不存在
500服务器发生不可预期的错误

浏览器缓存机制

CTRL+F5刷新的页面一定是最新的,因为是直接向目标URL发送请求,而不是用浏览器的缓存数据;并且会在HTTP请求头中增加额外的请求头
来告诉服务端我们要获取的是最新的数据而不是缓存,比如请求头Pragam:no-cache 和 Cache-Control:no-cache。

1,Pragam 和 Cache-Control的可选字段列表:

可选值说明
Public所有的内容都将被缓存,在响应头中设置
Private内容只缓存到私有缓存中,在响应头中设置
no-cache所有内容都不会被缓存,在请求头和响应头中设置
no-store所有内容都不会被缓存到缓存或Internet临时文件中,在响应头中设置
must-revalidation/proxy-revalidation如果缓存内容失效,请求必须发送到服务器/代理以进行重新验证,在请求头中设置
max-age=xxx缓存的内容将在xxx秒后失效,这个选项只在Http1.1中可用,和Last-Modified一起使用时优先级较高,在响应头中设置

Cache-Control的优先级比较高,如果Cache-Control和其他的一些请求字段(比如Expires)同时出现,Cache-Control会覆盖其他字段。

2,Expires请求字段:
通常格式是 Expires:Sat,25 Feb 2012 12:22:17 GMT, 浏览器在发送请求之前检查这个页面的字段,看该页面是否已经过期了,如果过期,就向服务端重新发起请求。

3,Last-Modified字段一般用于表示一个服务器上的资源的最后修改时间,如果是静态内容会自动加上Last-Modified字段,如果是动态内容,比如Servlet提供了getLastModified方法用来检查某个动态内容是否已经更新。通过这个最后修改时间可以判断当前请求的资源是否是最新的。
具体步骤:
服务端在响应头中返回一个Last-Modified字段 Last-Modified:Sat,25 Feb 2012 12:22:17 GMT, 浏览器在再次请求的时候,在请求头中真假一个 If-Modified-Since::Sat,25 Feb 2012 12:22:17 GMT字段,询问当前缓存的页面是否是最新的,如果是就返回304状态码,服务器就不会传输新的数据给浏览器。

4,Etag字段,与Last-Modified字段类型,这个字段作用是让服务端给每个页面分配一个唯一的编号,然后通过编号来区分当前的页面是否是最新的,这个方式比Last-Modified灵活,但是在分布式的情况下,后端有多台web服务器,就比较难以处理了,因为需要每台服务器都记住所有资源的编号

DNS域名解析过程 #87

DNS负责把域名解析成ip

名词解释:TTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间。

1,浏览器检查缓存中有没有域名对应的ip地址,有,解析结束; 没有,进入下一步; 浏览器缓存域名是有缓存大小,缓存时间限制的,缓存时间通常设定在几分钟到几小时不等,时间太短请求频繁,时间太长不利于及时更新可能导致用户无法访问。可以通过TTL属性来设置

2,浏览器查找操作系统中是否有这个域名对应的DNS解析结果。有,解析结束;没有,进入下一步;系统盘中的hosts文件就是设置域名:ip映射关系的位置之一 c:\windows\system32\drivers\etc\hosts,很容易被黑客劫持。

3,操作系统把域名发送给本地域名服务器Local DNS),这个域名服务器一般是应用提供商(ISP,比如电信\联通\移动)提供的,通常服务器在用户所在城市的某个角落,或者校园网的DNS服务器就在学校范围内,总之不会太远。通常80%的域名解析到这里就能结束了。Local DNS承担了主要的域名解析工作。
Windows环境下通过命令行输入ipconfig,Linux环境下通过cat /etc/resolv.conf就可以查询配置的DNS服务器了,这个专门的域名解析服务器性能都会很好,它们一般都会缓存域名解析结果,当然缓存时间是受到域名的失效时间控制的。

4,LDNS仍然没有命中,就直接到Root Server域名服务器根域名服务器)请求解析。根域名服务器返回给本地域名服务器一个所查询的主域名服务器(gTLD Server)地址。gTLD是国际顶级域名服务器,如.com、.cn、.org等。

5、本地域名服务器(Local DNS)向gTLD服务器发送请求, 接受请求的gTLD服务器查找并返回此域名对应的域名服务器(Name Server)的地址;通常就是用户申请/注册域名时候,对应的那个域名服务器提供商的服务器。

8、LDNS查询域名服务器(Name Server),域名服务器会查询存储的域名和IP的映射关系表,在正常情况下都根据域名得到目标IP地址,连同一个TTL值返回给DNS

9、LDNS得到该域名对应的IP和TTL值,LDNS会缓存这个域名和IP的对应关系,缓存时间由TTL值控制

10、LDNS把解析的结果返回给浏览器,浏览器根据TTL值缓存在本地系统缓存中,域名解析过程结束。

在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能会影响域名解析过程。

刷新域名缓存:清除,刷新缓存
在windows: “ipconfig/flushdns”
在linux下通过 /etc/init.d/nscd restart

JAVA中
Java应用中,JVM也会缓存DNS的解析结果, 这个缓存是在InetAddress类中完成的,
有两种缓存策略
1,正确解析结果缓存,配置项为 networkaddress.cache.ttl 默认值是-1(永不失效)
2,失败解析结果缓存,配置项为 networkaddress.cache.negative.ttl 默认值是10(缓存10秒)
在lib/security/java.security文件中,在java启动参数中增加-Dsum.net.inetaddr.ttl=xxx均可配置,也可以通过InetAddress类动态修改。
InetAddress必须用单例模式,因为初始化需要进行一次完整的域名解析,非常耗时。

域名解析记录
A记录:A代表的是Address,用来制定域名对应的ip地址, A记录可以将多个域名解析到一个ip地址,但是不能将一个域名解析到多个ip地址。
MX记录:Mail Exchange,可以将某个域名下的邮件服务器指向自己的Mail Server。 比如www.taobao.com可能指向115.238.25.111的A纪录地址,而xxx@taobao.com就会指向配置的MX记录地址,DNS会把xxx@taobao.com地址发送到MX记录所记录的ip.
CNAME记录:全称是Canonical Name(别名解析),就是可以为域名设置一个或多个的别名,输入别名,在浏览器输入别名,DNS帮我们找到真正的域名。
NS记录:(Name Server)记录,用来指定该域名由哪个DNS服务器进行解析
TXT记录:为某个主机名或者域名设置说明用的,没软用,类似注释或者说明文件

CDN工作机制

CDN:内容分布网络(Content Delivery Network),是一种构筑在现有Internet上的一种先进的流量分配网络。目的是在现有系统之上,增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
目前CDN都以缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据。
用户从主站服务器请求到动态内容后(相对距离远),再从CDN上下载这些静态数据(距离近),从而加速网页数据的内容下载速度。

CDN需要达到的目标:
可扩展性;安全性;可靠性,响应和执行

流程:
1,用户访问某个静态文件,首先向Local DNS服务器发起请求,经过一系列解析后,得到域名对应的注册服务器,交由Name Server去进行解析,返回域名对应的ip地址
2,Local DNS去ip地址上请求, 地址上的服务器是一个内部的域名服务器,把请求的域名解析后,会通过别名(CNAME)解析,把他解析成另外一个域名,而这个新域名最终会指向CDN服务器。
3,CDN服务器中由进行负载均衡处理,并根据GTM(应该是时区地区相关)来确实是哪个地方的访问用户,返回距离最近的CDN节点(服务器)给用户。
4,用户到这个距离最近的CDN节点上去获取数据。

负载均衡
Load Balance, 对工作任务进行平衡,分桶到多个操作单元上执行。
可以提高服务器响应速度以及利用效率,避免软件出现单点失效,解决网络拥塞问题,实现地理位置无关系,为用户提供较一致的访问质量

通常有三种负载均衡架构:
链路负载均衡:DNS解析不同的ip,用户根据ip访问不同的目标服务器
集群负载均衡:分为硬件负载均衡和软件负载均衡,硬件负载均衡就是一个很贵的硬件来负责所有的转发,一般是一主一备,不可扩容,价格昂贵,性能好;软件负载均衡就是普通pc大件,成本低,访问要经过多次代理服务器,会增加网络延时;
操作系统负载均衡:利用操作系统级别的软中断或者硬件中断来达到负载均衡,如可以设置多队列网卡等来实现。(个人理解是系统级别的线程挂起设置,来切换不同核之间的任务,保证cpu的使用率和占用率均衡。不会有哪个任务执行特别久都不带停)

软中断是执行中断指令产生的,而硬中断是由外设引发的。

E.M. Magic Swf2Avi Professional, High-Quality, No skip frames and Lossless audio for your Flash conversion, and supports swf to HD(high-definition) video. E.M. Magic Swf2Avi is the extremely powerful Flash converter software to convert SWF to AVI and other popular formats. The software is designed to convert swf for your mobile video player as avi, 3gp, mp4, mp3, PSP, PS3, iPod, iPhone, Apple TV, XBOX 360, Zune etc and also CD, VCD or DVD player. In particular, E.M. Magic Swf2Avi can help u convert swf to HD (high definition) video formats like HD WMV Video, HD DivX Video, HD Xvid Video, HD H.264 Video, HD Quick Time Video, HD MPEG4 Video, HD FLV Video, HD TS Video, and create Blu-ray folder for PS3 and Blu-ray player. Update: 2009-01-15 Magic Swf2Avi V6.0.9.115 1. HD version, convert swf to HD (high-definition) video for PS3 and Blu-ray Player 2. updated converting engine. 3. updated media burner, supports burn data dvd now. 4. bug fixes. 2008-10-15 Magic Swf2Avi 2008 build 5.2.10.115 1. added BlackBerry output format. 2. updated converting engine. 3. updated gif quality. 4. bug fixes. 2008-09-10 Magic Swf2Avi 2008 build 5.2.9.101 1. update interface. 2. bug fixes. 2008-08-27 Magic Swf2Avi 2008 build 5.2.7.281 1. update interface. 2. bug fixes. 2008-06-20 Magic Swf2Avi 2008 build 5.1.6.417 1. Added a command line version. 2. Added output format: MKV. 3. Updated help file. 4. Bug fixes. 2008-05-21 Magic Swf2Avi 2008 build 5.0.8.521 1. Bug fixes. 2008-04-08 Magic Swf2Avi 2008 build 5.0.8.408 1. Bug fixes. 2008-03-12 Magic Swf2Avi 2008 build 5.0.8.315 1. Bug fixes. 2008-01-22 Magic Swf2Avi 2008 build 5.0.8.118 1. Added option to convert Flash(swf) game. Main Functions: . Three output mode(Auto/two compressions/a compression), you can high-quality, simple, rapid convert flash file. . One step to convert flash(swf) to your iPod, PSP, Zune, 3GP mobile phone(Nokia, Sony Ericsson, Motorola), Apple TV, iPhone, etc. . Convert and Burn flash(swf) file to DVD, SVC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值