python - 为什么在 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
解决方案
最后证明是两个问题的结合:
第一的
如果仅使用 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试图帮助我
推荐阅读
- java - 使用 JDBC 和 Spring Boot 创建 java.sql.Connection
- bash - 访问 git pre-receive 钩子中的更改文件并搜索字符串模式
- asp.net-core - 网站页面之间的即时转换
- php - 对于 Shopify,我在学习 PHP 或 Ruby 之间存在冲突
- sql - MS Access VBA SQL SELECT * INTO tempTbl WHERE Stuff="" AND OtherStuff BETWEEN Date Range
- java - 是否可以使用通配符创建路由?
- python - 如何在 Python 中对幻数进行 lint(静态分析代码)?
- database - 如何验证我的 sqlite3 数据库是 3.25 版?
- amazon-web-services - 来自账户拥有的任何存储桶的 S3 跨账户通知
- javascript - Angular 6 动画转发(Angular 中的动画填充模式)