从 C/S 发展到 B/S 的好处
1. 客户端使用统一的浏览器(Browser).
2. 服务端 (Server) 基于统一的 HTTP 协议, Apache,IIS,Nginx,Tomcat,JBoss, 这些服务器和通用框架可以直接拿来用.
B/S 的网络架构
与大多数传统 C/S 互联网应用程序采用的长连接的交互模式不同, HTTP 协议采用无状态的短连接的通讯方式, 一次请求完成一次数据交互, 通常也是对应一个业务逻辑, 完成之后通信连接就断开. 既要满足海量用户的访问请求, 又要保持用户请求的快速响应, 所以网络架构越来越复杂.
不管网络怎么复杂, 始终有些固定不变的原则要遵守:
互联网上所有的资源都要用一个 URL(统一资源定位符)来表示, 它包含了整个互联网的架构精髓.
必须基于 HTTP 协议与服务端交互.
数据展示必须在浏览器中进行.
如何发起一个请求?
发起一个 HTTP 连接本质上就是建立一个 Socket 连接, 那么就可以模拟浏览器发送 HTTP 请求, HttpClient 就是一个开源的通过程序实现的处理 HTTP 请求的工具包.
处理 JAVA 中使用非常普遍的 HttpClient 还有很多类似的工具, 如 Linux 中的 curl 命令, curl + URL 就可以发起一个 HTTP 请求.
HTTP 协议解析
常见的 HTTP 请求头:
请求头 | 说明 |
---|---|
Accept-Charset | 用于指定客户端接受的字符集 |
Accept-Encoding | 用于指定可接受的内容编码, 如: Accept-Encoding:gzip.deflate |
Accept-Language | 用于指定一种自然语言, 如: Accept-Language:zh-cn |
Host | 用于指定被请求资源的 Internet 主机和端口号, 如: Host:www.taobao.com |
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 | 服务器出现不可预期错误 |
查看 HTTP 信息的工具
Firefox Chrome
浏览器缓存机制
我们在浏览一个页面发现有异常的情况下, 通常会考虑是不是浏览器做了缓存, 一般按 Ctrl+F5 组合键就可以重新请求一下这个界面
1. 这个组合键会直接向目标 URL 发送请求, 而不会使用缓存数据
2. 即使请求发送到服务端也可能访问到的是缓存数据, 当应用服务器的前端部署了缓存服务器时, 如 Varnish 代理, 那么 Varnish 代理就可以直接访问缓存数据, 所以为了保证用户能够看到最新的数据, 必须通过 HTTP 协议来控制
Ctrl+F5 组合键实质是在请求头增加以下信息:
Progma:no-cache
Cache-Control:no-chche // 优先级较高
DNS 域名解析
将域名解析成 IP 地址
详细步骤如下:
当一个用户在浏览器中输入 www.abc.com 时, 按下回车键
浏览器检查缓存中有没有对应的相关域名解析过的 IP 地址, 如果缓存有, 解析过程结束.
用户的浏览器缓存中没有, 浏览器检查在操作系统中是否有这个域名对应的 DNS 解析结果.
windows:C:\Windows\System32\drivers\etc\hosts
linux:/etc/named.conf
上诉步骤都是在本机完成的, 在下图没有体现
DNS 域名解析. png
我们在网络中的 "DNS 服务器地址", 操作系统会将域名发送给这里设置的 LDNS,LDNS 通常会提供你本地互联网接入一个 DNS 解析服务
windows:ipconfig
linux: cat /etc/resolv.conf
如果 LDNS 还没有命中, 就直接到 Root Server 域名服务器请求解析
Root Server 域名服务器返回给 LDNS 一个查询域的主域名服务器(gTLD Server).
gTLD 是国际顶级域名服务器, 如. com .cn .org, 全球只有 13 台左右
LDNS 再向上一步返回的 gTLD Server 发送请求
接受请求的 gTLD Server 查找并返回此域名对应的 Name Server 对应的地址, 这个 Name Server 通常就是注册的域名服务器
Name Server 域名服务器会查询域名和 IP 映射关系, 正常情况下会根据域名得到目标 IP 记录, 连同一个 TTL 值返回给 DNS Server 域名服务器
返回该域名对应的 IP 和对应的 TTL 值, LDNS Server 会缓存这个域名和 IP 的对应关系, 缓存的时间由 TTL 值控制
将解析结果返回给用户, 用户根据 TTL 值缓存在本地系统缓存中, 域名解析过程结束.
跟踪域名解析过程:
windows:nslookup
linux:dig url
清除缓存的域名: ipconfig/flushdns
linux:/etc/init.d/nscd restart
重启仍然是解决很多问题的第一选择!
域名解析的几种方式
A 记录 | Address, 用于指定对用域名的 IP |
---|---|
MX 记录 | Mail Exchange, 将某个域名下的邮件服务器指向自己的 Mail Server |
CNAME(别名解析) | 将一个域名或者多个别名 |
NS 记录 | 为某个域名指定 DNS 解析服务器 |
TXT 记录 | 为某个主机或域名设置说明 |
CND(Content Delivery Network)工作机制
构筑在现有 Internet 上的一种先进的流量分配网络, 目的是将网站内容分发到最近接用户的网络 "边缘", 使用户可以就近取得所需内用, 提高用户访问网站的响应速度.
当一个代理服务器能够代理外部网络上的主机, 访问内部网络时, 这种代理服务的方式称为反向代理服务
CDN=Mirror(镜像)+Cache(缓存)+GSLB(整体负载均衡)
目前 CDN 都以缓存网站中的静态数据为主, 如 CSS JS 图片和静态页面数据, 用户在主网站在上请求到动态内容后再从 CDN 上下载这些静态数据, 从而加速网页数据的下载速度, CDN 可以达到以下几个目标:
1. 可扩展性
2. 安全性
3. 可靠性, 响应和执行.
负载均衡
对工作任务进行平衡, 分摊到各个操做单元上执行, 共同完成工作任务. 可以提高服务器响应速度及利用效率, 避免软件或者硬件出现单点失效, 解决网络拥塞问题, 实现地理位置无关性, 为用户提高一致的访问质量.
通常有三种负载均衡架构:
链路负载均衡: DNS 解析成不同的 IP, 用户根据这个 IP 来访问不同的目标服务器
集群负载均衡: 硬件负载均衡(成本较高) 软件负载均衡(网络拥塞)
操作系统负载均衡: 利用操作系统级别的软中断或者硬件中断来达到负载均衡
程序媛小白一枚, 如有错误, 烦请批评指正!(#.#)
来源: http://www.jianshu.com/p/0ed4c46f7a56