深入分析java web 技术内幕_笔记_一

b/s网络架构概述
1.如何发起一个请求

    (1)与建立一个Socket链接其实区别不大,只不过outputstream.write写的二进制数据格式要符合http协议
    (2)通过HttpClient工具包可以发起http请求

2.http协议解析

    (1).查看http信息的工具,如firefox的firebug。(在web控制台的网络一栏中就可以查看到请求,响应的http信息)
    (2)浏览器的缓存机制:

        <1>使用组合键crtl+F5就可以使得浏览器直接向目标发送请求而不使用浏览器缓存的数据
        <2>即使直接向服务器端发请求而不使用浏览器的缓存,若然服务器端部署了缓存服务器,也可能看到缓存数据。所以必须从http协议中控制
        ,又使用组合键crtl+F5不仅仅直接向服务器请求,而且在请求头中加入了两个请求项Pragma:no-cache和Cache-Control:no-cache可以控制
        <3>Pragma/Cache-Control,这个http字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。Cache-Control被各个浏览器支持得更好,他和一些请求字段如Expires一起出现时会覆盖其他字段,Pragma与Cache-Control字段类似。
        <4>expires属性,用于指定缓存的截止日期,过期缓存无效
        <5>last-Mofified字段用于表示服务器上的资源的最后修改时间,一般服务器在返回时返回这一字段告诉浏览器资源的最后修改时间,当浏览器再次请求时会加上一个If-Modified-Since字段,其值为接受到的last-Mofified,当服务器发现该资源时最新的,就返回304状态码,不传输新的数据

3.DNS域名解释

    (1)url中的域名需要解释成ip地址才能与远程主机建立连接,如何把域名解释成ip地址就属于dns解析的工作范畴
    (2)DNS域名解释过程:

        第一步:浏览器检查缓存域中有没有解释过的ip地址,如果有,这个过程就结束(缓存的有大小和时间的限制,时间从几分钟到几小时不等,这个限制可以通过TTL属性来设置)(时间太长可能导致域名的ip改变后无法被正常解释,时间太短的话导致每次都要解释域名)
        第二步:如果浏览器缓存中没有,则浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。(可以通过修改操作系统中的域名和对应地址,使得,浏览器直接解释域名为你记录的ip。这也是黑客实现域名劫持的手段)(在win7中这个文件已经改为只读。)
        第三步:若前面两部都无法找到,则操作系统会吧域名发送给网络设置中设置的dns服务器地址(LDNS)(也就是本地区的域名服务器)(这个服务器通常是你接入互联网的应用提供商)
        第四步:如果LDNS仍然没有命中,就直接到RootServer域名服务器请求解析
        第五步:根域名服务器返回本地域名服务器一个所查询域的主域名服务器gTLDSERVER地址,如.com,.cn,.org等,全球只有13台左右
        第六步:本地服务器LDNS再向上一步返回的gTLD服务器发送请求
        第七步:接受请求的gTLD服务器返回此域名对应的Name Server域名服务器地址(这个Name Server通常是你在某个域名服务器提供商申请的域名,例如你在某个域名服务器提供商申请的域名,域名解释任务将由域名的提供商的服务器完成)
        第八步:Name Server域名服务器会查询对应的ip,连同一个TTL值返回给DNS Server域名服务器
        第九步:Local DNS Server 会缓存这个域名和IP的对应关系,缓存的时间由返回的TTL值控制
        第十步:把解释的结果返回给用户,用户会根据TTL值缓存在本地系统的缓存中

        清除缓存的域名:windows下在命令行模式下执行ipconfig/flushdns命令来刷新缓存

        java缓存的DNS解析结果:
        这个缓存是在InetAddress类中完成的,而且额这个缓存时间还比较特殊,它头两种缓存策略:一种是正确解释结果的缓存,一种是失败解释结果的缓存,这两个缓存时间由两个配置项控制(分别是neyworkaddress.cache.ttl和networkaddress.cache.negative.ttl),配置项是在%JAVAHOME%\lib\security\java.security文件中配置,默认值分别是-1(永不失效)或者10(缓存10秒),另外可以通过直接修改java.sercurity文件或者在java的启动参数中增加-Dsun.net.inetaddr.ttl=xxx来修改默认值,或者通过InetAddress类动态修改(注意,该类要使用单利模式,创建该实例十分昂贵)

        几种域名解释方式:

            《1》A记录,A代表Address,用来指定域名对应的ip地址(一个ip地址可以对应多个域名,反之不可)
            《2》MX记录,MX即是Mail Exchange,就是可以将某个域名下的邮件服务器指向自己的Mail Server(正常web请求会解析到A记录,而xx@xx.xx的邮件路由将解析到MX记录)
            《3》CName记录,全称是Canonical Name即别名解析。所谓的别名解释就是可以为一个域名设置多个别名
            《4》NS记录,为某个域名指定DNS解析服务器,也就是这个域名有指定的ip地址的DNS服务器区解释
            《5》TXT记录,为某个主机名或域名设置说明

4.CDN工作机制(CDN也就是内容分布网络) (这块内容应该后续加深了解)

    (1)它是构筑于现有Internet商的一种先进的流量分配网络,将网站的内容发布到最接近用户的网络边缘没提高响应速度
    (2)目前CDN主要缓存网站中的静态数据为主:如CSS、JS、图片、静态页面等等数据
    (3)通常来说CDN要达到以下几个目标:

        <1>可扩展性:性能上应该增加大量数据、用户、和实物的扩展能力,成本上应该可以用低廉的运营成本提供动态的服务能力和高质量的内容分发
        <2>安全性:减少因为攻击或其他而已行为造成的商业网站的业务中断
        <3>可靠性、响应和执行:能够处理可能的故障金额用户体验下降,通过负载均衡及时提供网络的容错机制

    (4)通常的CDN架构:一般公司都会有一个DNS解析服务器,这时这个DNS解析服务器通常把它重新CNAME解析到另外一个域名,而这个域名最终会被指向CDN全局中的DNS负载均衡放服务器,在由这个GTM来分配时那个地方的访问用户,返回给离这个用户最近的CDN节点。用户就直接去CDN节点访问静态文件
    (5)负载均衡:

        <1>负载均衡就是对工作任务惊醒平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器等,共同完成任务
        <2>通常有三种负载均衡,分别是链路负载均衡、集群负载均衡和操作系统负载均衡
        <3>负载均衡通过DNS的解析来完成,用户最终会访问那个web server由DNS Server控制(缺点是由于DNS在用户本地和Local DNS Server都有缓存,一旦某台Web Server挂掉,那么很难即使更新用户的域名解析结构,使得用户无法访问这个域名)
        <4>集群负载均衡时另外一种常见的负载均衡方式,它一般分为硬件负载均衡(使用一台专门的硬件设备来转发请求)(这些硬件设备一般非常昂贵)和软件负载均衡(在网络层利用ip地址进行地址转发,也可以根据用户的Http请求头来惊醒,也可以根据不同的URL来将请求转发到特定的机器或根据cookie信息来指定访问的机器,另外操作系统可以利用系统级别的软中断或硬件中断来进行负载均衡)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值