除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间有啥区别吗?

Posted

技术标签:

【中文标题】除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间有啥区别吗?【英文标题】:Is there any difference between a .json, .txt, .html, .css, and .js file other than the extension?除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间有什么区别吗? 【发布时间】:2017-12-29 13:36:42 【问题描述】:

推动力是:我有一些 JSON 文件已经保存为 .txt 文件了一段时间。我想将它们全部重命名为 .json 以更准确。我很确定它们都是 UTF-8,大多数可以通过 Ajax 发送的文件也是如此。

无论如何,这个问题提出了一个更大的问题。

除了扩展名之外,所有这些文本类型之间是否有任何真正的区别? .html、.json、.css、.js、.txt、.py 等等……它们在内部看起来都是一样的:一个 UTF-8 字符数组。

如果你可以互换使用这些,会比混淆更糟糕吗?这些有标题吗?保存时它们中的任何一个编码不同吗?大多数 .txt 文件是否具有不同的扩展名?

【问题讨论】:

【参考方案1】:

理论上你可以使用任何你想要的后缀。后缀本身对文件的内容没有影响。但是应用程序会根据文件后缀做不同的事情。因此,如果您使用了错误或未知的后缀,那么您需要告诉应用程序它是什么文件类型,否则它会解释错误。

默认情况下,网络服务器会为带有后缀htmhtml 的文件添加text/html 作为Content-Type 标头。然后客户端会将收到的文件解释为html,因为Content-Type。因此,如果您将 html 添加到 javascript 或 CSS 文件,则客户端可能不会执行/使用它们,即使加载了 <link><script>

但是,如果您告诉网络服务器为style.html 发送text/css,为application/javascript 发送script.html,那么客户端可能正确使用它们。网络浏览器应该在根据后缀猜测类型之前使用Content-Type 标头。

【讨论】:

知道了这一点,我可以很容易地编写一些代码来以非破坏性的方式切换一大堆这些东西......也许在四月初的一天。 这里唯一的例外是.html 扩展。浏览器不检查 content-type 并将其作为 html 仅基于扩展名。尝试将图像更改为.txt,它仍将作为图像打开。尝试将其更改为.html,它将以大量编码文本的形式打开。 哈哈。奇怪,谢谢。我真的发现请求和提供带有 .txt 扩展名的图像的想法很有趣。这真的会惹恼一些人。 @Miro 如果您在没有网络服务器的情况下在本地执行此操作,那么浏览器肯定会使用文件扩展名,也许还有其他信息,因为它不会得到任何 content-type 标头。但是,如果您使用 http 协议传递文件,并且如果您将 http 响应中的 content-type 标头明确设置为例如image/jpeg 用于该 .html 文件,然后网络浏览器将使用它。我在写答案之前对其进行了测试,并在我写评论之前在这三个浏览器中对其进行了测试。 @Miro 好吧,您说过浏览器不会检查 content-type 标头中的 .html,但确实如此。如果您在没有 http 服务器的情况下打开文件,则没有要检查的 content-type 标头,因此浏览器将仅使用文件扩展名或尝试根据文件内容的开头猜测正确的类型。这就是为什么浏览器可能会显示本地图像,即使它具有错误的后缀。

以上是关于除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥除了纬度和经度之外的所有内容的 JSON 都返回为零?

AWS Elastic Beanstalk Python (3.8) 平台:除了使用 `requirements.txt` 之外,为带有 `--no-deps` 标志的 Python 包运行额外的 p

htaccess删除除了一个特定文件夹之外的php扩展名

使用除 robots.txt 之外的虚拟主机进行重定向

为啥 UIView 的扩展对除了放置在 IB 上的 UIView 之外的其他控件没有直接影响?

除了设置断点之外,还有啥方法(通过设置或扩展)来查看和使用 VSCODE 中的变量。喜欢蜘蛛?