133

最近,当我看到一个带有 .shtml 扩展名的站点时,我开始了解 SHTML。

SHTML 的目的是什么,它与 HTML 和 DHTML 有何不同?

4

3 回答 3

180

SHTML 是一个文件扩展名,它让 Web 服务器知道文件应该被处理为使用服务器端包含 (SSI)。

(HTML 是……你知道它是什么,而 DHTML 是微软对 Javascript+HTML+CSS 之类的名称)。

您可以使用 SSI 在页面中包含通用页眉和页脚,因此您不必重复代码。更改一个包含的文件会立即更新您的所有页面。您只需照常将其放入 HTML 页面中。

它嵌入在标准 XML 注释中,如下所示:

<!--#include virtual="top.shtml" -->

它已在很大程度上被其他机制所取代,例如 PHP 包含,但一些托管包仍然支持它,仅此而已。

您可以在此 Wikipedia 文章中阅读更多内容。

于 2009-02-06T09:09:52.400 回答
24

它只是带有服务器端包含的 HTML 。

于 2009-02-06T09:07:20.457 回答
5

“既然是 2021 年,我要回答这个问题,因为最初的答案是从一个生活在 SSI 非常普遍的时代的人的角度来回答这个问题的,但是,它们在当代 Web 开发中几乎已经过时了。”


“SSI 是首字母缩写词,缩写为:Server Side Includes。”

“SHTML”,或者(.shtml)只不过是一个简单的文件扩展名,用于向开发人员和浏览器表示当前文档是一个“HTML Doc”,它实现了“Server Side Includes”

我觉得解释SSI的最好方法是将它们与 C-Languages 进行比较(不要与C-Style Syntax混淆)。C-Languages之所以成为一个很好的参考点,有两个原因:

  • A. 大多数上过计算机科学学校的软件/Web 开发人员至少“有点”熟悉其中一种 C 语言(对我来说曾经是,现在仍然是 C++)。

  • #includeB. 语法显然源自原始 C 语言,因为它与C 语言中的语句完全相同。



因此,如果您现在熟悉一门 C 语言,您可能已经对我所描述的内容有了一个很好的了解。

而且,如果我继续,我会说:

“它们是网页的预处理器指令,开发人员实施这些指令以保持代码干燥并保持一致的页眉和页脚,这些指令是通过标准 C 指令语法(例如,、、、、等)#includes实现的#ifdef#define#if

那么您可能确切地知道它们是什么。




如果您以前没有学习过 C 语言,那么这段摘录适合您:

在 C 语言中,有一些语法语句,用于添加库、类、接口、模板等,它们看起来像这样:

  • #include

  • #define

  • #undef

  • #ifdef

  • #ifndef

ETC...


好吧,“简而言之”,相同的语法是通过“服务器端包含”在网页中实现,或者SSI


  • 关键区别: 在程序中使用 C 指令的地方,在网站中使用 SSI。

  • 键相似性 它们都导入程序/网站要使用的代码。



SSI 如下所示:

<!--
 #include ifheader="reference-page" file="header.html" else="header-alt.html" 
-->

  • SSI 也有#if, #else, 等等...

既然我们已经确定了 SSI 的外观及其语法,我将解释它们与当代世界的关系。

我在2021 年中写这篇文章,所以重要的是要注意,据我所知,2012 年是最后一次更新 SSI,此外;它们由 W3C 标准化。今天我们真的不需要它们,因为我们拥有更强大的技术。第一个是模板引擎(Pug, Handlebars, 等等...,以及像Vue, 和React)。现在,如果您看到一个页面,并且它具有 SHTML 扩展名,那么它很可能是一个旧页面,并且可能需要更新。我找到并回答这个问题的原因是因为我的一位教授有一个使用 SSI 的网站,我注意到边缘没有正确加载它——标题掉到了文本正文中。看到像边缘这样的新浏览器,没有正确渲染一项已经过时的技术,这是一个很好的迹象,表明对该技术的支持正在下降,并且正在逐渐消失。总结;如果你看到“SHTML” 文件扩展名—— foo.shtml——你现在知道它为什么在那里,而且你现在知道它是什么,它在那里做什么,

快速的最后一点:

在 XHTML 时代,SSI 很大。但是,在当代 Dev-World 中,SSI 最好用作老师或提醒,一项技术可能非常流行,并且标准化可以由一个以标准化有史以来最具体的 Web 技术 (W3C) 着称的团体来维护,但它仍然可以以罗马的方式崩溃。SSI 是一个好主意,但是为什么 Web 是用 C++ 编写的语言编写的,而不是实际用 C++ (JavaScript) 编写的,这是有原因的。

于 2021-09-07T22:38:34.843 回答