1.目前B/S网络架构大都采用类似下图所示的架构
2.如何发起一个HTTP请求 就是建立一个Socket通信的通过
浏览器在建立Socket连接连接之前,必须根据地址栏输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认的80 端口与远程服务器简历Socket连接,然后再根据这个URL组装成一个get类型的Http请求头,通过outputStream.write 发送到目标服务器,服务器等待inputStream.rea放回数据,最后断开这个连接. 不同的浏览简历连接的方式不同,管理连接的方式也不同.既然发送一个Http请求就是简历一个Socket通信,那么我们就可以不利用浏览器手动就可以发送一个Http请求了.
1.使用 HttpClient
2.linux 中 使用 curl +URL 就能够发起一个Http请求 可以加上 -I 来查看http协议头的信息,或者 -H来添加 HTTP
4.在浏览器中 查看http头的信息
1.Firefox中可以使用 firebug ,Httpfox这些插件来看看请求和返回的信息
2.IE 中可使用 httpWatch,httpfox ,
3.Google中自带了F12 就可以打开了.
1.为了获取最新的数据,我们可以使用Ctrl+F5 来直接向目标URL发送请求.这样就不会使用浏览器缓存数据.
2.如果服务器前端部署了一个缓存服务器,比如 Varnish代理,也可能直接使用缓存数据.
3.所以为了保存能够看到最新的数据,必须通过Http协议来控制了. 在发送http请求的请求头中加入 Cache-Control(控制浏览器) 和 Pragma (控制服务器) 两个参数来控制,浏览器和缓存代理服务器 必须服从命令请求最新的数据.
这个HTTP Head 字段用于指定所有缓存机制在整个请求/ 响应链中必须服从的指令,
如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP 协议相关的缓存
或代理服务器。HTTP Head 字段有一些可选值
2.Expires
Expires 通常的使用格式是Expires : Sat, 25 Feb 2012 12:22:17 GMT ,后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效,也就是浏览器在发出请求之前检查这
这个字段,看该页面是否已经过期了,过期了就重新向服务器发起请求。
Last-Modified 字段一般用于表示一个服务器上的资源的最后修改时间,资源可以是静态(静态内容自动加上 Last-Modified字段)或者动态的内容(如 Servlet 提供了一个 getLastModified 方法用于检查某个动态内容是否已经更新),通过这个最后修改时间可以判断当前请求的资源是否是最新的。一般服务端在响应头中返回一个 Last-Modified字段,告诉浏览器这个页面的最后修改时间.
Etag: 与 Last-Modified 字段有类似功能的还有一个 Etag 字段,这个字段的作用是让服务端 给每个页面分配一个唯一的编号,然后通过这个编号来区分当前这个页面是否是最新的。
这种方式比使用Last-Modified 更加灵活,但是在后端的Web 服务器有多台时比较难处理,
因为每个Web 服务器都要记住网站的所有资源,否则浏览器返回这个编号就没有意义
1.将域名解析成IP就属于DN解析的工作范畴.目前世界上整个互联网有几个DNS根域名服务器.
步骤
1.用户输入域名--->浏览器检测缓存(查看有无此域名解析过的IP地址)--->有(解析结束)
浏览器的缓存域名是有限制的,大小限制,时间限制.时间的限制可以通过TTL(Time To Live) 属性来设置.(TTL的初值通常是系统缺省值,是包头中的8位的域)
2.如果用户浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果一般在 C:\Window\System32\drivers\etc\hosts 文件里面.如果有 浏览器就会使用这个ip地址. 在linux 中这个配置文件是/etc/hosts 修改这个文件可以达到同样的目的.
前两个步骤都是在本地完成的. 如果上面的步骤没有得到域名解析的IP,此时就会请求域名服务器来解析这个域名了
3.根据网络配置中的 "DNS服务器地址(本地)"--->操作系统将(域名)--->LDNS服务器--如果有-->解析结束.(window:使用ipconfig linux: cat /etc/resolv.conf)
4.LDNS没有命中--->Root Server根域名服务器请求解析
5.Root Server根域名返回一个 查询域名的 主服务器地址 gTLD Server 地址----->LDNS 服务器
6.LDNS---请求-->gTLD服务器发送请求(gTLD:国际顶级域名服务器,如.com ,.cn,.org全球只有13台左右)----NameServer域名服务器地址--->NameServer(当初申请域名的提供商存储了当初域名对应的IP)----TTL+IP----->LDNS Server(存储 URL:IP,时间TTL控制)--->用户(浏览器将TTL,URL:IP 值缓存在本地中)--->解析结束
附:跟踪域名解析过程
在Linux和Windows下都可以使用nslookup命令来查询域名的解析过程。
在Linux中还可以使用dig命令查询DNS的解析过程。
7.清除缓存的域名
1.LDNS的缓存很难清理
2.所以只能清理本地
Window:ipconfig/flushdns 命令来刷新缓存
Linux:sudo /etc/init.d/nscd restart
3.在java应用中JVM也会缓存DNS的解析结果,这个缓存实在InetAddress类中完成,而且这个缓存时间还比较特殊,有两种缓存策略:
(在配置项在 %JAVA_HOME%\lib\security\java.security)
1.正确的结果缓存: networkaddress.cache.ttl 默认值 -1 永不失效
2.失败的结果缓存: networkaddress.cache.negative.ttl 默认值10 10秒
3.修改的方式,分别是
A:直接修改 java.security
B:在java启动参数中增加-Dsun.net.inetaddr.ttl=xx 来修改默认值
C:通过InetAddress类来动态修改.(如果我们需要InetAddress来解析域名一定要是单例模式.否则每次都解析,很耗时间)
A:记录
A表示的Address用来指定对应的Ip地址.
例如 item.taobao.com 指定到115.238.23.241
将switch.taobao.com记录到 121/14/23/231
A记录可以将多个域名解析到一个Ip地址.不能将一个域名解析到多个IP地址.
Mail Exchange, 就是将某个域名下的邮件服务器窒息nag自己的Mail Server
例如: taobao.com域名的A记录的IP地址为 115.238.25.245.
如果 MX 记录设置为 112.238.25.246,是 [email protected]的邮件路由,DNS会讲邮件发送到115.238.25.246所在的服务器.而正常通过web请求的话仍然解析到A记录IP地址
全程是 Canonical Name(别名解析).所谓的别名解析就是可以为一个域名设置一个或者多个别名. 如将 taobao.com 解析到 xulingbo.net 讲srcfan.com 接续到xulingbo.net
其中xulingbo.net 分别是taobao.com srcfan,com,前面的跟踪域名解析为 www.taobao.com 1542 IN CNAME www.bslb.taobao.com 就是CNAME 解析
为某个域名指定的DNS服务器, 也就是域名有指定的IP地址的DNS服务器解析.
(可能类似 Name Server 域名提供商 会指定某个域名有某个 DNS服务器去解析 然后返回IP地址)
为某个主机名或域名设置说明,,如可以为xulinbo.net设置TXT记录 为 "君山的博客|徐令波" 这样的说明
CDN:内容分布网络 ( Content Delivery Network) 它是构筑在现有Internet上一种先进的流量分配网络.目的在现有的Interner中增加一层新的网络架构,讲网站的内容发布到最接近用户网络"边缘",是用户 就近获取所需的内容.提高用户访问网站的相应速度. 有别于镜像.比镜像跟智能.
CDN=镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB).因而.CDN可以明显提高Internet中信息流动的效率.
目前 CDN都是缓存网站中静态数据为主,CSS JS 图片 静态页面等数据.
用户从主站中请求到内容后在从CDN上下载静态的数据.从而加速网页的显示速度.如淘宝有90%以上的数据都是有CDN来提供的.
通常CDN要达到一下几个目标
1.可扩展Scalability.性能可扩展性.因对新增的大量数据.用户,和事物的扩展能力,成本可扩展性.用低廉的运营成本来提供动态的服务能力和高质量的内容分发.
2.安全性:强调提供物理设备,网络,软件,数据和服务过程的安全性.减少 DDos攻击性和其他恶意行为造成商业网站业务中断
3.可靠性,响应,执行 (Reliability,Responsiveness Performance).服务可用性.能够处理可能的故障,和用户体验的下降.通过负载均衡即使提供网络的容错机制.
11负载均衡
负载均衡: Load Balance 就是对工作任务进行平衡,均摊,到多个操作单元上执行,如 图片服务器,应用服务器,共同完成工作任务. 它可以提高服务器响应的速度和利用效率.解决网络拥堵问题.
就是前面提到的通过DNS解析成不同的IP.然后用户根据Ip来访问不同的目标服务器:
缺点:如果一种一条webService 挂掉了,由于LDNS有缓存,那么用户就无法访问 这个域名.
优点:GDNS (全局DNS 服务器)给出的webServer IP后 用户可以直接访问目标服务器.速度快
B:集群负载均衡:
分为:
硬件负载均衡 :
使用一台专门的硬件设备来转发请求.
缺点: 价格贵,在超出服务极限时候不能动态扩容.如F5
优点:性能非常好,稳定.
软件负载均衡:
使用最普遍的一种方式.直接使用廉价的PC就可以搭建
缺点:一般一次访问请求要经过多次代理服务器(使用Ip进行转发),增加的网络延时
有点:成本非常低
C:操作系统负载均衡:
利用操作系统基本的软中断和硬件中断来达到负载均衡,如可以设置多队列网卡来等来实现.