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

4
推动力是:我有一些JSON文件,已经保存为.txt文件一段时间了。我想将它们全部重命名为.json以更准确。我很确定它们都是UTF-8编码的,因为大多数文件都可以通过Ajax发送。
无论如何,这个问题引发了一个更大的问题。
除了扩展名之外,所有这些文本类型之间是否有任何真正的区别?.html、.json、.css、.js、.txt、.py等...从内部来看,它们似乎都是相同的东西:一个UTF-8字符数组。
如果你可以互换使用它们,会比仅仅让人困惑更糟吗?它们中的任何一个有头文件吗?当被保存时,它们是否以不同方式进行编码?是否大多数.txt文件带有不同的扩展名?
1个回答

3

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

对于具有后缀 htmhtml 的文件,Web 服务器将默认添加 text/html 作为 Content-Type 标头。客户端将根据该 Content-Type 解释接收到的文件为 html。因此,如果您将 html 添加到 JavaScript 或 CSS 文件中,则即使使用 <link><script> 加载,客户端也可能无法执行/使用它们。

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


这里唯一的例外是 .html 扩展名。浏览器不会检查 content-type,仅根据扩展名将其作为 html 提供。尝试将图像更改为 .txt,它仍将以图像形式打开。尝试将其更改为 .html,它将作为大量编码文本打开。 - Miro
1
@Miro 如果你在本地进行这个操作而没有使用Web服务器,那么浏览器肯定会使用文件扩展名,也许还会使用其他信息,因为它不会得到任何“content-type”头。但是,如果你使用http协议传递文件,并且在http响应中显式设置了“content-type”头,例如对于该“.html”文件设置为“image/jpeg”,那么Web浏览器将使用它。我在回答之前进行了测试,并在发表评论之前在这三个浏览器中进行了测试。 - t.niese
在那种情况下,是的。说得对。然而,由于某种原因,具有扩展名.txt(或除.html之外的任何其他扩展名)的图像仍会在本地打开为图像。 - Miro
1
@Miro,你说浏览器不会检查.htmlcontent-type头,但实际上它确实会检查。如果你在没有HTTP服务器的情况下打开一个文件,就没有content-type头可以检查了,所以浏览器要么只使用文件扩展名,要么尝试根据文件内容的开头猜测正确的类型。这就是为什么浏览器可能会显示本地图像,即使它有错误的后缀。 - t.niese
对于给定的Web服务器配置,content-type头是根据文件扩展名设置的。如果Web浏览器可以根据content-type正确解释传递的内容,则它将基于该content-type显示数据;如果浏览器在根据content-type解释数据时遇到问题,则结果可能会有所不同,并且取决于浏览器和系统,您应该假设行为是不可预测和未定义的。 - t.niese
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接