简介

SSI(服务器端嵌入)是一组放在 HTML 页面中的指令,当服务器向客户端访问提供这些页面时,会解释执行这些指令。它们能为已有的 HTML 页面添加动态生成内容,不需要通过 CGI 程序来或其他的动态技术来重新改变整个页面。

如果利用 Tomcat 作为 HTTP 服务器并需要 SSI 支持时,可以添加 SSI 支持。通常,如果你运行的不是像 Apache 那样的服务器,就通过开发来实现这种支持。

Tomcat SSI 支持实现了与 Apache 完全一致的 SSI 指令。关于使用 SSI 指令的详细信息,可参考Apache 的 SSI 简介

SSI 支持可以有两种方式来实现:servlet 或过滤器。你只能利用其中的一种方式来提供 SSI 支持。

基于 servlet 的 SSI 支持是通过 org.apache.catalina.ssi.SSIServlet 类来实现的。一般来说,这个 servlet 映射至 URL 模式"*.shtml"。

基于过滤器的 SSI 支持则利用 org.apache.catalina.ssi.SSIFilter 类来实现。一般而言,该过滤器映射至 URL 模式 "*.shtml",但是它也可以被映射至 "*",因为它会基于 MIME 类型选择性地启用/禁用对 SSI 的处理。初始参数 contentType 允许你将 SSI 处理应用于 JSP 页面、JavaScript 内容以及其他内容中。

默认 Tomcat 是不支持 SSI 的。

安装

警告:SSI 指令可用于执行 Tomcat JVM 之外的程序。如果使用 Java SecurityManager,它会绕过你在 catalina.policy 中配置的安全策略。

为了使用 SSI servlet,要从 $CATALINA_BASE/conf/web.xml 中去除 SSI servlet 及 servlet 映射配置旁边的 XML 注释。

为了使用 SSI 过滤器,要从 $CATALINA_BASE/conf/web.xml 中去除 SSI 过滤器及过滤器映射配置旁边的 XML 注释。

只有标明为 privileged 的上下文才可以使用 SSI 功能(参看 Context 元素的 privileged 属性)。

Servlet 配置

以下这些 servlet 初始化参数可以配置 SSI servlet 的行为:

  • buffered 是否应缓存该 servlet 的输出?(0 = false,1 = true)默认为 0(false)。
  • debug 调试 servlet 所记录信息的调试细节度。默认为 0。
  • expires 包含 SSI 指令的页面失效的秒数。默认行为针对的是每个请求所应执行的所有 SSI 指令。
  • isVirtualWebappRelative “虚拟”的 SSI 指令路径是否应被解释为相对于上下文根目录的相对路径(而不是服务器根目录)?默认为 false。
  • inputEncoding 如果无法从资源本身确定编码,则应指定给 SSI 资源的编码。默认为系统默认编码。
  • outputEncoding 用于 SSI 处理结果的编码。默认为 UTF-8。
  • allowExec 是否启用 exec 命令?默认为 false。

过滤器配置

以下这些过滤器初始化参数可以配置 SSI 过滤器的行为:

  • contentType 在应用 SSI 处理之前必须匹配的正则表达式模式。在设计自己的模式时,不要忘记 MIME 内容类型后面可能会带着可选的字符集:“mime/type; charset=set”。默认为 “text/x-server-parsed-html(;.*)?”。
  • debug 调试 servlet 所记录信息的调试细节度。默认为 0。
  • expires 包含 SSI 指令的页面失效的秒数。默认行为针对的是每个请求所应执行的所有 SSI 指令。
  • isVirtualWebappRelative “虚拟”的 SSI 指令路径是否应被解释为相对于上下文根目录的相对路径(而不是服务器根目录)?默认为 false。
  • allowExec 是否启用 exec 命令?默认为 false。

指令

指令采取 HTML 注释的形式。在将页面发送到客户端之前,解读指令,并用所得结果来替换指令。指令的一般形式为:

<!--#directive [parm=value] -->

这些指令包括:

  • config <!--#config timefmt="%B %Y" --> 用于设定日期格式以及其他一些 SSI 处理的项目。
  • echo <!--#echo var="VARIABLE_NAME" --> 将被变量值所取代。
  • exec 在主机系统上用于运行命令。
  • include <!--#include virtual="file-name" --> 插入内容。
  • flastmod <!--#flastmod file="filename.shtml" --> 返回文件最后修改的时间。
  • fsize <!--#fsize file="filename.shtml" --> 返回文件大小。
  • printenv <!--#printenv --> 返回所有定义变量的列表。
  • set <!--#set var="foo" value="Bar" --> 为用户自定义变量赋值。
  • if elif endif else 用于生成条件部分,例如:
<!--#config timefmt="%A" -->
<!--#if expr="$DATE_LOCAL = /Monday/" -->
<p>Meeting at 10:00 on Mondays</p>
<!--#elif expr="$DATE_LOCAL = /Friday/" -->
<p>Turn in your time card</p>
<!--#else -->
<p>Yoga class at noon.</p>
<!--#endif -->

关于使用 SSI 指令的详细信息,可参考Apache 的 SSI 简介

变量

SSI servlet 当前能实现下列变量:

变量名 描述
AUTH_TYPE 用于这些用户的验证类型:BASIC、FORM,等等。
CONTENT_LENGTH 从表单传入数据的长度(以字节或字符数)
CONTENT_TYPE 查询数据的 MIME 类型。比如:text/html
DATE_GMT 以格林威治标准时间(GMT)表示的当前时间与日期
DATE_LOCAL 以本地时区表示的当前日期与时间
DOCUMENT_NAME 当前文件名
DOCUMENT_URI 文件的虚拟路径
GATEWAY_INTERFACE 服务器所使用的通用网关接口(CGI)的修订版本,比如:CGI/1.1
HTTP_ACCEPT 客户端能够接受的 MIME 类型列表
HTTP_ACCEPT_ENCODING 客户端能够接受的压缩类型列表
HTTP_ACCEPT_LANGUAGE 客户端能够接受的语言类型列表
HTTP_CONNECTION 如何管理与客户端的连接:"Close" 或 "Keep-Alive"
HTTP_HOST 客户端所请求的网站
HTTP_REFERER 客户端链接的文档的 URL
HTTP_USER_AGENT 客户端用于处理请求的浏览器
LAST_MODIFIED 当前文档的最后修改日期与时间
PATH_INFO 传入 servlet 的额外路径信息
PATH_TRANSLATED 变量 PATH_INFO 所提供路径的转换版本
QUERY_STRING 在 URL 中,跟在 ?后面的查询字符串
QUERY_STRING_UNESCAPED 带有所有经过 \ 转义的shell 元字符的未解码查询字符串
REMOTE_ADDR 用户作出请求的远端 IP 地址
REMOTE_HOST 用户作出请求的远端主机名
REMOTE_PORT 用户作出请求的远端 IP 地址的端口号
REMOTE_USER 用户的认证名称
REQUEST_METHOD 处理信息请求的方法:GETPOST,等等
REQUEST_URI 客户端所请求的最初页面
SCRIPT_FILENAME 当前页面在服务器上的位置
SCRIPT_NAME 页面名称
SERVER_ADDR 服务器的 IP 地址
SERVER_NAME 服务器的主机名或 IP 地址
SERVER_PORT 服务器接收请求的端口
SERVER_PROTOCOL 服务器所使用的协议,比如:HTTP/1.1
SERVER_SOFTWARE 应答客户端请求的服务器软件的名称与版本号
UNIQUE_ID 用于识别当前会话(如果存在)的令牌

SSI(服务器端嵌入)的更多相关文章

  1. SSI——服务器端嵌入

    服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术.大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server ...

  2. SSI注入--嵌入HTML页面中的指令,类似jsp、asp对现有HTML页面增加动态生成内容,见后面例子

    SSI注入漏洞总结 from:https://www.mi1k7ea.com/2019/09/28/SSI%E6%B3%A8%E5%85%A5%E6%BC%8F%E6%B4%9E%E6%80%BB%E ...

  3. SSI服务器端包含注入

    服务器端嵌入:Server Side Include,是一种类似于ASP的基于服务器的网页制作技术.大多数(尤其是基于Unix平台)的WEB服务器如Netscape Enterprise Server ...

  4. ssi服务器端指令

    SSI使用详解 你是否曾经或正在为如何能够在最短的时间内完成对一个包含上千个页面的网站的修改而苦恼?那么可以看一下本文的介绍,或许能够对你有所帮助.什么是SSI?SSI是英文Server Side I ...

  5. ssi服务器端指令详解(shtml)

    你是否曾经或正在为如何能够在最短的时间内完成对一个包含上千个页面的网站的修改而苦恼?那么可以看一下本文的介绍,或许能够对你有所帮助. 什么是SSI? SSI是英文Server Side Include ...

  6. ssi,服务器端包含,<include file="">

    一.什么是SSI ssi,全称Server Side Include,中文名,服务器端包含. SSI (Server Side Includes)是HTML页面中的指令,在页面被提供时由服务器进行运算 ...

  7. SSI指令

    1.SSI定义 SSI是英文Server Side Includes的缩写, 即“服务器端包含”或“服务器端嵌入”技术. SSI在HTML文件中,可以通过注释行调用的命令或指针,是一种基于服务器端的网 ...

  8. ASP.NET MVC使用SSI来实现页面静态化

    页面静态化分为两种:伪静态和真静态,这里主要介绍的是真静态. 进入正题之前先简单介绍一下SSI和shtml: 1).SSI是Server Side Include的简称(服务器端嵌入) 2).shtm ...

  9. 在Apache下开启SSI配置支持include shtml html和快速配置服务器

    作为前端开发,使用Apache快速搭建服务器极为方便. 1.找到apach安装目录,找到conf目录下 的httpd.conf 使用SSI(Server Side Include)的html文件扩展名 ...

随机推荐

  1. 《C程序设计语言》笔记(二)

    四:函数与程序结构 1:函数之间的通信可以通过参数.函数返回值以及外部变量进行. 2:如果函数定义中省略了返回值类型,则默认为int类型.如果没有函数原型,则函数将在第一次出现的表达式中被隐式声明,比 ...

  2. UVa 10220 【大整数】

    uva 10220 可采用uva 623这道题求N!,再最后稍微改一下就好. 参考代码: } #include<cstdio> #include<cstring> #inclu ...

  3. Ubuntu+Apache+PHP+Mysql环境搭建(完整版)(转)

    http://www.2cto.com/os/201505/401588.html Ubuntu+Apache+PHP+Mysql环境搭建(完整版) 一.操作系统Ubuntu 14.04 64位,阿里 ...

  4. Dataphin公共云重磅发布,提供一站式智能数据构建与管理能

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 Dataphin公共云重磅发布 2019年6月26日15时,阿里云Dataphi ...

  5. mysql数据库之windows版本

    安装  第一步:打开网址,http://www.mysql.com.点击downloads之后跳转到http://www.mysql.com/downloads/选择Community选项 第二步:按 ...

  6. maven中如果使用本地jar

    1.安装到本地仓库class12.jar这个东西在中央仓库里没有,所以,cmd到oracle\product\10.2.0\db_1\jdbc\lib路径下,mvn install 就好了(发布第三方 ...

  7. display的值和对应的意义

    none:隐藏对应元素,不为隐藏的对象保留其物理空间 block:指定对象为块元素 inline:指定对象为内联元素 inline-block:指定对象为内联块元素 table:指定对象为块元素的表格 ...

  8. 最全Pycharm教程(43)——Pycharm扩展功能之UML类图使用 代码结构

    版权声明:本文为博主原创文章,转载时麻烦注明源文章链接,谢谢合作 https://blog.csdn.net/u013088062/article/details/50353202 1.什么是UML ...

  9. Eclipse设置默认编码为UTF-8

    需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...

  10. PHP Warning: Module 'json' already loaded in Unknown on line 0

    Zend加密文件.启动服务器后无法正常运行加密后的文件.处理方法:   某台服务器上跑着php 5.3.8,线上服务运行正常. 某天拆分php错误日志时,发现其中有一段连续的错误信息. [14-Feb ...