静水港湾 發表於 2019-1-9 09:50:00

Web技术的发展 网络发展简介(三)

<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">在上一篇文章中,对TCP/IP通信协议进行了简单的介绍</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">通信协议是通信的理论基石,计算机、操作系统以及各种网络设备对通信的支持是计算机网络通信的物质基础</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">而web服务则是运行于应用层,借助于应用层的协议,建立了客户端与服务器,对等层之间的联系,底层的硬件以及软件为其提供服务。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">本文对web发展架构进行简单介绍,并且对web开发技术进行简单介绍,不是要介绍细节,而是要展示一个宏观的概念。</span></div>
<h3><span style="font-size: 18px">WEB架构起源</span></h3>
<div style="line-height: 200%"><span style="font-size: 15px">80年代中期ARPANET才逐渐开始进入民用</span></div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">20世纪90年代之前,因特网的主要使用者还是研究人员、学者和大学生</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">他们登录远程主机,在本地主机和远程主机之间传输文件,收发新闻,收发电子邮件等,但是因特网基本上不为学术界和研究界之外所知。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">此时,计算机网络通信的底层技术已经相对比较成熟,一个叫做Tim的人,开始尝试建立互联世界的文档</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">其实他并不是第一个有这个想法的人,但是在此之前,鉴于计算机科学技术的发展限制,都并没有成功</span></div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>1989</strong></span><span style="font-size: 15px">年</span><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>CERN</strong></span><span style="font-size: 15px">(欧洲粒子物理研究所)中由</span><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>Tim Berners-Lee</strong></span><span style="font-size: 15px">领导的小组</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">提交了一个针对Internet的新协议和一个使用该协议的文档系统</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">该小组将这个新系统命名为</span><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>Word Wide Web</strong></span><span style="font-size: 15px">,它的目的在于使全球的科学家能够利用Internet交流自己的工作文档。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这个新系统被设计为允许Internet上任意一个用户都可以从许多文档服务计算机的数据库中搜索和获取文档。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1990年末,这个新系统的基本框架已经在CERN中的一台计算机中开发出来并实现了</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1991年该系统移植到了其他计算机平台,并正式发布。</span></div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">1989年,Tim提出Web计划,1991年正式发布,速度真的好快。</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>HTML, HTTP, URI,浏览器,web服务器,就此发明问世</strong></span></div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>Word Wide Web又被称为“Web”、“WWW”、“W3”,中文名字为“万维网”,"环球网"等,常简称为Web</strong></span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">万维网并不等同互联网,万维网只是互联网所能提供的服务其中之一,是靠着互联网运行的一项服务。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所有连接到网络上的计算机,通过运行的web服务器程序,提供给内容的所有内容、服务,才是我们说的万维网</span></div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">分为Web客户端和Web服务器程序, WWW可以让Web客户端(常用浏览器)访问浏览Web服务器上的页面。</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">计算机网络的互连,让全世界各地的计算机能够进行通信</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">而web则让全世界各地的计算机能够进行超文本文档的共享,完成了计算机网络内容的互连</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">web的发明,让互联网开始爆炸式增长</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Web的起源某种程度上可以认为是“一蹴而就”的(我加引号了),不过前提是计算机网络已经发展到了一定阶段,具备了先决条件,而且已经累积了很多计算机科学方面的理论</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Tim搭建了web的雏形,设计了web的架构,是BS结构的始祖。</span></div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>web的基本核心就是内容的共享</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比如,你问你的语文老师,XXX的作者是谁。</span></div>
<div style="line-height: 200%">
<ul>
<li><span style="font-size: 15px">你就是请求发起者,语文老师就是请求应答者;</span></li>
<li><span style="font-size: 15px">问题就是资源的标识符;</span></li>
<li><span style="font-size: 15px">而你通过语言表达出来,普通话就是协议;</span></li>
<li><span style="font-size: 15px">而作者到底是谁,则是被请求的内容;</span></li>
<li><span style="font-size: 15px">而内容也有表示形式,比如说出来?写在纸上交给你?则是超文本格式;</span></li>
</ul>
</div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_462b" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093337689-401923939.png" alt="image_5c35493c_462b" width="836" height="379" border="0"></div>
<div style="line-height: 200%"><span style="font-size: 15px">BS形式共享超文本文档的架构方案,定义了浏览器客户端和服务器程序是两个通讯主体,双方通过HTTP协议进行对话,通过URI进行资源定位,消息通过HMTL格式化。</span></div>
</div>
<h3><span style="font-size: 18px">web核心组成 </span></h3>
<div style="line-height: 200%">
<ul>
<li><span style="font-size: 15px">URI 解决了文档的命名和寻址识别问题</span></li>
<li><span style="font-size: 15px">HTTP解决了浏览器与服务器应用层之间的交流问题</span></li>
<li><span style="font-size: 15px">HTML 定义了超文本文档的表示</span></li>
<li><span style="font-size: 15px">浏览器用于发起请求,并且解析文档</span></li>
<li><span style="font-size: 15px">服务器用于保存文档</span></li>
</ul>
</div>
<h4><span style="font-size: 16px">URI </span></h4>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>统一资源标识符(Uniform Resource Identifier,或URI)</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>URI</strong></span><span style="font-size: 15px">采用一种特定语法标识一个资源的字符串,所标识的资源可能是服务器上的一个文件,也可能是一个邮件地址、新闻消息、图书、人名、互联网上的主机或者任何其它内容。&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">重点在于唯一标识</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>URI有两种形式,URL和URN</strong></span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_46e2" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093338031-639522763.png" alt="image_5c35493c_46e2" width="274" height="152" border="0"></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>URL是Uniform Resource Locator的缩写,译为“统一资源定位符”</strong></span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">URL的格式由下列三部分组成:</span></div>
<div style="line-height: 200%"><ol>
<li><span style="font-size: 15px">协议(或称为服务方式);</span></li>
<li><span style="font-size: 15px">存有该资源的主机名称(域名)或者IP地址(有时也包括端口号);</span></li>
<li><span style="font-size: 15px">主机资源的具体地址,如目录和文件名等;</span></li>
</ol></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>URN是统一资源名称 (Uniform Resource Name, URN)</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>URN它命名资源但不指定如何定位资源</strong></span></div>
<div style="line-height: 200%">&nbsp;</div>
</div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">URI描述了这么一个东西:可以用来唯一标识一个资源,URL和URN是他的两种具体形式</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所以一个URI可能是一个URL,也可能是一个URN,或者二者兼具。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">但是任何一个URL或者URN他们肯定都是URI</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比如,“阿里巴巴马云”当你听到这个名字的时候,你不知道他是谁吗?这就是唯一标识一个资源URN</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">但是马云在哪里?电话号码多少?你是不知道的,虽然“马云”两个字可以唯一标识他本人,但是你联系不上他</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">如果你有了他家的地址呢?XXX小区XXX号,你就可以定位马云的位置了,这就是URL</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">不管是“阿里巴巴马云”还是马云家的地址XXX小区XXX号,他们都是URI</span></div>
<div style="line-height: 200%">
<h4><span style="font-size: 16px">HTTP协议 </span></h4>
<div style="line-height: 32px"><span style="font-size: 15px">设计HTTP最初的目的是为了提供</span><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>一种发布和接收HTML页面的方法</strong></span></div>
<div style="line-height: 32px"><span style="font-size: 15px">最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET。</span></div>
<div style="line-height: 32px"><span style="font-size: 15px">GET /index.html</span></div>
<div style="line-height: 32px">
<div style="line-height: 32px">
<div style="line-height: 32px"><span style="font-size: 15px">表示,TCP 连接(connection)建立后,客户端向服务器请求(request)网页index.html。</span></div>
<div style="line-height: 32px"><span style="font-size: 15px">协议规定,服务器只能回应HTML格式的字符串,不能回应别的格式。</span></div>
</div>
</div>
<div style="line-height: 32px"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>HTTP协议就是浏览器与web服务器两个应用之间通信的“协议”“语言”</strong></span></div>
<div style="line-height: 32px"><span style="font-size: 15px">计算机不能像人类一样沟通,他只是0,1的世界,想要交流就必须制定通信的格式,而这个HTTP协议就是浏览器与Web服务器的沟通方式&nbsp;</span></div>
<div style="line-height: 32px"><span style="font-size: 15px">这就是它的根本,如同你对别人竖大拇指表示称赞,服务器看到GET方法就会返回数据,这就是浏览器与服务器沟通交流的方式。</span></div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">换句话说,人类用语言和文字进行沟通,CS世界中的各种协议,都是计算机的沟通方式。</span></div>
<h4><span style="font-size: 16px">HTML </span></h4>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>HTML超文本标记语言,标准通用标记语言下的一个应用</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">标准通用标记语言(简称“通用标言”),是一种定义电子文档结构和描述其内容的国际标准语言;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">早在万维网发明之前“通用标言”就已存在,HTML也是由他发展演变而来,</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>可以简单理解为一种借助于标记符格式化电子文档的语言</strong></span><span style="font-size: 15px">,平时的书写中你可以换行,可以设置标题、段落,但是在电子文档中如何表达?</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">计算机不能像人类一样用眼分辨,用脑思考,想要说明这是一个标题,你必须显式的告诉他</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">标记语言就是一种非常合适的解决方案</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比如HTML中的"&lt;h1&gt;这是个标题&lt;/h1&gt;",h1是标签,标签中的内容就是标题,我们使用h1来标志这是一个一级标题,当计算机程序解读到&lt;h1&gt;时,就可以意识到这是个标题</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">之所以没有直接使用通用标记语言,是因为他过于复杂,HTML是简化的变种。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">需要注意,电子文档的出现远比web起源要早</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">电子文档的最初动机就是“将书稿、文件塞到计算机中”,一份文件,有内容也有格式(文字字体,大小,间距等)</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">电子化的目的是通过计算机呈现,所以电子化不仅仅需要记录文件的内容,还需要记录内容的格式(样式),你讲两行字之间空白多一点,行间距就大一点,在计算机中如何呈现?</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">HTML就是标记语言的一种应用,他也只是一种电子文档。</span></div>
<h4><span style="font-size: 16px">浏览器 </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">浏览器就是一个应用软件,他可以通过HTTP协议与服务器进行交互</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">根本功能也很简单,发送HTTP请求,解析显式获得的响应数据</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1991年,世界上第一个浏览器World Wide Web(后改名为Nexus)由Tim Berners-Lee创建于欧洲核子物理实验室</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">同时他还写了第一个网页服务器httpd</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这个浏览器并不支持图片的显示</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1993年,伊利诺伊大学厄巴纳-香槟分校的NCSA组织发表NCSA Mosaic,简称Mosaic</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">并于1997年1月7日正式终止开发和支持</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Mosaic发布后,到底怎么分辨你的浏览器是否支持显示图片呢?UserAgent就是在这样的场景下诞生了</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Mosaic将自己标志为NCSA_Mosaic/2.0(windows 3.1)</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这也是我们使用浏览器发送请求的时候请求头有一个字段为UserAgent的最开始原因</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">著名的浏览器如下,国内的浏览器厂商都是用国外的浏览器内核</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">浏览器发展历史:</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">http://www.cnw.com.cn/zhuanti/2009-ie/</span></div>
<div style="line-height: 200%">
<table style="border-top: 2px solid rgba(128, 128, 128, 1); border-right: 1px solid rgba(128, 128, 128, 1); border-bottom: 2px solid rgba(128, 128, 128, 1); border-left: 1px solid rgba(128, 128, 128, 1); border-image: none; width: 50%; line-height: 200%; margin-left: 0; border-collapse: collapse; -ms-word-break: break-all; empty-cells: show; background-color: rgba(0, 0, 0, 0)">
<tbody style="line-height: 200%">
<tr style="line-height: 200%">
<td style="padding: 4px; border: 1px solid rgba(128, 128, 128, 1); border-image: none; line-height: 200%"><span style="font-size: 15px">1991</span></td>
<td style="padding: 4px; border: 1px solid rgba(128, 128, 128, 1); border-image: none; line-height: 200%"><span style="font-size: 15px">www(nexus)</span></td>
</tr>
<tr style="line-height: 200%">
<td style="padding: 4px; border: 1px solid rgba(128, 128, 128, 1); border-image: none; line-height: 200%"><span style="font-size: 15px">1993</span></td>
<td style="padding: 4px; border: 1px solid rgba(128, 128, 128, 1); border-image: none; line-height: 200%"><span style="font-size: 15px">Mosaic</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">1994</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">Netscape</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">1996</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">IE</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">1996</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">Opera</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">2003</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">safari</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">2004</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">firefox</span></td>
</tr>
<tr style="line-height: 200%">
<td style="line-height: 200%"><span style="font-size: 15px">2008</span></td>
<td style="line-height: 200%"><span style="font-size: 15px">chrome</span></td>
</tr>
</tbody>
</table>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">有一篇很有意思的文章, 可以一看</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">http://www.cnblogs.com/ifantastic/p/3481231.html</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">https://webaim.org/blog/user-agent-string-history/</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">chrome可以通过在浏览器地址栏输入“<span style="color: rgba(51, 51, 51, 1); font-family: &quot;PingFang SC&quot;, &quot;Lantinghei SC&quot;, &quot;Microsoft YaHei&quot;, arial, 宋体, sans-serif, tahoma; background-color: rgba(255, 255, 255, 1)">about:version</span>”查看UA信息</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">还可以通过网站查看:http://www.useragentstring.com/</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_3798" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093338482-55169887.png" alt="image_5c35493c_3798" width="603" height="225" border="0"></div>
<h4><span style="font-size: 16px">服务器 </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">Web服务器是可以向发出请求的浏览器提供文档的程序,也是一种软件。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">遵循HTTP协议,接受浏览器客户端发起的请求,并按照HTTP协议的规定响应的一种软件。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">现在也把提供web服务的专用计算机叫做web服务器,提供web服务的程序叫做web容器。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">https://en.wikipedia.org/wiki/Web_server中有关于web server的介绍</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">还可以通过:https://w3techs.com/technologies/overview/web_server/all&nbsp; 查看目前各大web Server的使用率</span>&nbsp;&nbsp;</div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_1198" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093338814-1049641928.png" alt="image_5c35493c_1198" width="444" height="427" border="0"></div>
<div style="line-height: 200%"><span style="font-size: 15px">现代的web 容器都是强大而复杂的,但是根本是相同的,那就是接受HTTP请求,并且按照HTTP协议进行响应。</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%">
<h3><span style="font-size: 18px">WEB周边组件-域名与DNS </span></h3>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>域名(Domain Name),简称域名、网域</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>是由一串用点分隔的名字组成的,表示Internet上某一台计算机或计算机组的名称</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">用于在数据传输时标识计算机的位置</span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">我们知道计算机在网络中的通信需要借助于ip地址,但是ip地址即使是点分十进制,依然难以记忆</span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">域名就是为了简化记忆,更加便于使用</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">简言之,域名等于一个ip的名字</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">如果每个ip相当于电话号码,那么域名就是姓名</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_311f" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093339151-1964854385.png" alt="image_5c35493c_311f" width="419" height="166" border="0"></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">姓名和号码之间必然是要有映射关系</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">早期,网络上计算机个数很少</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">将对应关系保存在一个共享的静态文件hosts中即可,再由hosts文件来实现网络中域名的管理</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">也就是说,大家通过共享这个文件来完成ip与域名的映射,这个hosts文件就是域名IP的解析器</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">但是随着网络上计算机的增多,显然不能将所有的域名与ip地址的对应关系都记录在文件中</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所以出现了DNS(Domain Name System),为了解决互联网上域名与IP地址的映射解析</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">百度百科:“<span style="line-height: 24px">域名解析服务,最早于1983年由保罗·莫卡派乔斯发明;</span></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">原始的技术规范在882号因特网标准草案(RFC 882)中发布。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px"><span style="line-height: 24px">在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。</span>”</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">现在的操作系统中仍旧保留hosts这一文件,只不过不再是全网的了,已经有专门的DNS了</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_742a" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093339484-208262142.png" alt="image_5c35493c_742a" width="490" height="204" border="0"></div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%"><span style="font-size: 15px">域名采用树状的层级结构,任何一个连接在互联网上的主机和路由器,都有一个唯一的层次结构名字,也就是域名</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这里的域(domain)是名字空间中的一个可被管理的划分。域还可以划分为子域,而子域还可以继续被划分为子域</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这就形成了子域,二级域,三级域...</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">每个域名都由一个标号构成,标号之间使用小数点分割,如下图所示</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_793" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093339786-113961833.png" alt="image_5c35493c_793" width="492" height="167" border="0"></div>
<div style="line-height: 200%"><span style="font-size: 15px">可以认为,将域名空间按照顶级域名进行划分,形成了域名的基本格局,就像“四大洋,七大洲”</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">也可以理解成国家行政区域的划分。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">中国</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">江苏.中国</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">南京.江苏.中国</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所以要深入理解域的概念,顶级域的并集就是全部的域空间</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比如说,全世界共有XXX个国家和地区,那么,就是只有那么多个国家和地区</span></div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>任何一个域名,都是一个顶级域名的子域,顶级域的划分,完成了域名空间的顶层管理</strong></span></div>
</div>
<div style="line-height: 200%"><span style="font-size: 16px">DNS规定,</span><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>每一个标号不允许超过63个字符,也不区分大小写</strong></span><span style="font-size: 15px">,标号中除了使用连字符外不能使用其他的标点符号</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>级别最低的标号位于域名最左边,级别最高的顶级域名位于域名最右边</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">既不规定每一个域名需要有多少个下级域名</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">也不固定每一级的域名代表什么意思</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">各级域名由他的上级域名管理机构进行管理</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">最高的顶级域名由ICANN进行管理</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">叶子节点指向物理机器</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_3367" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093340202-1049095099.png" alt="image_5c35493c_3367" width="688" height="330" border="0">&nbsp;&nbsp;</div>
<h4><span style="font-size: 16px">DNS解析过程 </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">上面介绍的域名体系是逻辑上的,DNS服务器的运行按照“区”来进行划分</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">域名的体系结构按照“域”来划分,服务器实际的查询解析,则是按照“区”,</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">简言之,逻辑上就相当于按照行政区域划分,实际管辖上则是分片区管理</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">区可能小于或者等于一个域,但是肯定不会大于域</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">一个区中所有的节点必须是联通的,每一个区设置相应的</span><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>权限域名服务器(authoritative name server),</strong></span><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>用来保存该区中所有的域名与IP地址的映射</strong></span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_4ab0" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093340602-64007731.png" alt="image_5c35493c_4ab0" width="1016" height="513" border="0"></div>
<h4><span style="font-size: 16px">域名服务器分类 </span></h4>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>根域名服务器</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">最高层次的域名服务器,最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">如果所有的根域名服务器挂掉,整个互联网将会瘫痪</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>顶级域名服务器</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">管理在该顶级域名服务器注册的所有的二级域名,收到请求后,给出响应(要么直接返回结果,要么给出下一步应该查询的域名服务器的IP地址)</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>权限域名服务器</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">负责一个区的域名服务器</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">如果一个权限域名服务器不能给出最后的查询结果,会通知发出请求的DNS客户,下一步应该找哪个权限域名服务器</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>本地域名服务器</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">本地域名服务器不是域名管理层次中的一环,主要作用是为了高效节能</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">每个互联网ISP ,每个大学、机构都可以有一个本地域名服务器</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">windows中关于DNS的设置就是本地域名服务器,也叫做默认域名服务器</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_db8" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093341013-1441699035.png" alt="image_5c35493c_db8" width="867" height="674" border="0">&nbsp;&nbsp;</div>
<h4><span style="font-size: 16px">查询方式 </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">查询方式共有两种:迭代查询,递归查询</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_5e68" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093341423-1588211104.png" alt="image_5c35493c_5e68" width="617" height="499" border="0"></div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>迭代查询--&gt;我不知道你找XXX去,一直踢皮球</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>递归查询--&gt;我去帮你查,一直很仗义</strong></span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">主机向本地域名服务器的查询一般都是采用递归查询</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">本地域名服务器向根域名服务器的查询通常是采用迭代查询</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
</div>
</div>
<div style="line-height: 200%"><span style="font-size: 15px">简单理解就是域名逻辑上是树形的层级结构,按照域进行划分</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">DNS域名服务器按照区进行划分,每个区小于等于一个域,对域进行分片管理</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">DNS的域名服务器就是与域名层次等级结构相对应的一个服务器结构体系&nbsp;&nbsp;</span></div>
</div>
<h3><span style="font-size: 18px">WEB技术发展 </span></h3>
<div style="line-height: 200%"><span style="font-size: 15px">最初,所有Web页面都是静态的</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">用户请求一个资源,服务再返回这个资源,在浏览器中主要展现的是静态的文本或图像信息。</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>GIF图片则第一次为HTML页面引入了动态元素</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这些网站的Web页面只是电子形式的文本,内容生成之后就是固定不变的,然后发布到多处</span></div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493c_41ac" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093341816-1968045353.png" alt="image_5c35493c_41ac" width="696" height="434" border="0"></div>
<div style="line-height: 200%"><span style="font-size: 15px">在浏览器发展的最初阶段,Web页面的这种静态性不成问题,科学家只是使用Internet来交换研究论文,大学院校也只是通过Internet在线发布课程信息等</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">随着网页从学术机构走向公众社会,网页承载的功能便超出了学术范围而变得愈加丰富,因此早期网页的局限性也逐渐显露出来</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">学术自然是枯燥的,走向社会就不一样了,娱乐生活等等,所以用户自然对web能提供的服务有了更多的需求(期望),这是一个很自然的需求演变</span></div>
<h4><span style="font-size: 16px">CGI </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">人们当然不满足于访问web服务器上的静态资源</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1993年CGI(Common Gateway Interface)出现了</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">CGI定义了Web服务器与外部应用程序之间的通信接口标准,Web服务器可以通过CGI执行外部程序,让外部程序根据Web请求内容生成动态的内容。</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">通常的处理流程是:</span></div>
<div style="line-height: 200%"><ol style="line-height: 200%">
<li style="line-height: 200%"><span style="font-size: 15px">通过Internet把用户请求送到web服务器。</span></li>
<li style="line-height: 200%"><span style="font-size: 15px">web服务器接收用户请求并交给CGI程序处理。</span></li>
<li style="line-height: 200%"><span style="font-size: 15px">CGI程序把处理结果传送给web服务器。</span></li>
<li style="line-height: 200%"><span style="font-size: 15px">web服务器把结果送回到用户。&nbsp;</span></li>
</ol></div>
</div>
<div style="line-height: 200%"><img style="display: inline; background-image: none" title="image_5c35493d_6fd1" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093342202-1324465818.png" alt="image_5c35493d_6fd1" width="894" height="334" border="0"></div>
<div style="line-height: 200%"><span style="font-size: 15px">服务器在认为这是一个CGI请求时</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">会调用相关CGI程序,并通过环境变量和标准输出将数据传送给CGI程序</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">CGI程序处理完数据,生成html,然后再通过标准输出将内容返回给服务器,服务器再将内容交给用户,CGI进程退出</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">在这个过程中,服务器的标准输出对应了CGI程序的标准输入,CGI程序的标准输出对应着服务器的标准输入。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">可以理解为,请求转变为了CGI程序的参数(以环境变量的形式传递),CGI的输出变成了web服务器的响应(CGI程序中直接向标准输出打印HTML页面)</span></div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>CGI是一种标准,并不限定语言。所以Java、PHP、Python都可以通过这种方式来生成动态网页。</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">它规定了web服务器向CGI程序发送数据的格式约定(比如环境变量中有哪些值),以及响应的约定等内容(生成HTML页面)。</span></div>
</div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>为什么使用CGI接口,而不是直接web服务器就提供这些功能?</strong></span></div>
<div style="line-height: 200%"><span style="font-size: 15px">如果web服务器提供这些功能,必然会导致web服务器的设计与开发过于复杂</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">而且,一旦web服务器实现了这些功能,开发者势必要按照web服务器提供的技术框架基础下进行开发,大大限制了生产力</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所以借助于CGI接口,即能够提供调用外部程序处理的能力,也将这些功能从web服务器中解耦,解放了生产力。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">可想而知,有了CGI,web发生了多大的变化</span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">不仅仅可以提供静态的资源了,还能够进行动态的处理,数据的计算等</span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px"><br>
                </span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">但是,每当一个CGI请求过来时,web服务器会fork一个子进程来执行相应的CGI程序,当请求结束时,该CGI进程也随之结束
                        </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这样不停fork进程的开销是非常大的,这是造成CGI程序效率低下的主要原因
                        </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">后来出现了fastcgi,是改良版的CGI
                        </span></div>








                </div>
<div style="line-height: 200%"><span style="font-size: 15px">而且,试想一下,当你要用C语言或者C++等等去一点点的处理html的内容,去拼接,去打印,是不是很辛苦?
                </span></div>
<div style="line-height: 200%">
<div style="line-height: 200%">
<p style="margin: 0; line-height: 200%">      <span style="color: rgba(139, 0, 139, 1); font-weight: 600">char</span> MimeType[]=<span style="color: rgba(46, 139, 87, 1); font-weight: 600">"text/html"</span>;
</p>
<p style="margin: 0; line-height: 200%">      fprintf(stdout, <span style="color: rgba(46, 139, 87, 1); font-weight: 600">"Content-type: %s\r\n\r\n"</span>, MimeType);<span style="color: rgba(119, 136, 153, 1); font-style: italic">//输出响应头,响应头之后要加两个"\r\n"</span>
</p>
<p style="margin: 0; line-height: 200%">      fprintf(stdout, <span style="color: rgba(46, 139, 87, 1); font-weight: 600">"&lt;html&gt;&lt;head&gt;&lt;title&gt;这是一个CGI小程序&lt;/title&gt;&lt;/head&gt;\n"</span>);
</p>
<p style="margin: 0; line-height: 200%"><code style="line-height: 200%">      fprintf(stdout, <span style="color: rgba(46, 139, 87, 1); font-weight: 600">"&lt;body&gt;这是一个由C编写的CGI小程序&lt;/body&gt;&lt;/html&gt;\n"</span>);</code></p>







</div>







</div>
<div style="line-height: 200%"><span style="font-size: 15px"><span style="color: rgba(66, 66, 66, 1)">做过js拼接的就可以理解,但是很显然,之前的CGI比你做过的js的拼接还要恶心</span>&nbsp;&nbsp;</span></div>
<div style="line-height: 200%">
<h4><span style="font-size: 16px">web编程脚本语言</span></h4>
<div style="color: rgba(51, 51, 51, 1); line-height: 200%; font-size: medium"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">人们发现,对于一个HTML页面,往往发生变化的只是很少一部分数据,很大一部分仍旧是静态的</span></div>
<div style="color: rgba(51, 51, 51, 1); line-height: 200%; font-size: medium"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">比如一个只有一个页面访问计数器的页面,唯一动态的数据就是那个“计数”,整个的页面的其他部分都是静态的。</span></div>
<div style="color: rgba(51, 51, 51, 1); line-height: 200%; font-size: medium"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">是不是可以将不变的部分与变化的部分进行解耦呢?</span></div>
<div style="line-height: 200%; font-size: medium"><span style="font-size: 15px">于是又进化出后来的web编程脚本语言</span></div>
<div style="line-height: 200%; font-size: medium"><span style="font-size: 15px">PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。</span></div>
<div style="line-height: 200%; font-size: medium"><span style="font-size: 15px">这些工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。</span></div>
<div style="line-height: 200%; font-size: medium"><span style="font-size: 15px">后来又用C语言重新编写,包括可以访问数据库。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">他将这些程序和一些表单直译器整合起来,称为 PHP/FI,也就是说</span><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>最初是C语言编写的CGI程序的封装集成整合</strong></span></div>







</div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">PHP实现了与数据库的交互以及用于生产动态页面的模板引擎</span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">PHP可以把程序(动态内容)嵌入到HTML(模版)中去执行,不仅能更好的组织Web应用的内容,而且执行效率比CGI还更高</span></div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 0, 1); font-size: 13.5pt"><strong>之后96年出现的ASP和98年出现的JSP本质上也都可以看成是一种支持某种脚本语言编程(分别是VB和Java)的模版引擎</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>web编程脚本语言是CGI的进一步演化与抽象,使CGI的开发使用更加高效易用,核心思想还是CGI</strong></span></div>
<div style="line-height: 200%"><span style="color: rgba(66, 66, 66, 1); font-size: 15px">有了这些脚本语言,搭配上后端的数据库技术,Web的功能更加强劲,可以通过Web技术来构建几乎所有的应用系统。</span></div>
<div style="line-height: 200%"><span style="font-size: 15px"><span style="color: rgba(66, 66, 66, 1)"><img style="display: inline; background-image: none" title="image_5c35493d_15c1" src="https://img2018.cnblogs.com/blog/897393/201901/897393-20190109093342779-1483736753.png" alt="image_5c35493d_15c1" width="915" height="334" border="0"></span>&nbsp;&nbsp; <span style="color: rgba(66, 66, 66, 1)"><span style="color: rgba(0, 0, 0, 1)"><strong><br></strong></span></span></span></div>








               
        </div>
<div style="line-height: 200%">
<h4><span style="font-size: 16px">企业开发平台
                </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">两大重要阵营J2EE/.NET&nbsp;&nbsp; </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Sun公司在1998年发表JDK1.2版本的时候, 使用了新名称Java 2 Platform,即“Java2平台”
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">修改后的JDK称为Java 2 Platform Software Develping Kit,即J2SDK。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">并分为标准版(Standard Edition,J2SE), 企业版(Enterprise Edition,J2EE),微型版(MicroEdition,J2ME)。J2EE便由此诞生。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">当Web开始广泛用于构建大型应用时,系统的稳定性安全性分布式等方面的要求变得更高
                        </span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块
                                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这些模块如果每次在开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题
                                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">于是许多大公司开发了自己的通用模块服务,这些服务性的软件系列统称为中间件&nbsp; </span></div>








                        </div>








                </div>
<div style="line-height: 200%"><span style="font-size: 15px">J2EE就是使用Java语言,开发企业级web应用的一整套的解决方案
                </span></div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">Java Servlet、Java Server Pages (JSP)和Enterprise Java Bean (EJB )是Java EE中的核心规范
                        </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Servlet和JSP是运行在服务器端的Web组件
                        </span></div>








                </div>
<div style="line-height: 200%">
<div style="line-height: 200%"><span style="font-size: 15px">让Java开发者同时拥有了类似CGI程序的集中处理功能和类似PHP的HTML嵌入功能
                        </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">此外,Java的运行时编译技术也大大提高了Servlet和JSP的执行效率
                        </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Sun正式发布了J2EE版本后,紧接着,遵循J2EE标准,为企业级应用提供支撑平台的各类应用服务软件争先恐后地涌现了出来。&nbsp; </span></div>








                </div>
<div style="line-height: 200%"><span style="font-size: 15px">IBM的WebSphere、BEA的WebLogic都是这一领域里最为成功的商业软件平台。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">简言之,Java本身的跨平台性非常适合web应用开发,Java也抓住了这一机遇,提供了企业级应用一整套的开发方案。</span></div>
<h4><span style="font-size: 16px">框架的百家争鸣时代
                </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">随者两大平台的诞生,web的技术发展趋于成熟与稳定,人们希望能够更好更快更高效的开发web
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">各种辅助web开发的技术,百花齐放,百家争鸣
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">web应用越来越复杂,各种功能的页面,各种各样的URL地址,大量的后台数据&nbsp; </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">MVC的概念被引入到web项目中来,出现了Structs&nbsp;&nbsp; Spring MVC等
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">控制器Controller负责响应请求,协调Model和View
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Model,View和Controller的分开,是一种典型的关注点分离的思想,
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">不仅使得代码复用性和组织性更好,使得Web应用的配置性和灵活性更好。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">此时,数据的访问也不仅仅是直接sql访问,出现了ORM(Object Relation Mapping)的概念
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">2001年出现的Hibernate就是其中的佼佼者
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">更多的全栈框架开始出现,比如2003年出现的Java开发框架Spring
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">同时更多的动态语言也被加入到Web编程语言的阵营中
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">2004年出现的Ruby开发框架Rails,2005出现的Python开发框架Django
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">都提供了全栈开发框架,或者自身提供Web开发的各种组件,或者可以方便的集成各种组件。</span></div>
<h3><span style="font-size: 18px">前端技术发展</span></h3>
<h4><span style="font-size: 16px">JavaScript
                </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">随着web服务器的发展,在能够进行动态数据的处理之后,涌现出来了新的问题。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">服务器负责表单的一些校验工作
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">看起来好像没什么,但是站在当时的环境下,在那个绝大多数用户都在使用调制解调器上网的时代,网络是很低速的
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">用户填写完一个表单点击提交,需要很多秒,才能得到服务器的反馈
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">然而最后完了服务器反馈给你说某个地方填错了......你是不是会崩溃?
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">人们希望是否可以在客户端进行这些基础校验工作,这就是Js诞生的背景
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">JavaScript诞生于1995年,前身是livescript
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">最开始是由浏览器厂商Netscape(网景)着手开发的,起初这是一种“自导自演”的语言。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">你可以这么理解,浏览器是我自己开发的一个软件,我为了实现某种功能定义了一些规范条件语法,创造了一种语言
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比如我说在我这个软件内var可以定义一个变量,我的这个软件就认识这个var,别人家的浏览器其实是不认识的
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">我自己的软件,可以解释我自定义的语言
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">就好比你定义了一个XML文件的格式,然后你编写相应的方法用于解析XML,是类似的逻辑
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">当然,浏览器不止一家,出现了这么一个好东西,大家就会都去搞,撕逼大战热火朝天
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">最终出来机构调节停火,也就是出台了</span><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>ECMAScript</strong></span>,<span style="font-size: 15px">这是一个</span><span style="color: rgba(255, 0, 0, 1); font-size: 13.5pt"><strong>规范</strong></span>
                </div>
<div style="line-height: 200%"><span style="color: rgba(0, 0, 255, 1); font-size: 13.5pt"><strong>由ECMA-262定义的ECMAScript其实与Web浏览器没有依赖关系,Web浏览器只是ECMAScript实现可能的宿主环境之一</strong></span>
                </div>
<div style="line-height: 200%">&nbsp;</div>
<div style="line-height: 200%"><span style="font-size: 15px">JavaScript是一个ECMAScript规范的实现,就好像HotSpot遵循java虚拟机规范一样
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">完整的js实现包括
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1.核心(ECMAScript)
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">2.文档对象模型(DOM)
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">3.浏览器对象模型(BOM)</span></div>
<h4><span style="font-size: 16px">CSS
                </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">另外由于项目应用规模的不断扩大,页面也越来越越复杂,你会发现,将样式与模板放到一个页面上
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">是一个非常糟糕的设计思路
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">1996年12月W3C推出了CSS规范的第一个版本
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">CSS(Cascading Style Sheets,层叠样式表)是一种将表示样式应用到标记的系统
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">CSS以设计、改变其HTML页面的样式而知名,并使用于Web和其他媒介,如XML文档中
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">CSS依附于HTML的结构对其样式进行渲染</span></div>
<h4><span style="font-size: 16px">AJAX/前端框架/Node
                </span></h4>
<div style="line-height: 200%"><span style="font-size: 15px">而对于浏览器端,除了前面提到的js&nbsp; css
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">在98年还出现了AJAX,05年之后大放异彩
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">一个页面上,有绝大多数的数据是固定不变的,所以演变出模板的形式,动态的渲染数据
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">然而,在很多时候,也并不是页面上的数据全部都需要变化,可能需要变化的仅仅只有很细微的一个地方
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">但是,哪怕你仅仅需要变动的是一个数字而已,也仍旧需要重新载入整个页面,这显然是资源的浪费,以及没必要的等待
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">ajax就是为了解决这个问题的而出现的一种局部刷新的技术
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术)
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">指的是一套综合了多项技术的浏览器端网页开发技术
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">可以基于JavaScript的XmlHttpRequest的用于创建交互性更强​的Web应用。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">ajax的出现,可以让前后端工程师以ajax接口为分界点进行前后端分离
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">规定好交互接口后,前后端工程师就可以根据约定,分头开工
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">开发环境中通过Mock等方式进行测试,同时在特定时间节点进行前后端集成测试。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">但是,随着业务功能的愈发复杂
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">这种模式本质上和JSP时代的Web开发并无本质区别,只不过是将复杂的业务逻辑从JSP文件转移到了JavaScript文件中而已。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">所以很自然的又把MVC模式应用到了前端
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">前端开发也出现了大量的MVC框架
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">比较典型的包括BackboneJS, AngularJS, EmberJS, KnockoutJS。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%"><span style="font-size: 15px">随着各大浏览器的竞争,引擎越来越牛逼
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">Google V8引擎的性能已经足以运行大型Javascript程序
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">在V8之上加以网络、文件系统等内置模块,形成了如今的Node.js
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">随着Node.js的出现,JavaScript开始拥有在服务端运行的能力
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">它的异步本质使得Node.js在处理I/O密集型业务中优势凸显
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">而大多Web业务中I/O性能都是瓶颈
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">&nbsp;</span></div>
<div style="line-height: 200%">
<div style="line-height: 32px"><span style="font-size: 15px">关于网络的演变,可以查看 http://www.evolutionoftheweb.com/ 图形化的展示了演进过程。</span></div>






</div>
<h3><span style="font-size: 18px">总结
                </span></h3>
<div style="line-height: 200%"><span style="font-size: 15px">以上可以看得出来,WEB的发展从提出一直都是在迅猛发展,WEB架构的核心思想一直都没有变化过:BS结构浏览器和服务器,通过HTTP协议交互,借助于URL进行资源定位,最终获取响应,而响应的内容则是HTML。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">尽管WEB的规模在不断的变化,甚至可以说与日俱增的变化,核心是没有变化的
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">而WEB变化的方向也可以说是非常明确的,那就是工作的精细化拆分,不断地分工,不断地分工。
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">最开始需要动态处理的能力,所以借助于CGI程序,将处理能力外包;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">项目不断扩大,所以按照功能进行拆分引入MVC模式;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">引入模式后为了更便于开发维护,又出现了各种框架简化开发;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">静态的模板内容和动态的数据内容相互耦合,所以进行分离;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">模板与样式相互偶尔交织在一起,所以HTML结构与样式分离;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">动态能力全部位于服务器所以出现了JS使客户端具有处理能力;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">同步的处理数据量太大却有时又没有必要,所以出现了AJAX;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">请求太多,一台服务器无法处理,所以出现了负载均衡;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">一个数据库数据量太大,所以开始分库分表;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">应用体量太大,所以将应用服务本身进行拆分,出现了分布式;
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">等等................................
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">可以看得出来,整个WEB项目发展基调如此:
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">活范围太宽,事儿太多怎么办?拆分、解耦!!!
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">活还是太多了干不完,咋整?分工!!!
                </span></div>
<div style="line-height: 200%"><span style="font-size: 15px">分工、解耦、拆分、分工、解耦,拆分、水平拆分、垂直拆分、各种拆分.........&nbsp;&nbsp; </span></div>








</div>







</div>
<div style="line-height: 200%"><span style="font-size: 15px">原文地址:互联网与Web技术的发展 网络发展简介(三)</span></div><br><br>
来源:https://www.cnblogs.com/noteless/p/10242537.html
頁: [1]
查看完整版本: Web技术的发展 网络发展简介(三)