热门标签 | 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
  • 查看图片附件

推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
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社区 版权所有