最近,当我看到一个带有. SHTML 扩展名的站点时,我开始了解 SHTML。
SHTML 的用途是什么? 它与 HTML 和 DHTML 在哪些方面有所不同?
它只是带有 服务器端包括的 HTML。
SHTML 是一个文件扩展名,它让 Web 服务器知道文件应该使用服务器端包含(SSI)进行处理。
(HTML 是... ... 你知道它是什么,而 DHTML 是微软的名字的 Javascript + HTML + CSS 或东西)。
您可以使用 SSI 在页面中包含公共的页眉和页脚,这样就不必重复那么多代码。更改一个包含的文件将同时更新所有页面。你只需要像往常一样把它放到你的 HTML 页面中。
它嵌入在一个标准的 XML 注释中,看起来像这样:
<!--#include virtual="top.shtml" -->
它已经在很大程度上被其他机制所取代,比如 PHP 包,但是一些托管软件包仍然支持它,除此之外没有其他支持。
你可以阅读更多的 在这篇维基百科文章里。
“既然现在是2021年,我就要回答这个问题,因为最初的答案从一个人的角度回答了这个问题,他生活在 SSI 非常普遍的时代,然而,在当代网络发展中,SSI 几乎已经过时。”
Server Side Includes
“ SHTML” ,或者 强 > (.shtml)强不过是一个简单的文件扩展名,用于向开发人员和浏览器表明当前文档是实现 < strong > “服务器端包括” 的 < strong > 「 HTML 文件」 。
(.shtml)
我认为解释 SSI的最好方法是将它们与 C 语言进行比较(不要与 C 风格语法混淆)。C 语言之所以成为一个很好的参考点,有两个原因:
大多数上过计算机科学学校的软件/网络开发人员至少“有点”熟悉其中一种 C 语言(对我来说,它曾经是,现在仍然是 C + +)。
B.语法显然是从最初的 C 语言衍生出来的,因为它与 C 语言中的 #include语句完全相同。
#include
“它们是网页的预处理器指令,开发人员使用它们来保持代码的 DRY 并维护一致的页眉和页脚,这些都是通过标准的 C 指令语法(例如 #includes、 #ifdef、 #define、 #if等)实现的。.)
#includes
#ifdef
#define
#if
在 C 语言中,有用于添加库、类、接口、模板等的语法语句。它们看起来像这样:
#undef
#ifndef
等等。
那么,“在坚果壳里”,同样的语法实现在网页通过 < strong > “服务器端包括” ,或 强 > SSI的强
SSI
关键差异: 在程序中使用 C 指令的地方,在网站中使用 SSI 指令。
键-相似度 < em > 它们都导入程序/网站使用的代码。
<!-- #include ifheader="reference-page" file="header.html" else="header-alt.html" -->
#else
我是在 二零二一年年中中写这篇文章的,所以需要注意的是,据我所知,2012年是 SSI 最后一次更新,而且,它们是由 W3C 标准化的。今天我们真的不需要它们,因为我们有更强大的技术。首先是模板引擎(Pug、 Handlebars等等)。.以及像 Vue和 React这样的框架)。现在,如果您看到一个页面,并且它有扩展名 SHTML,那么它很可能是一个旧页面,并且可能需要更新。我之所以找到并回答这个问题,是因为我的一位教授有一个使用 SSI 的网站,我注意到 edge 没有正确加载它ーー标题会掉到文本体中。看到像 Edge 这样的新浏览器,没有正确地渲染一项早已过时的技术,这是一个相当好的迹象,表明对这项技术的支持正在下降,而且正在消失在夕阳中。最后,如果您看到 < strong > “ SHTML”文件扩展名ーー 也就是说。 foo.shtmlーー您现在知道它为什么在那里,并且您现在知道它在那里做什么,
Pug
Handlebars
Vue
React
foo.shtml
在 XHTML 时代,SSI 很大。但是,在当代的 Dev-World 中,SSI 的最佳用途是作为教师,或者提醒人们,一种技术可以非常流行,标准化可以由一个以标准化有史以来最具体的网络技术(W3C)而闻名的组织来维护,但是它仍然可以以罗马的方式崩溃。SSI 是一个伟大的想法,但是为什么 web 是用 C + + 语言编写的,而不是真正用 C + + (JavaScript)编写的,这是有原因的。