动态web技术(一) --- SSI

来源:互联网 发布:咖啡机品牌 知乎 编辑:程序博客网 时间:2024/05/20 19:18

本系列文章试图讲述从最古老的动态web技术到时下最流行的php,jsp等技术的历史发展脉络,虽然很多技术已经被历史的长河所淘汰,又或者在某些方面偶尔还有应用,了解这些技术并不是为了让大家再去使用它们,而是从中一瞥技术的发展脉络,了解各个时期的技术的优缺点,从而知道为什么当下的流行技术如此这般,它又面临着什么问题,未来技术的发展方向又是什么等等。以史为镜,可以知兴替。


SSI全称 Server Side Include(服务器端包含)是一门比较老的技术,具体出现时间已不可考,可能是上世纪90年代,记得十年前还经常能看到.shtml (Server-Parsed HTML)后缀的网页,这种后缀就是使用SSI技术的默认后缀名,目前已基本看不到这类网页了。SSI提供一系列指令给开发者使用,指令放在一对特殊的标记(<!--#    -->)里,一般格式为 <!--# command parameter1=value1 parameter2=value2 ... -->, 如果服务器不支持SSI,改指令会被浏览器当作注释不会被显示出来,如果当前服务器支持SSI,则会执行其中的指令,然后再返回给用户。由于SSI并不是一个标准的协议,每家服务器厂商对于SSI的实现也都不尽相同。下面以Nginx服务器为例,介绍下SSI如何使用。


首先打开Nginx的SSI支持:
        location ~ \.shtml$ {            ssi on;        }

然后写一个简单的shtml页面:demo.shtml
<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <!--# include file="header.html" -->     <!-- 包含头文件 -->    <!--# set var="var1" value="这是一个变量值...." -->  <!-- 设置变量 -->    <h2><!--# echo var="var1" --></h2>           <!-- 输出变量值 -->    <!--# config timefmt="%Y-%m-%d %H:%M:%S" -->  <!-- 设置时间显示格式 -->    <i>当前系统时间:<!--# echo var="date_local" --></i>  <!-- 输出当前的服务器时间 --></body></html>

再在同一个目录下添加一个头文件:header.html
<header>    <h1>这是一个演示SSI的demo</h1>    <p>欢迎来到我的博客,您的到来就像一只蝴蝶飞进了花园</p></header>


而且刷新页面可以发现时间是不停变化的浏览器收到的源码:


<!doctype html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>Document</title></head><body>    <header>    <h1>这是一个演示SSI的demo</h1>    <p>欢迎来到我的博客,您的到来就像一只蝴蝶飞进了花园</p></header>     <!-- 包含头文件 -->      <!-- 设置变量 -->    <h2>这是一个变量值....</h2>           <!-- 输出变量值 -->      <!-- 设置时间显示格式 -->    <i>当前系统时间:2017-06-21 16:18:01</i>  <!-- 输出当前的服务器时间 --></body></html>


这样就实现了一个最简单的动态网页效果,SSI还可以使用if判断,例如:
<!--# if expr="..." -->...<!--# elif expr="..." -->...<!--# else -->...<!--# endif -->


更多关于Nginx SSI的使用请参考官方文档:http://nginx.org/en/docs/http/ngx_http_ssi_module.html


某些服务器的SSI还支持操作数据库的能力,比如微软的IIS。从上面的介绍可以看出,SSI已经实现了一些基本动态网页的功能,但它本身支持的功能还很有限,并不是一门真正的编程语言,而且对于服务器执行SSI中指令需要查找整个html文档,这会加重服务器的负担,再加上SSI并不是一个标准的协议,各家实现不同,也不利于网站的移植,所以SSI肯定会被更好的解决办法所替代,比如更强大的CGI技术和之后的ASP技术。

原创粉丝点击