热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

B/S网络架构概述

1.目前BS网络架构大都采用类似下图所示的架构2.如何发起一个HTTP请求就是建立一个Socket通信的通过浏览器在建立Socket连接连接之前,必须根据地址栏输
1.目前B/S网络架构大都采用类似下图所示的架构



2.如何发起一个HTTP请求 就是建立一个Socket通信的通过
浏览器在建立Socket连接连接之前,必须根据地址栏输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认的80 端口与远程服务器简历Socket连接,然后再根据这个URL组装成一个get类型的Http请求头,通过outputStream.write 发送到目标服务器,服务器等待inputStream.rea放回数据,最后断开这个连接. 不同的浏览简历连接的方式不同,管理连接的方式也不同.既然发送一个Http请求就是简历一个Socket通信,那么我们就可以不利用浏览器手动就可以发送一个Http请求了.

1.使用 HttpClient2.linux 中 使用 curl +URL 就能够发起一个Http请求 可以加上 -I 来查看http协议头的信息,或者 -H来添加 HTTP


3.Http协议的解析



4.在浏览器中 查看http头的信息
1.Firefox中可以使用 firebug ,Httpfox这些插件来看看请求和返回的信息2.IE 中可使用 httpWatch,httpfox ,
3.Google中自带了F12 就可以打开了.


5.浏览器的缓存
1.为了获取最新的数据,我们可以使用Ctrl+F5 来直接向目标URL发送请求.这样就不会使用浏览器缓存数据.
2.如果服务器前端部署了一个缓存服务器,比如 Varnish代理,也可能直接使用缓存数据.
3.所以为了保存能够看到最新的数据,必须通过Http协议来控制了. 在发送http请求的请求头中加入 Cache-Control(控制浏览器) 和 Pragma (控制服务器) 两个参数来控制,浏览器和缓存代理服务器 必须服从命令请求最新的数据.


HTTP的请求头中会增加一些请求头

1 .Cache-Control / Pragma
     这个HTTP   Head 字段用于指定所有缓存机制在整个请求/ 响应链中必须服从的指令, 
如果知道该页面是否为缓存,不仅可以控制浏览器,还可以控制和HTTP 协议相关的缓存
或代理服务器。HTTP Head 字段有一些可选值




2.Expires
    Expires 通常的使用格式是Expires : Sat, 25 Feb 2012 12:22:17 GMT ,后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效,也就是浏览器在发出请求之前检查这 
个页面的这个字段,看该页面是否已经过期了,过期了就重新向服务器发起请求。


3.Last-Modified  /  Etag
   
Last-Modified 字段一般用于表示一个服务器上的资源的最后修改时间,资源可以是静态(静态内容自动加上 Last-Modified字段)或者动态的内容(如 Servlet 提供了一个 getLastModified 方法用于检查某个动态内容是否已经更新),通过这个最后修改时间可以判断当前请求的资源是否是最新的。一般服务端在响应头中返回一个 Last-Modified字段,告诉浏览器这个页面的最后修改时间.Etag: 与 Last-Modified 字段有类似功能的还有一个 Etag 字段,这个字段的作用是让服务端 给每个页面分配一个唯一的编号,然后通过这个编号来区分当前这个页面是否是最新的。 
这种方式比使用Last-Modified 更加灵活,但是在后端的Web 服务器有多台时比较难处理,
因为每个Web 服务器都要记住网站的所有资源,否则浏览器返回这个编号就没有意义


6.DNS域名解析
1.将域名解析成IP就属于DN解析的工作范畴.目前世界上整个互联网有几个DNS根域名服务器.
步骤
1.用户输入域名--->浏览器检测缓存(查看有无此域名解析过的IP地址)--->有(解析结束)
浏览器的缓存域名是有限制的,大小限制,时间限制.时间的限制可以通过TTL(Time To Live) 属性来设置.(TTL的初值通常是系统缺省值,是包头中的8位的域)

2.如果用户浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果一般在 C:\Window\System32\drivers\etc\hosts 文件里面.如果有 浏览器就会使用这个ip地址. 在linux 中这个配置文件是/etc/named.conf 修改这个文件可以达到同样的目的.

前两个步骤都是在本地完成的. 如果上面的步骤没有得到域名解析的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 值缓存在本地中)--->解析结束




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来解析域名一定要是单例模式.否则每次都解析,很耗时间)


8.域名记录的分类  A记录, MX记录,  CNAME记录 NS记录 TXT记录
  A:记录
 A表示的Address用来指定对应的Ip地址.    例如  item.taobao.com 指定到115.238.23.241
将switch.taobao.com记录到 121/14/23/231
A记录可以将多个域名解析到一个Ip地址.不能将一个域名解析到多个IP地址.


MX:记录表示
,Mail Exchange, 就是将某个域名下的邮件服务器窒息nag自己的Mail Server    例如: taobao.com域名的A记录的IP地址为 115.238.25.245. 
如果 MX 记录设置为 112.238.25.246,是 XXX@taobao.com的邮件路由,DNS会讲邮件发送到115.238.25.246所在的服务器.而正常通过web请求的话仍然解析到A记录IP地址


CNAME记录
全程是 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 解析


NS记录 
 为某个域名指定的DNS服务器, 也就是域名有指定的IP地址的DNS服务器解析.
(可能类似  Name Server 域名提供商 会指定某个域名有某个 DNS服务器去解析 然后返回IP地址)


TXT记录
为某个主机名或域名设置说明,,如可以为xulinbo.net设置TXT记录 为 "君山的博客|徐令波" 这样的说明


9 CDN工作机制
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).服务可用性.能够处理可能的故障,和用户体验的下降.通过负载均衡即使提供网络的容错机制.


10.CDN 架构



11负载均衡
 负载均衡: Load Balance 就是对工作任务进行平衡,均摊,到多个操作单元上执行,如 图片服务器,应用服务器,共同完成工作任务. 它可以提高服务器响应的速度和利用效率.解决网络拥堵问题.

分类:
A:链路负载均衡:
 就是前面提到的通过DNS解析成不同的IP.然后用户根据Ip来访问不同的目标服务器: 缺点:如果一种一条webService 挂掉了,由于LDNS有缓存,那么用户就无法访问 这个域名.
优点:GDNS (全局DNS 服务器)给出的webServer IP后 用户可以直接访问目标服务器.速度快




B:集群负载均衡:
  分为:
硬件负载均衡 :
使用一台专门的硬件设备来转发请求.
缺点: 价格贵,在超出服务极限时候不能动态扩容.如F5
优点:性能非常好,稳定.




软件负载均衡:
使用最普遍的一种方式.直接使用廉价的PC就可以搭建
缺点:一般一次访问请求要经过多次代理服务器(使用Ip进行转发),增加的网络延时
有点:成本非常低





C:操作系统负载均衡:
利用操作系统基本的软中断和硬件中断来达到负载均衡,如可以设置多队列网卡来等来实现.
  • 大小: 53.6 KB
  • 大小: 128.1 KB
  • 大小: 95.5 KB
  • 大小: 32.9 KB
  • 大小: 75.6 KB
  • 大小: 21 KB
  • 大小: 16.6 KB
  • 大小: 34.2 KB
  • 查看图片附件

推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 运维入门
    2019独角兽企业重金招聘Python工程师标准本文内容遵从CC版权协议转载请注明出自oschina.netedwinaclaublog#运维入门一个 ... [详细]
  • 凡客诚品官方网站的前端改进建议
    打开http:www.vancl.com发现采用的Asp.net,这点我感到很欣慰,毕竟国内采用.net技术体系的优秀网站少之又少。好奇之余右键-查看源 ... [详细]
  • 分布式系统关注点——360°全方位解读「缓存」
    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~  本文长度为3578字,建议阅读10分钟。坚持原创,每 ... [详细]
  • Varnish搭建CDN内容分发网络
    概述:1.CDN内容分发网络CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • phpcomposer 那个中文镜像是不是凉了 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • JSCoverage-->JavaScript测试覆盖率检测工具(转),Go语言社区,Golang程序员人脉社 ... [详细]
  • http会话(session)详解by:授客QQ:1033553122会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作 ... [详细]
author-avatar
周月醉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有