首页 > 解决方案 > 为什么在 Windows 上使用以 CherryPy 开头的 html 文件看起来不对?

问题描述

谁能解释为什么在浏览器中使用导致缺少 css 的结果?我准备了一个小测试(查看https://gist.github.com/bmxp/f0f4ebe52019d2d239ab0abe8f5e4867),其中提供的两个 html 文件之间的唯一区别是第一行。

在 Windows 平台上:

因此,如果被省略(如在 index.html 中)然后背景看起来绿色很好,我们有一个令人愉快的Hello 世界

如果被包含,则 css 将不会用于显示。

如果第一行更改为 html 拼写错误,例如然后文档显示正常。但是一旦 html 或 HTmL 或其他变体在第一行中一起使用,它就无法使用 css。

在 Linux 平台上:

任何一个文件都显示正常。

所以我怀疑原因是windows或windows上的cherrypy实现。

我尝试过的任何浏览器都会显示该错误:Chrome、Firefox、Edge 和 Opera

标签: pythoncsswindowsmime-typescherrypy

解决方案


最后证明是两个问题的结合:

第一的

如果仅使用 then 开始文档,<html> ...则这似乎被认为不是真正有效的 html 文件。text/plain因此,与作为 mimetype一起提供的 css 的封闭链接将显示正常。

如果从正确开始,<!DOCTYPE html> ...则不能原谅 mimetype 本质上是错误的。

第二

CherryPytext/plain作为我的 css 文件的 mimetype 交付。我在另外两台windows电脑上试了一下,没有出现问题。我尝试了另一台我之前用于某些开发的旧计算机,它显示出相同的错误行为......

Linux 从来没有以我尝试过的任何方式表现出这种失败。

我进行了更深入的调查:Cherrypy 使用 python 标准 mimetype 模块,或者我可以在包含'tools.staticdir.content_types': { 'css': 'text/css' }在我的\static配置中时为 css 传递一个专用的 Content-Type。当通过专用的 Content-Type 时,失败就消失了。

现在为什么似乎总是在某些 Windows 系统上出现错误的关联?我发现 winreg 用于直接从注册表中读取 mimetypes。检查Computer\HKEY_CLASSES_ROOT\.css显示与text\plain. 所以这让我很头疼!更改Computer\HKEY_CLASSES_ROOT\.css[Content Type]为它后,text/css它终于按预期工作了。注册表中我的开发计算机上的最后一个关联是 (Standard) with VisualStudio.css.14.0,因此可能是该程序也设置了 mimetype。

这个问题在cherrypy/cherrypy的gitter.im上讨论过,我在那里得到了想法和建议的帮助,非常感谢@webknjaz和@cyraxjoe试图帮助我


推荐阅读