学习前端的知识,您可以选择千锋教育。千锋的高校服务业务以深化产教融合为已任,为应用型本科、中高职等全国各类院校提供高校协同服务解决方案。截止目前合作院校超700所,校企合作实验室50余个,专业共建在校生近5000人,为高校举办实训近万次,组织实施各类讲座5万余场,从2017年参与教育部产学合作协同育人项目以来。
它是超级文本的简称。二、超媒体(hypermedia) 超媒体是超文本(hypertext)和多媒体在信息浏览环境下的结合。它是超级媒体的简称。用户不仅能从一个文本跳到另一个文本,而且可以激活一段声音,显示一个图形,甚至可以播放一段动画。Internet采用超文本和超媒体的信息组织方式,将信息的链接扩展到整个Internet上。Web就是一种超文本信息系统,Web的一个主要的概念就是超文本连接,它使得文本不再象一本书一样是固定的线性的。而是可以从一个位置跳到另外的位置。可以从中获取更多的信息。可以转到别的主题上。想要了解某一个主题的内容只要在这个主题上点一下,就可以跳转到包含这一主题的文档上。正是这种多连接性把它称为Web。三、超文本传输协议(HTTP) Hypertext Transfer Protocol超文本在互联网上的传输协议。当你想进入万维网上一个网页, 或者其他网络资源的时候,通常你要首先在你的浏览器上键入你想访问网页的统一资源定位符(UniformResourceLocator),或者通过超链接方式链接到那个网页或网络资源。这之后的工作首先是URL的服务器名部分,被名为域名系统的分布于全球的因特网数据库解析,并根据解析结果决定进入哪一个IP地址(IP address)。接下来的步骤是为所要访问的网页,向在那个IP地址工作的服务器发送一个HTTP请求。在通常情况下,HTML文本、图片和构成该网页的一切其他文件很快会被逐一请求并发送回用户。网络浏览器接下来的工作是把HTML、CSS和其他接受到的文件所描述的内容,加上图像、链接和其他必须的资源,显示给用户。这些就构成了你所看到的“网页”。大多数的网页自身包含有超链接指向其他相关网页,可能还有下载、源文献、定义和其他网络资源。像这样通过超链接,把有用的相关资源组织在一起的集合,就形成了一个所谓的信息的“网”。这个网在因特网上被方便使用,就构成了最早在1990年代初蒂姆·伯纳斯-李所说的万维网。传统的Web数据库系统体系结构 传统的Web数据库系统一般实现Web数据库系统的连接和应用可采取两种方法,一种是在Web服务器端提供中间件来连接Web服务器和数据库服务器,另一种是把应用程序下载到客户端并在客户端直接访问数据库。中间件负责管理Web服务器和数据库服务器之间的通信并提供应用程序服务,它能够直接调用外部程序或脚本代码来访问数据库,因此可以提供与数据库相关的动态HTML页面,或执行用户查询,并将查询结果格式化成HTML页面。通过Web服务器返回给Web浏览器。最基本的中间件技术有通过网关接口CGI和应用程序接口API两种。(一)、基于通用网关接口CGI CGI是WWW服务器运行时外部程序的规范,按照CGI编写的程序可以扩展服务器的功能,完成服务器本身不能完成的工作,外部程序执行时间可以生成HTML文档,并将文档返回WWW服务器。CGI应用程序能够与浏览器进行交互作用,还可以通过数据库的API与数据库服务器等外部数据源进行通信,如一个CGI程序可以从数据库服务器中获取数据,然后格式化为HTML文档后发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎使用的服务器软件都支持CGI,开发人员可以使用任何一种WWW服务器内置语言编写CGI,其中包括流行的C、C、VB和Delphi等。从体系结构上来看,用户通过Web浏览器输入查询信息,浏览器通过HTTP协议向Web服务器发出带有查询信息的请求,Web服务器按照CGI协议激活外部CGI程序,由该程序向DBMS发出SQL请求并将结果转化为HTML后返回给Web服务器。再由Web服务器返回给Web浏览器。这种结构体现了客户/服务器方式的三层模型,其中Web服务器和CGI程序实际起到了HTML和SQL转换的网关的作用。CGI的典型操作过程是:分析CGI数据;打开与DBMS的连接;发送SQL请求并得到结果;将结果转化为HTML;关闭DBMS的连接;将HTML结果返回给Web服务器。基于Web的数据库访问利用已有的信息资源和服务器。其访问频率大,尤其是热点数据。但其主要的缺点是:①客户端与后端数据库服务器通信必须通过Web服务器,且Web服务器要进行数据与HTML文档的互相转换,当多个用户同时发出请求时,必然在Web服务器形成信息和发布瓶颈。②CGI应用程序每次运行都需打开和关闭数据库连接,效率低,操作费时;③CGI应用程序不能由多个客户机请求共享,即使新请求到来时CGI程序正在运行,也会启动另一个CGI应用程序,随着并行请求的数量增加,服务器上将生成越来越多的进程。为每个请求都生成进程既费时又需要大量内存,影响了资源的使用效率,导致性能降低并增加等待时间;④由于SQL与HTML差异很大,CGI程序中的转换代码编写繁琐,维护困难;⑤安全性差,缺少用户访问控制,对数据库难以设置安全访问权限;⑥HTTP协议是无状态且没有常连接的协议,DBMS事务的提交与否无法得到验证,不能构造Web上的OLTP应用。(二)、基于服务器扩展的API 为了克服CGI的局限性,出现的另一种中间件解决方案是基于服务器扩展API的结构。与CGI相比,API应用程序与Web服务器结合得更加紧密,占用的系统资源也少得多,而运行效率却大大提高,同时还提供更好的保护和安全性。服务器API一般作为一个DLL提供,是驻留在WWW服务器中的程序代码,其扩展WWW服务器的功能与CGI相同。WWW开发人员不仅可以API解决CGI可以解决的一切问题,而且能够进一步解决基于不同WWW应用程序的特殊请求。各种API与其相应的WWW服务器紧密结合,其初始开发目标服务器的运行性能进一步发掘、提高。用API开发的程序比用CGI开发的程序在性能上提高了很多,但开发API程序比开发CGI程序要复杂得多。API应用程序需要一些编程方面的专门知识,如多线程、进程同步、直接协议编程以及错误处理等。目前主要的WWWAPI有Microsoft公司的ISAPI、Netscape公司的NSAPI和OReily公司的WSAPI等。使用ISPAI开发的程序性能要优于用CGI开发的程序,这主要是因为ISAPI应用程序是一些与WWW服务器软件处于同一地址空间的DLL,因此所有的HTTP服务器进程能够直接利用各种资源这显然比调用不在同一地址空间的CGI程序语句要占用更少的系统时间。而NSAPI同ISAPI一样,给WWW开发人员定制了NetscapeWWW服务器基本服务的功能。开发人员利用NSAPI可以开发与WWW服务器的接口,以及与数据库服务器等外部资源的接口。虽然基于服务器扩展API的结构可以方便、灵活地实现各种功能,连接所有支持32位ODBC的数据库系统,但这种结构的缺陷也是明显的:①各种API之间兼容性很差,缺乏统一的标准来管理这些接口;②开发API应用程序也要比开发CGI应用复杂得多; ③这些API只能工作在专用Web服务器和操作系统上。(三)、基于JDBC的Web数据库技术 Java的推出,使WWW页面有了活力和动感。Internet用户可以从WWW服务器上下载Java小程序到本地浏览器运行。这些下载的小程序就像本地程序一样,可独立地访问本地和其他服务器资源。而最初的Java语言并没有数据库访问的功能,随着应用的深入,要求Java提供数据库访问功能的呼声越来越高。为了防止出现对Java在数据库访问方面各不相同的扩展,JavaSoft公司指定了JDBC,作为Java语言的数据库访问API。采用JDBC技术,在JavaApplet中访问数据库的优点在于:直接访问数据库,不再需要Web数据库的介入,从而避开了CGI方法的一些局限性;用户访问控制可以由数据库服务器本地的安全机制来解决,提高了安全性;JDBC是支持基本SQL功能的一个通用低层的应用程序接口,在不同的数据库功能的层次上提供了一个统一的用户界面,为跨平台跨数据库系统进行直接的Web访问提供了方案。从而克服了API方法一些缺陷;同时,可以方便地实现与用户地交互,提供丰富的图形功能和声音、视频等多媒体信息功能。JDBC是用于执行SQL语句的Java应用程序接口API,由Java语言编写的类和接口组成。Java是一种面向对象、多线程与平台无关的编程语言,具有极强的可移植性、安全性和强健性。JDBC是一种规范,能为开发者提供标准的数据库访问类和接口,能够方便地向任何关系数据库发送SQL语句,同时JDBC是一个支持基本SQL功能的低层应用程序接口,但实际上也支持高层的数据库访问工具及API。所有这些工作都建立在X/Open SQL CLI基础上。JDBC的主要任务是定义一个自然的Java接口来与X/OpenCLI中定义的抽象层和概念连接。JDBC的两种主要接口分别面向应用程序的开发人员的JDBC API和面向驱动程序低层的JDBC DriverAPI。JDBC完成的工作是:建立与数据库的连接;发送SQL语句;返回数据结果给Web浏览器。近期准备session,希望能跟大家轻松地分享一些东西,一些常见的场景。比如:web后台服务器到底是如何工作的。
上网过程对于普通人:首先,他需要一台电脑,然后,他的电脑可以接入网络,最后,他可以打开浏览器键入自己想要浏览的网址,然后就可以上网了。但是对于计算机来讲,是一个比较复杂的过程,里面包含了信息如何保存,信息如何传递以及信息如何展示的过程。所以,针对整个上网过程,我们从前到后,分析一下其中包含的各种技术细节,可能不全,目的是抛砖引玉,希望大家在简单的流程当中学习更多的东西分享出来,一些基础知识则当做复习。之前buddy王老吉讲过浏览器的工作方式,所以本文内容不包含浏览器的工作方式,重点在于各种后台服务以及通信层面的分析。
前面说到,用户浏览器中键入网址便浏览网页信息,这个网址实际上就是URL,英文全称是Uniform Resource Locator——统一资源定位符。
完整的、带有授权部分的普通统一资源标志符语法看上去如下:
协议://用户名:密码@子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数=值
协议部分可以是http,https,ftp等协议类型。
前面提到,互联网上的每个文件都有一个唯一的URL,那么,到底是如何确认的。前面提到了协议,协议是什么?比如大家写信时都需要写邮编、地址和姓名,便可以通过这种方式将信邮寄到世界上唯一的那个人手里,填写的邮编,地址和姓名就是一种协议。协议的价值在于世界上所有的浏览器和后台服务器都需要遵循http这些协议,才能正常进行信息的传递。
计算机通信跟人的通信是类似的,也是遵循各种协议的,不同的协议承载着不同的功能。通常,浏览器上网使用的是http或者https协议,从网络分层的角度来讲,这些协议属于应用层协议,建立在传输层之上。传输层跑是什么协议呢?相信大家都非常熟悉,传输层跑的是TCP和UDP协议,再往下就是网络层,网络层上面跑的是IP数据报。每层的功能各不相同,每层的协议也不同,但是一般来讲,越往下层,协议会越少,这样才能化繁为简,从而支持不同的上层协议。传输层协议一般是由操作系统层面支持的,同时还需要跟网络层进行交互(对于物理机来说就是网卡),所以针对我们操作系统之上的程序员来讲,新创造的协议都是应用层协议,因为我们的通信都是在传输层(TCP和UDP)基础之上构建的。
http是应用层协议,也就是说,在界面敲下网址那一刻,实际上浏览器向服务器发送了http协议格式的消息,也叫做http请求。http协议是构建在tcp协议之上的,而tcp是可靠的协议,所以http协议无需考虑可靠性,只管传输就可以了。
http协议比较简单,如下所示:
那么浏览器又是如何组织http请求,并且将信息发送的相应服务器的呢?例如: http://www.baidu.com
我们键入的仅仅是服务器域名,但是实际上在网络中我们通信是通过套接字来进行通信的。套接字=IP + 端口,在网络中,IP的作用是用来在网络层进行路由寻址,寻找唯一的主机;端口的作用是用来在这个主机中寻找唯一的进程。总体来说,套接字可以用来在网络中确定唯一主机的唯一进程,所以通过套接字我们可以进行通信。
但是问题是上网通过域名来访问,那么是如何通过域名来确认唯一主机的唯一后台web服务器进程的呢?做一个假设,如果我们可以在互联中提供一个确定的服务,这个服务里面装有域名到套接字的映射,上网的人通过这个服务获取对应域名的套接字,那么这个问题不就解决了。而实际上,DNS服务原理简单来说就是刚才假设的方法,服务商通过提供公共的DNS服务,大家上网时便可以查询到相应域名对应的套接字,通过这个套接字便可以访问确定的服务器了。真正的DNS服务其实更为复杂,分为迭代式查询和递归式查询,两种方式各有优劣,同时,为了性能,DNS服务通常也配有不同级别的缓存,关于DNS的具体实现有兴趣的可以自行查询资料学习。
总结一下,上网时浏览器实际上做了两件事,第一,通过浏览器内置的DNS客户端,向DNS服务器发送请求,获取域名对应套接字;第二,使用套接字发送http请求,获取数据,然后在浏览器端呈现。
另外,DNS服务也需要遵循某种协议才能通信,其协议为DNS协议,其服务固定为53端口,属于应用层协议。DNS英文为DomainNameSystem。其实DNS服务跟电话簿的工作方式一样,因为你没法记得每个人的电话号码,但是很容易记住每个人的名字。
上网前,我们的计算机里面什么都没有,为何键入网址后能在界面显示出各种各样的数据?实际上,数据都来自于后台服务器,所有的数据当然也都存储在后台服务器,浏览器仅仅请求数据。前面讲了,请求数据时,使用套接字加上http请求来获取数据,后台则必定要提供相应的套接字,接收信息,解析http请求,才能正常的返回客户端需要的数据。所以,后台服务器做的工作,第一,绑定套接字,通过该套接字向外提供http服务;第二,解析http请求,根据请求返回响应。
理论上讲,我们可以实现自己的http服务,并且解析不同的http请求,返回响应。但是,作为开发者来讲,重复造轮子是不推荐的,市面上有多种现成框架供我们选择。对于java开发者来讲,就有tomcat或者jetty,其他语言理论上也有类似的框架。tomcat和jetty帮我们做了什么呢?实际上最主要的功能还就是接受http请求,针对不同的请求返回响应,当然,他们也提供了更多的高级特性,比如遵循servlet规范,使人们更高效的开发web应用。
总结一下,上网的实际流程在程序员的角度来看,首先需要通过DNS服务解析域名,获取该域名所在web服务器应用程序的套接字,然后浏览器组装符合http协议的请求,通过套接字发送给web服务器,web服务器解析请求,根据解析结果将需要返回的内容组装符合http协议的响应,浏览器接到响应后,根据http协议解析响应,获取数据,将数据展示在浏览器上。
包含的知识点:DNS协议,HTTP协议,计算机网络知识,后台服务器实现(tomcat/jetty等)。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)