现在互联网的网络架构已经慢慢从传统的C/S架构转变为了更加便捷的B/S架构,从而大大简化了用户使用网络应用的难度。
B/S架构的两个好处:
1、客户端使用统一的浏览器(Browser)。有效的屏蔽了不同服务商提供给用户使用服务的差异性。
2、服务端(Server)基于统一的Http协议。由于使用统一的Http协议,所以基于Http的服务器就有很多,如:Apache、IIs、Nginx、Tomcat、JBoss等,这些服务器不用服务开发者单独来进行开发,可以直接拿来使用。服务开发者只需要关注提供服务的应用逻辑,其他一切平台和框架都可以直接拿来使用。所以也同样简化了服务提供者的开发。
B/S架构的介绍:
Http采用的是无状态的短连接的通信方式,通常情况下,一次请求就完成了一次数据的交互,通常也对应一个业务逻辑,然后这次通信就断开了。采用这种方式是为了能够同时服务更多的用户。
当前互联网应用每天都要处理上亿的用户请求,所以不可能每个用户访问一次之后就一直保持这个连接。
由于现在的架构设计,既要满足海量用户的访问请求,又要保持用户请求的快速响应,所以架构也就变的越来越复杂。主要的还是采用下图的架构设计。
B/S架构设计图
请求大概过程:当一个用户在浏览器输入:www.taobao.com这个URL(统一资源定位器)时,首先请求DNS(域名服务器)将这个域名解析成对应的IP地址,然后根据IP找到对应的服务器,向这个服务器发送一个GET请求,由这个服务器决定返回默认的数据资源给访问的用户。
在服务器端实际上还有一套很复杂的业务逻辑:服务器可能有很多台,到底指定哪台服务器来处理请求,这时就需要一个负载均衡设备来平均分配所有用户的请求。
还有请求的数据时存储在分布式缓存中,还是一个静态文件中,或者是在数据库中。
当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如:CSS、JS、IMG)时,又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器又会处理这些HTTP请求。
大体上一个用户请求会涉及这些基本的流程,每一个都会影响这些请求最终是否会成功。
网络架构的基本原则:
1、互联网上所有的资源都要用到一个URL表示。如果你要发布一个服务或者一个资源到互联网,让别人能够访问到,那么你首先必须要有一个在世界上独一无二的URL。
2、必须基于HTTP与服务端交互。
3、数据展示必须在浏览器中进行。
如何发起一个请求?
发起一个HTTP连接其实本质上就是建立一个Socket连接的过程。
其中,outputStream.write写的二进制字节数据格式要符合HTTP。浏览器在建立Socket连接之前,必须根据地址栏输入的URL的域名DNS解析程IP地址,再根据这个IP地址和默认的80端口与远程服务器之间建立Socket连接,然后浏览器根据这个URL组装程一个GET类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。
HTTP Header
HTTP Header控制着互联网成千上万的用户的数据的传输。最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。
常见的HTTP请求头
Accept-Charset:用于指定客户端接收的字符集;
Accept-Encoding:用于指定可接受的内容编码,如:Accept-Encoding:gzip.deflate
Accept-Language:用于指定一种自然语言,如:Accept-Language:zh-cn
Host:用于指定被请求资源的Internet主机和端口号
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:服务器发生不可预期的错误
浏览器一般可以通过F12调出开发人员工具来查看HTTP信息。
题外话:看了一会宋朝小谈,五代十国不是真的只有十国,十只不过是一个代数,而五代分别是梁、唐、晋、汉、周。
北方的游牧民族,在各个时代都有不同的种族也可以是不同的称呼:春秋战国时期叫戎狄、秦汉时叫匈奴、唐朝时叫突厥、五代十国开始叫契丹。