Web应用网络模型

前言

这篇文章要介绍的是一个常见Web应用基本的过程跟网络模型,当然,对于多数的Client/Server应用也是适用的。延续这个系列文章的风格,只管通俗不管严谨。

概览

总体模型概览图:

DNS

用户点开/输入一个链接http://www.qq.com/index.html 之后,浏览器需要先找到www.qq.com这个域名对应的IP地址,因为计算机是通过IP作为门牌号的,而域名你可以认为是这个IP的别名,方便人类记忆使用。

一般来说,浏览器会先询问本地DNS缓存,如果没有记录过这个域名映射的IP,那就向本地的DNS网关询问,如果网关也不知道,就继续往上一层的DNS服务器询问,直到拿到这个IP地址。

一般来说,一台服务器处理的请求是有限的,因此大型的应用都会有多台proxy机器,我们可以让DNS服务器在第一个请求返回IP1,第二个请求返回IP2,……这样用户的请求就会均匀的落在这些机器上,这个就是DNS负载均衡。CDN就是通过智能DNS算出离用户最近的CDN节点的IP地址,这样用户可以访问一台离他最近的机器,大大节约连接时间。

代理与反向代理

一般来说,浏览器跟真正提供Web服务的机器是没有直接连接的,他们中间都会有代理跟反向代理。

大部分的公司都会内部的计算机都配置了代理服务器,其作用是所有内部的网络请求都是通过代理去连接对方服务器,可以在代理服务器这里做恶意请求/响应的拦截,还可以缓存内部网络所需的公共资源。

反向代理就是以代理服务器来接收网络连接请求,我们上下文称Proxy机器指的就是反向代理机器,Proxy机器收到请求后会经过一定的分析最后把请求内容转发给内网对应的Web服务器,Web服务器的HTTP响应包会先到Proxy机器,然后再到用户机器。 反向代理的好处是可以负载均衡,在它后边可以有多台工作的Web服务器,这样分层次之后,很多职责就明确很多了:Proxy机器负责负载均衡、拦截恶意请求、维持长连接,还可以屏蔽不工作的Web服务器;而Web服务器就只要关心自己处理的Web业务逻辑即可。 往往Proxy服务器跟用户机器保持长连接,这样可以节省用户每次跟服务器建立连接的消耗,而Proxy服务器跟Web服务器采用短连接的方式,这样可以有效节约Web服务器的资源。

Web server

Web server的职责就是根据用户的请求,返回其所需要的响应内容。往往Web server只涉及业务测逻辑的判断以及数据的组装,而真正的数据位于后端的存储Server(本文不涉及)。

对于一般应用来说,Web server返回的是动态产生的内容(每个用户都不一致的动态内容或者经常编辑变动的内容),如页面的HTML内容、JSON数据、XML数据等。而Javascript文件、CSS文件、图片这些静态资源(不根据用户而变动的资源)往往存放在CDN中。

浏览器

从浏览器发起请求,经历以上讲述的步骤处理后,浏览器发起到从Web sever返回的HTTP包。一般来说这个响应是返回网页的HTML。

接着浏览器开始解析收到的HTML包,HTML里边一般会把样式CSS跟脚本Javascript作为外链请求。本文不涉及页面渲染内容,主要为了讨论整体应用的模型,因此这块留以后探讨写文章。

CDN

从上边讨论知道,对于动态的内容,请求总是到Web server去动态计算获取内容,但是对于不随用户状态变化的内容我们把内容推送到CDN节点上。

静态资源的域名跟页面HTML的域名一般来说是不一样的,因为静态资源的请求需要解析到CDN节点去。我们假设主请求是:www.qq.com/index.html;CDN请求是cdn.qq.com/index.css。

一般Web应用把静态内容推到CDN有两种模式,一种是在上线前主动将内容推送到CDN节点,一种是CDN发现本地没有该文件时,回源到Web server机器取内容,然后缓存在他本地。

Web应用网络模型的更多相关文章

  1. w3cmark前端精彩博文周报 10.20-10.27

    w3cmark 官方Q群 145423956 | 官方微博 @w3cmark 自从最近微博屏蔽了我的站点域名,就很懒了.毕竟和不爽,一个纯技术站点还被认为不安全链接,还申诉无门,那些所谓的客服都是自动 ...

  2. 08.Web服务器-1.浏览器访问服务器显示页面的网络模型步骤解析

  3. 【读书笔记】2016.12.10 《构建高性能Web站点》

    本文地址 分享提纲: 1. 概述 2. 知识点 3. 待整理点 4. 参考文档 1. 概述 1.1)[该书信息] <构建高性能Web站点>: -- 百度百科 -- 本书目录: 第1章 绪论 ...

  4. 深入分析Java Web技术(1)

    BS网络模型的基本过程: 当我们在浏览器中输入"www.google.com"的时候,首先会请求DNS服务器对域名进行解析成都应的IP地址,然后根据这个IP地址在互联网上找到谷歌的 ...

  5. web开发必备-网络基础知识---记录一下

    1.osi 7层网络模型 2.socket 套接字编程 PS:一个从事web开发的人来说,我们是使用http协议来和服务器来进行交互.后面会详细的分析这个过程.

  6. Web应用开发工具及语言需要具备的功能探索

    1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...

  7. 【转载】Web应用工作原理

    问题描述:           Web应用工作原理   问题解决:          参考资料:http://blog.csdn.net/lcore/article/details/8964642   ...

  8. Web挖掘技术

      一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...

  9. HTTPS是如何保证连接安全:每位Web开发者都应知道的

    “HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题. 作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制. 它怎么保 ...

随机推荐

  1. Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理

    Atitit 贝叶斯算法的原理以及垃圾邮件分类的原理 1.1. 最开始的垃圾邮件判断方法,使用contain包含判断,只能一个关键词,而且100%概率判断1 1.2. 元件部件串联定律1 1.3. 垃 ...

  2. iOS-性能优化4

    UITableView性能优化技巧 Table view需要有很好的滚动性能,不然用户会在滚动过程中发现动画的瑕疵. 为了保证table view平滑滚动,确保你采取了以下的措施: 正确使用`reus ...

  3. 每天一个linux命令(28):tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...

  4. jQuery_04之第三方、自定义

    1.第三方插件: ①日期:layDate:不依赖于jquery  使用:html:<input class="laydate-icon">   css:引入laydat ...

  5. TypeScript实例

    interface Person { firstName: string, lastName: string } function greeter(person: Person) { return p ...

  6. POJ3069 POJ2586 解题报告(异曲同工的贪心算法)

    [POJ 3069](2586见下) 原题在此:http://poj.org/problem?id=3069 题目大意: 一个直线上有N个点.点i的距离是Xi.从这些点中选取若干个加上标记.要求:对于 ...

  7. javascript中数组的22种方法

    × 目录 [1]对象继承 [2]数组转换 [3]栈和队列[4]数组排序[5]数组拼接[6]创建数组[7]数组删改[8]数组位置[9]数组归并[10]数组迭代[11]总结 前面的话 数组总共有22种方法 ...

  8. Request 接收参数乱码原理解析二:浏览器端编码原理

    上一篇<Request 接收参数乱码原理解析一:服务器端解码原理>,分析了服务器端解码的过程,那么浏览器是根据什么编码的呢? 1. 浏览器解码 浏览器根据服务器页面响应Header中的“C ...

  9. android用讯飞实现TTS语音合成 实现中文版

    Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...

  10. Windows Azure Service Bus (1) 基础

    <Windows Azure Platform 系列文章目录> 我们在基于Windows Azure进行云端开发的时候,云端的软件通常都需要与其他软件进行交互.这些其他软件可能包括其他In ...