烟消火灭网

```html 所有网页的扩展名都是htm对 所有网页的扩展名都是htm对 打开浏览器,地址栏里敲进一个网址,回车之后页面跳出来。你盯着看,觉得它就是一个“网页”。可要是让你把这个页面存到

所有网页的扩展名都是htm对

```html 所有网页的网页扩展名都是htm对

所有网页的扩展名都是htm对

打开浏览器,地址栏里敲进一个网址,扩都h对回车之后页面跳出来。展名你盯着看,网页觉得它就是扩都h对一个“网页”。可要是展名让你把这个页面存到硬盘上,你多半会看见浏览器默认保存为 .html 或者 .htm。网页有人就说了:那不就结了,扩都h对所有网页的展名扩展名都是htm。这话听着像那么回事,网页仔细一琢磨,扩都h对漏洞比渔网还多。展名

先拿我自己的网页经历说。前阵子帮朋友修一个老网站,扩都h对服务器上跑的展名是 PHP。每个页面在硬盘上躺着的文件名是 index.php、about.php。你从浏览器里访问,地址栏显示的是 https://example.com/about,连个扩展名都看不见。浏览器收到的是一堆 HTML 代码,但服务器上的那个文件,扩展名是 .php。它先被 PHP 解释器跑一遍,把动态内容填进去,再吐给浏览器。你说这网页的扩展名是 htm?服务器第一个不答应。

再说现在满大街的 JavaScript 框架。React、Vue 做出来的单页应用,路由全靠前端控制。你点一个链接,地址栏变了,页面内容也变了,但浏览器根本没向服务器请求新的 HTML 文件。它只是用 JavaScript 换了一块 DOM。这种情况下,你连一个独立的“网页文件”都找不到,哪来的扩展名?整个应用可能就一个 index.html 作为入口,其他“页面”全是内存里的组件。硬要说扩展名,那也只有入口那个文件是 html,其余全是 .js 或者 .vue。

还有更隐蔽的。很多内容管理系统,比如 WordPress,默认固定链接是 ?p=123 这种形式。你访问 https://blog.com/?p=123,服务器上的文件可能叫 index.php,也可能经过伪静态规则重写,实际执行的是 single.php。扩展名?不存在的。URL 里连个点都找不着。但浏览器渲染出来的,确确实实是一个网页。

有人会抬杠:我说的是“网页”的扩展名,不是服务器端脚本的扩展名。那好,咱们把范围缩到“静态网页”。一个纯 HTML 文件,扩展名可以是 .html,也可以是 .htm。Windows 上早年因为 8.3 文件名限制,才流行用 .htm。现在两种都合法,服务器一般也都能识别。但这就叫“所有”了?.xhtml 算不算网页?它用 XML 语法写 HTML,扩展名是 .xhtml。浏览器照样渲染。还有 .shtml,支持服务器端包含。甚至 .asp、.jsp、.aspx,这些动态页面在浏览器眼里,最终呈现的都是网页。它们的扩展名五花八门。

我自己的博客用的是静态站点生成器。源文件是 Markdown,扩展名 .md。构建之后生成一堆 .html 文件。但部署到 Netlify 上,URL 里通常不带扩展名。你访问 /posts/hello,实际请求的是 /posts/hello.html。浏览器地址栏不显示,但服务器上那个文件确实是 .html。这算是个折中情况:物理文件有扩展名,但用户看到的 URL 没有。

所以,“所有网页的扩展名都是htm”这个说法,错得挺离谱。它把“浏览器最终渲染出 HTML”和“服务器上文件的扩展名”混为一谈了。浏览器只认内容类型(Content-Type),不关心你文件叫什么。服务器返回 text/html,哪怕文件名叫 foo.txt,浏览器也当网页渲染。反过来,你返回 application/pdf,就算文件名叫 bar.html,浏览器也只会弹出下载或者 PDF 阅读器。

扩展名是给操作系统和服务器看的,不是给浏览器看的。把这两件事搅在一起,就容易得出那种一拍脑袋的结论。下次再有人跟你说“所有网页都是 htm”,你可以让他去查查自己公司官网后台,看看那些页面文件到底叫什么名字。我赌五毛钱,他找不着几个 .htm。

```

访客,请您发表评论:

© 2026. sitemap