Зачем использовать файл html, начинающийся с обслуживается с CherryPy на Windows выглядит неправильно? - PullRequest
1 голос
/ 02 августа 2020

Может ли кто-нибудь объяснить, почему в браузере используются результаты с отсутствием css? Я подготовил небольшой тест (см. https://gist.github.com/bmxp/f0f4ebe52019d2d239ab0abe8f5e4867), где единственное различие между двумя обслуживаемыми файлами html - это первая строка.

На платформе Windows:

Итак, если опущено (как в index. html), тогда фон выглядит нормально в зеленом цвете, и у нас есть приятный Hello world

If включено, тогда css не будет использоваться для отображения.

Если в первой строке будет указано html с ошибкой, например , тогда документ будет отображаться нормально. Но как только html или HTmL или другие варианты встречаются вместе в первой строке, он не может использовать css.

На платформе Linux:

Любой файл отображается нормально .

Итак, я подозреваю, что причина кроется в windows или в реализации cherrypy на windows.

Ошибка отображается в любом браузере, который я пробовал: Chrome, Firefox, Edge и Opera

1 Ответ

2 голосов
/ 02 августа 2020

В конечном итоге это оказалось комбинацией двух проблем:

Сначала

Если вы начинаете документ только с <html> ..., то это, кажется, будет считаться недействительным html файл. Таким образом, вложенная ссылка на css, который доставляется с text/plain в качестве mimetype, будет отображаться нормально.

Если начать правильно с <!DOCTYPE html> ..., то не прощается, что mimetype по существу неверен.

Второй

CherryPy доставил text/plain в качестве mimetype для моего файла css. Я пробовал его на двух других windows компьютерах, и он не выявил проблемы. Я попробовал другой старый компьютер, который я использовал ранее для некоторой разработки, и он показал такое же ошибочное поведение ...

Linux никогда не показывал этот сбой, ни с каким вкусом, который я пробовал.

I исследовано глубже: Cherrypy использует стандартный модуль mimetype python, или я могу передать выделенный Content-Type для css при включении 'tools.staticdir.content_types': { 'css': 'text/css' } в мою конфигурацию \static. При передаче выделенного Content-Type ошибка исчезла.

Теперь, почему кажется, что всегда существует неправильная ассоциация только в определенных windows системах? Я обнаружил, что winreg используется для прямого чтения миметипов из реестра. Проверка Computer\HKEY_CLASSES_ROOT\.css показала связь с text\plain. Так что это вызвало у меня головную боль! После изменения Computer\HKEY_CLASSES_ROOT\.css[Content Type] на text/css он наконец заработал, как ожидалось. Последняя ассоциация на моем компьютере разработки в реестре была (Standard) с VisualStudio.css.14.0, возможно, таким образом, mimetype также был установлен этой программой.

Проблема обсуждалась на gitter.im на Cherrypy / cherrypy, и мне там помогли с идеями и предложениями, так что большое спасибо @webknjaz и @cyraxjoe за попытку помочь мне

...