收藏 分享(赏)

VLAN技术简介 doc.ppt

上传人:hwpkd79526 文档编号:10136008 上传时间:2019-10-13 格式:PPT 页数:62 大小:372.50KB
下载 相关 举报
VLAN技术简介 doc.ppt_第1页
第1页 / 共62页
VLAN技术简介 doc.ppt_第2页
第2页 / 共62页
VLAN技术简介 doc.ppt_第3页
第3页 / 共62页
VLAN技术简介 doc.ppt_第4页
第4页 / 共62页
VLAN技术简介 doc.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

1、CGI和几种其它基本技术,CGI - Common Gateway Interface Server Side Include (SSI) Cookie Server Push (和现在常听到的“推”技术不同) Client Pull 服务器提供的文件访问权限的控制方式,Common Gateway Interface (CGI),让浏览器能启动服务器方程序的第一种技术 (和HTML的FORM标记一起).,浏览器,服务器httpd,HTTP,CGI,script,应用系统,应用接口,TCP/IP,CGI,最初CGI指随HTML 2.0一起推出的一套使其它应用程序和HTTP服务器相互作用方式的规

2、定. 随着Web服务器技术的发展,现在有时用CGI泛指所有用于httpd和服务器方其他程序模块相互作用的协议接口,包括servlet, LiveWire, ASP, WAI,etc. 我们这里讨论最初的形式.,CGI脚本(script),指存在于服务器方的,遵从CGI规定和服务器进行数据交换的一个程序。 由于CGI所规定的数据交换方式是基于操作系统基本服务的, CGI脚本可用任何语言编写。 CGI最大的用途是利用一个CGI脚本作为服务器和某个应用系统(例如数据库)的桥梁,使得浏览器方的用户能通过Web(即HTTP协议)使用该应用系统。,这一部分的主要内容有:,FORM标记 - 浏览器收集用户信

3、息的方式; urlencoded - 浏览器发送给服务器数据的编码; 环境变量和标准输入 - 服务器向CGI脚本传送信息的手段; 动态网页 - CGI脚本生成并返回给服务器的结果(服务器然后将该网页送给浏览器). Perl - 早期最好的CGI脚本编写语言,FORM: HTML中的表格, 若干输入域 属性有 ACTION: 指出用于处理表格内容的程序 METHOD: 指出表格数据传递给该程序的方法 ENCTYPE: 指出表格信息的编码方式 输入域有3种类型,针对不同种类信息的收集 : 各种性质,单行文字的输入 : 选择性输入,弹出式或滚屏式菜单 : 多行文字输入,例子:arch./cgifor

4、ms/helloworld.html,Hello,World !CGI The first example of CGI programmingClick here to fire a script:,#!/usr/bin/perl print “Content-type:text/htmlnn”; print “ Some Title ”; print “Hello, World !”;,过程与效果,visit click “fire” button html/cgi-bin中的helloword.pl得到执行 输出一个按HTTP应答格式准备的回答消息, 其中内容部分遵从HTML文本格式

5、服务器接过这个输出, 送给浏览器 浏览器显示内容,INPUT域的性质, TYPE=?,文本: text, 纯文本内容, 进一步属性有 NAME, MAXLENGTH,SIZE, VALUE. 口令: password, 用户输入内容不显示, 但传送不加密. 多选多(checkbox)和多选一类型(radio) NAME, VALUE, CHECKED (optional) 同一组选项必须有相同的NAME,例子:/cgiforms/tpcr.html,AAA BBB CCCTrue False ,INPUT域的性质, TYPE=?,隐藏: HIDDEN,不显示, 用来衔接相关的网页 CGI程序可

6、将获得的一个表格信息放到所产生网页表格的隐藏域中,从而建立起两张表格之间的联系 提交按钮: SUBMIT, 指示浏览器提交表格数据 复位按钮: RESET, 置表格初值, 即各输入域的VALUE值. 象素: IMAGE, 具有提交语义, 被点击象素坐标同时被提交.,例子: hsri.html,SELECT,属性, 除NAME外还有 MULTIPLE: 可选多项 SIZE: 1为弹出菜单, 否则为滚屏式. 含有若干域, 有可选属性 SELECTED: 初始预选 (缺省为第一项) VALUE: 选中后的返回值 (缺省为option元素所带的内容),例子,(size=3; size=3 multip

7、le)aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeeffffffff,TEXTAREA,初始内容 ROWS和COLS属性给出显示区域的大小 也有必须的NAME属性CS DEPT, PKU, BEIJING 100871, CHINA ,关于NAME属性,逻辑地看, 网页是一个由各种“元素”构成的一种层次式结构, 其本身就是一个元素. 这些元素由“tag”来标识. 许多tag都有NAME属性, 尤其是那些有比较丰富语义的元素. 我们将NAME看成是相应元素的“名字”. 名字是动态处理文档元素的依据. CGI程序设计的一个常见错误是忘了写表格中元素的NAME属性.

8、 (浏览器不报错, 但也不给服务器送去相应的表格信息),application/x-www-form-urlencoded,繁杂的表格信息, 如何让CGI程序理解 ? 信息按在FORM中元素出现的顺序收集成一个编码的字符串. 空格由“+”表示 其它非数值字母字符由“%HH”表示, 16进制ASCII码. (例如回车换行是“%0D%0A”,! 被编码为%3D,等.) 各属性名和属性值用“=”分开. “&”用来分隔不同的“名=值”,name=Js+Frank&phone=%28315%294431798,考虑CGI程序收到了一个urlencoded字符串, 对应一个复杂的FORM输入(三种类型,

9、INPUT类型还可能有不同的TYPE等等). 如何解析出其中的内容? 前提: CGI程序的设计者了解FORM的设计, 即他知道表格中不同元素的次序和名字. 对每一个输入域, 基本表示是“name=value”. 其中name是属性NAME对应的值; value是用户输入的内容, 或者VALUE属性的值(对于那些选择性元素, 菜单等). checkbox的名字可能出现多次 select名字对应的是option的值或者文字内容 image名字带象素坐标, name.x=, name.y=,METHOD=GET,GET,通常适合于用于信息查询的表格,例如查是否存在某本书.特点是信息量较小,不改变服务

10、器方的状态. 服务器方的QUERY_STRING环境变量将含有按urlencoded方式编码的表格信息. 对浏览器来说,它将ACTION对应的URL和“?表格信息”拼接,形成URI,用于和服务器联系. 这也使得我们可能直接启动服务器方的一个程序,不一定通过表格.,例子, Type your first name Type your last name 如果用户键入 “Winona” 和 “Ryder” 作为值, 则HTTP请求中的URI为name.pl?First+Name=Winona&Last+Name=Ryder 服务器方环境变量 QUERY_STRING将含有: “First+Name

11、=Winona&Last+Name=Ryder“,如果不用表格,可以通过如下方式启动程序和传送数据 http:/name.pl?First+Name=Winona&Last+Name=Ryder 完成同样的事情,其他环境变量,CGI程序可以使用的典型环境变量有: GATEWAY_INTERFACE REMOTE_HOST SERVER_NAME REMOTE_ADDR SERVER_SOFTWARE AUTH_TYPE SERVER_PROTOCOL REMOTE_USER SERVER_PORT REMOTE_IDENT REQUEST_METHOD CONTENT_TYPE PATH_IN

12、FO CONTENT_LENGTH PATH_TRANSLATED HTTP_FROM SCRIPT_NAME HTTP_ACCEPT DOCUMENT_ROOT HTTP_USER_AGENT (browser) QUERY_STRING HTTP_COOKIE 例如Perl语句$ENVREMOTE_ADDR将返回浏览器所在计算机的IP地址。,METHOD=POST,浏览器执行一个HTTP POST过程(将表格数据作为一个message送给服务器,而不是挂在URL后面) 服务器将收集的数据通过STDIN传递给CGI脚本。 环境变量CONTENT_LENGTH为从浏览器发送来的数据的字符数,变

13、量CONTENT_TYPE被设为 “application/x-www-form-urlencoded“.,CGI程序,根据METHOD,用对应方式获得编码后的表格信息 “解码”,从中取得纯表格信息 根据服务逻辑分析处理信息 生成返回网页,送给标准输出. CGI程序必须产生一个响应 - 就算没有数据需要发回,CGI 程序也必须发一个错误或者空消息,因为 http连接这时仍然处于打开状态,必须由服务器关闭。CGI程序将给服务器发送一个头: 如果头的类型是 “Location”,服务器将向客户发送指定的文件. 如果头的类型是 “Content-type”, 服务器将把紧跟着的所有数据发送回浏览器。

14、这应该是一个HTML文本。当 CGI 程序结束时,服务器关闭连接.,例子:一个最简单的CGI 程序,#!/usr/bin/perl print “Content-type: text/htmlnn”; print “The Hello,World example pagen”; print “Hello,World!n”;,服务器返回的响应头标,HTTP/1.0 200 OK Date: Sun,04 Feb 1997 01:51:49 GMT Server: Apache/1.0.2 Content-type:text/html Content-length:98 Last-modified

15、: Thu,01 Feb 1996 02:22:09 GMTThe Hello,World example page Hello,World!,CGI程序的输出,CGI 程序中所有对STDOUT的输出都交由服务器处理。输出应当以下列三种形式之一的头(header)开始: Location: 服务器发送另一个文件给客户 (并且结束连接).如: “Location: http:/ Status: 服务器将返回一个状态消息给客户 (并且结束连接).如: “Status: 305 Document movedn“; Content-type: 服务器将发送所有剩余的输出给浏览器(在一个空行之后),程序

16、结束后才关闭连接.如 “Content-type:text/htmlnn“;,CGI程序的位置,在HTTP服务器的配置文件中设定(或由扩展名决定).通常,在你编制CGI程序的服务器上,把含有表格的HTML文本放在服务器的“文档根目录”(“document root”)下的某个子目录中, 把CGI程序放在服务器的 “cgi-bin”目录下. CGI 程序必须有适当的权限,以便服务器执行. 另外, 如果 CGI 程序要读写其它文件,服务器必须具有相应的权限。(例如Apache服务器,CGI脚本要和httpd程序是同样的owner才能进行写磁盘操作。),Perl - 早期最好的CGI脚本编写语言,P

17、ractical Extraction and Report Language Larry Wall,Programming Perl,OReilly. Interpreted language, 层次介于C和shell script之间,free interpreter, first developed for UNIX, now Windows also many on line materials and documents “It is a language to help you to get the job done before your boss fire you.” 极强的字

18、符串匹配和文本处理能力。,Perl 最有用的功能,关联数组,数组大小的自动调节 二进制数转换功能 正则表达式 文件I/O功能 格式化功能 包括C的全部运算符,增加了字符串比较等运算符 表处理功能,支持堆栈、队列及其它表数据类型 丰富的语句类型和控制结构,例:,下面的用Perl写的CGI程序将返回GET方法下,浏览器送给服务器的urlencoded表格信息: #!/usr/bin/perl print“Content-type:text/htmlnn”; print “$ENVQUERY_STRINGn“;,Highlights of Perl: towards an important pro

19、gram,variables scalar: 用$开始的标识符, 如$I, $name等. 一个scalar变量能放一个数或一个字符串. list: 一维线性表, 用开始的标识符, 如I, names. 用$names0,$names1等表示其中的元素. $#I指示I的最后一个元素下标. associated array: 相联数组,用%开始的标识符, 如%weekdays.其中的每一项是一对值,其中第一个称为key, 用来引出第二个值, 例如$weekdaysWen,数据类型及应用举例,Perl支持两类数据类型:数值和字符串 支持布尔值的概念(值=0 认为是true) $age=35;$na

20、me=“Bob”; days=(Sun, Mon,Tue, Wed, Thu, Fri, Sat) print days #SunMonTueWedThuFriSat print ($days4) #Thu weekdays=days15 #MonFri For ($i=$;$i=$#staff;$i+) print $staff$i;,关联数组应用举例,关联数组可以用任意值作为下标,与数组不同。 %array=key1,value1,key2,value2 $ageBob =35; $ageMary= 25; print agesBob,Mary; #35,25 print keys(%ag

21、e); #Bob,Mary for $name(keys(%age) print “$name is $age$keysn”;,正则表达式(regular expression),处理字符串的一种模式(pattern),格式/pattern/ 常见用法: . ,x?, x*, .* x+, .+,m,m,n,m,0-9, a-z,abc,a|b|c, /perl/ 查找含有perl的字符串 /perl/ /cg2,4/,Highlights of Perl (cont),例如%ENV是系统提供的一个环境变量相连数组, $ENVQUERY_STRING返回环境变量QUERY_STRING的值.

22、$_是一个非常特别的变量, 有些操作会不声不响地影响它的值, 有些操作还会缺省地用到它的值.,Highlights of Perl (cont),pattern matching and substitution, 以正则表达式为基础的操作. 匹配: /pattern/, $string=/pattern/, 返回逻辑值 替换: s/pattern1/pattern2/, $string=s/pattern1/pattern2/, 用pattern2替换pattern1,Highlights of Perl (cont),string partition and joining split(/

23、pattern/,string), 按照pattern将string分开,返回一个list.例如,x = split(/&/,string) join(/pattern/,list),将list中的项用pattern分割拼接起来.例如,$x=join(/ /,x) 注意, $x, x, $x2的不同含义,The important program in Perl: 从urlencoded 中析取信息,# 首先搞清楚所用的METHOD if($ENVREQUEST_METHOD eq “GET”) $in = $ENVQUERY_STRING; elsif ($ENVREQUEST_METHOD

24、 eq “POST”) for ($I=0; $I$ENVCONTENT_LENGTH; $I+) $in .= getc; #从标准输入中一个个字符读进来,拼接放到$in中.,从urlencoded中析取信息(cont),in = split(/ ,获取用户的输入数据,#! Usr/bin/perl print “Content-type:/text/htmlnn” if ($ENVREQUEST_METHOD eq “POST”) read(STDIN,$buffer,$ENVCONTENT_LENGTH); elseif ($ ENVREQUEST_METHOD eq “GET”) $b

25、uffer=$ENVQUERY_STRING; 问题:编写CGI程序,如何列出全部的环境变量?,输出所有环境变量,foreach $key(keys (%ENV) print $key = $ENV($key) ;,HTML文档的保护(以Apache服务器为例),两个基本问题 Authentication: Who are you ? I am lxm (proved by password) Im from 162.105.181.215 (ensured by Internet) Authorization: Can you access this document ? 需要authent

26、ication作基础 可以将服务器所管辖的文档和潜在浏览者之间的关系看成是一个bipartite graph.,文档的保护 (cont),web文档保护的几个考虑因素 级别或者类型, 例如Basic或Digest,不同的加密方式. 文档集合的划分. 不同的文件可能有不同的保护要求, 显然也便于管理. 用户也可能分成组, 不同的组可以有不同的访问权限. 用户组可以显式形成,也可以以IP地址为单位隐式形成. 多重划分问题,不同的用户看到文档集合的划分可以不一样. 面向目录(以目录为单位管理)的控制是最自然的.,访问控制文件(ACF),全局的ACF通常是在服务器的配置目录中的access.conf.

27、 在服务器所管理的网页空间中的任何子目录可以有一个局部ACF,命名为.htaccess。下面是Apache(也是NCSA)的ACF格式 (描述对一个目录的控制):在全局ACF中可对不同目录设置不同控制 AuthType Basic 控制类型 AuthName name of area 给这一组文件起个名字 AuthUserFile user-password path 用户口令文件的位置 AuthGroupFile group-file path 用户组文件的位置, 组的概念只是为了方便例如GET, POSTorder list order of deny, allow directives

28、说明deny和allow的应用次序deny from hosthost 确定一个用户集合allow from hosthostrequire entity-type entity 作进一步限制,解释,AuthGroupFile指定一个含用户组信息的文件,例如每一行为“组名:用户名表”。 require可设定哪些用户或组能访问该目录,有三种基本形式: require user uid uid require group grpid grpid require valid-user (集合内,通过认证者) 这里的uid和grpid分别从AuthUserFile和AuthGroupFile取出。,d

29、eny,allow,分别指出不允许和允许哪些计算机访问该目录,参数可以是IP地址,也可以是域名。order指出应用deny和allow的次序。例如, order deny, allow deny from all allow from 将拒绝除域下面的host外其它所有计算机的访问。下面是.htaccess文件的一个例子 AuthType Basic AuthName ClassList AuthUserFile /home/lxm/secret require user lxm chengxu cgz,口令文件(AuthUserFile),可以由htpasswd程序生成(通常服务器软件自带

30、),它创建名为.htpasswd的口令文件。这个文件不应该放在公用区。其内容形如: Jack:FyXZ29pi73 lxm:Q44ti9cofks 为使子目录中的.htaccess生效,在全局的access.conf 中应有 AllowOverride AuthConfig ,这说明子目录中的访问控制设置将比全局设置有更高优先级。(AuthOverride None表示子目录中的设置将无效)。当用户访问有授权管制目录中的网页时,他将会首先看到类似于只有输入了有效的用户名和口令,才能继续。,Server Push和Client Pull,两种初等的使网页有动态感的技术 Server Push:

31、服务器送出一种特殊Content-type的HTTP应答. 浏览器按一种特殊的方式显示这种应答. HTTP连接在整个过程中是保持的。较适合小文件,短时间间隔,例如小图像的动画. Client Pull: 在网页中的一种特殊信息, 使得浏览器自动周期性的向服务器发出申请. 连接要每次重新获得。适合大文件,较长间隔,例如股票行情更新。,server push,按HTTP的规定,Web服务器可以向浏览器返回一个“回答序列”,序列中的每个元素可以看作是一个独立的HTML文本,在浏览器方一个接一个显示,从而造成一种动态效果。这种序列用一种特殊的MIME类型,multipart/x-mixed-repla

32、ced,来说明。 通常,这种回答序列由一个CGI脚本产生,其输出需为如下基本结构: Content-type:multipart/x-mixed-replace;boundary=-DELIMIT -DELIMIT (第一张网页的内容,包括适当的Content-type和空行) -DELIMIT (第一张网页的内容,包括适当的Content-type和空行) 。 -DELIMIT-,#!/usr/bin/perl print “Content-type:multipart/x-mixed-replace;boundary=-foonn“; print “n-foon“;print “Conte

33、nt-type:text/htmlnn“;print “From the first part “;print “From the first part “;print “From the first part “;print “From the first part “;print “From the first part “;print “From the first part “; print “n-foon“;print “Content-type:text/htmlnn“;print “From the second part n“; print “-foo-“;,Client Pu

34、ll,服务器可以通过CGI脚本返回一种类型为“Refresh”的HTTP应答,或者在HTML文本的部分用标记模拟这种应答,从而使浏览器每隔一定时间自动发出一次新的网页请求。例如, Demo Client Pull Technology Insert your text or graphics here 这将引起浏览器每隔5秒钟重新下载一次该网页。,Client Pull (cont),这里,比较有意义的一种应用是在META标记中用一个URL属性,从而使得浏览器通过本网页去自动取另一个网页。如果另一个网页也用这种技术,。,浏览器方将可以出现一种动态效果。例如,在doc1.html中有 。 。 而

35、在doc2.html中有 则两张网页将每隔30秒钟交替显现。上面的META标记相当于HTTP回答中有 Refresh: 30; URL=http:/doc1.html 的效果。,利用隐藏域维持状态,典型的例子是“购物筐”。第一页收集顾客信息name, email, 以及要买那一类物品catalog. 第一页之后,CGI脚本产生一个购物目录页,含有关于顾客信息的隐藏域,另加一个“当前购物筐”隐藏域。这时表格中有5个域,其中item和catalog可见,name, email, currentbasket不可见,但其中的值来源于第一张网页。 每当顾客从当前购物类中选中一项,并选好下一购物类后,递交

36、当前表格,CGI脚本就把所选的物品加到currentbasket中。如此多次,最后生成一个购物清单.,The server wishes to set a cookie that will be sent to any server in the domain .The name and value of the cookie arerf=a Do you wish to allow the cookie to be set?,你见过类似于下面的“Web信息”吗?,什么意思 ?,利用Cookies维持状态,Cookie是服务器发送给浏览器的一种特殊形式的信息。浏览器不是将这些信息显示出来,而

37、是记录在客户机的一个特定的文件中(例如Linux中用户目录下的.netscape/cookies)。当下次访问同样站点时,浏览器就有可能将该cookie信息送回给服务器。这样,就实现了浏览器和服务器之间某种持续的关系。 浏览器收到服务器方来的Set-Cookie文件头后就设置一个cookie, 一旦用户请求某个文件,满足Set-Cookie头中的参数要求时,浏览器将cookie发过去. 服务器将它放在HTTP_COOKIE环境变量中。这是比隐藏域更一般的一种技术。隐藏域技术只在一个session内有效,cookie技术可应用于不同的session之间。,Cookie的建立,每个cookie由“

38、键,值”对来定义。另外还可有一些可选参数定义cookie请求的有效性: expire,GMT时间,浏览器保持该cookie的时间限 path,指定一个服务器方文档空间的子集,本cookie在其中有效 domain,指定cookie在其中有效的网域. secure,这个参数指定cookie只能通过一个安全通道送出,例如SSL。 如果不设任何参数,cookie将被返回给原来的服务器。,服务器向浏览器送cookie的例子,#!/usr/bin/perl print “Content-type:text/htmln”; print “Set-Cookie: gcf=friendn”; print “n

39、n”;print “This is regular content n”; 访问这个脚本的浏览器(适当设置的)将会被问到是否接收一个cookie。,获取回送的cookie,如果用户的请求符合cookie要求,浏览器将该cookie收集起来,发送给服务器,服务器将它们放在HTTP_COOKIE环境变量中供CGI脚本利用。例如 #!/usr/bin/perl print “Content-type:text/htmlnn”; print “You send me cookie ”$ENVHTTP_COOKIE”n”; 将返回浏览器送过来的cookie。 服务器一次可以发送多个cookie给浏览器,

40、每个带有不同的条件,如 #!/usr/bin/perl print “Content-type:text/htmln”; print “Set-Cookie:gcf=my friend;expires=Sat, 26-Aug-97 15:45:30 GMT; path=/projects; domain=n”; print “Set-Cookie:don=my bossn”; print “nn”; 当浏览器通过HTTP_COOKIE一次返回多个cookie时,之间用“;”分开.,服务器方包含(Server Side Include),SSI技术使服务器能够在发送网页的过程中在网页中动态插入数据. 这样的网页习惯上以.shtml作为文件扩展名(不必须),在服务器配置文件中设置. 在srm.conf里: AddType text/html .shtml AddHandler server-parsed .shtml 在access.conf中还要指出含有.shtml文件的目录有”Includes”属性. 包含内容: 变量,文件,命令结果,程序结果.,例子: ssi.html,Test Server Side Include ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报