Почему браузеры отказываются загружать мои. js файлы и жалуются на типы MIME? - PullRequest
0 голосов
/ 19 апреля 2020

Решение:

Я должен был заметить это раньше. Любой, кто следует за книгой (или что-то подобное), может помочь этим:

Я поместил файлы в неправильный каталог "stati c": [каталог проекта] / stati c, а не [ каталог проекта] / lists / stati c, где «lists» - это имя созданного Django «app». Меня сбило с толку тот факт, что в обеих этих директориях "stati c" был базовый файл css (который загружался ).


I ' я пытаюсь выучить Django из (очень хорошей) книги .

Это просто добралось до главы , где добавляется немного Javascript. Я не новичок, когда дело доходит до Javascript.

Но с этим я справился с полной буферизацией.

Нам сказали поставить эти строки в конец нашего Django база файлов шаблонов. html:

<script src="/static/jquery-3.3.1.min.js"></script>
<script src="/static/list.js"></script>

<script>
  initialize(); // NB this is a simple function in the list.js script
</script>

Примечание для справки, я запускаю это в браузере, используя сервер разработки Django. Функциональные тесты, которые не проходят, вопреки тому, что говорится в книге, должны использовать django.contrib.staticfiles.testing.StaticLiveServerTestCase.

Все браузеры, которые я пробовал (Firefox, Chrome, Opera), не могут загрузить эти JS файлов. В случае Chrome (консоль) я получаю Status 404 для этих двух файлов, тогда как два. css файла в / в том же каталоге получают Status 200. В случае FF (v. 72) сообщения консоли немного больше crypti c: для обоих файлов консоль сначала выдает озадачивающее сообщение, связанное с MIME: "Сценарий из« http://localhost: 8000 / static / jquery -3.3.1.min. js ”был загружен, хотя его MIME-тип (« text / html ») не является допустимым JavaScript MIME-типом." , а затем сразу же после этого появляется сообщение "Загрузка не удалась для источника «http://localhost: 8000 / статический / jquery -3.3.1.min. js» . "

Я провел довольно много поиска, чтобы найти из того, что может происходить. Я пробовал строки, подобные этой, в рассматриваемом файле шаблона Django:

<script type="text/javascript"  src="/static/jquery-3.3.1.min.js"></script>

<script LANGUAGE="JavaScript"  src="/static/jquery-3.3.1.min.js"></script>

<script type="application/javascript"  src="/static/jquery-3.3.1.min.js"></script>

... ничего из вышеперечисленного ничего не меняет.

Сервер Django, на котором я работаю, также говорит 404 ... но только для JS файлов:

[19/Apr/2020 18:19:04] "GET / HTTP/1.1" 200 1451
[19/Apr/2020 18:19:05] "GET /static/jquery-3.3.1.min.js HTTP/1.1" 404 1670
[19/Apr/2020 18:19:05] "GET /static/base.css HTTP/1.1" 200 33
[19/Apr/2020 18:19:05] "GET /static/list.js HTTP/1.1" 404 1634
[19/Apr/2020 18:19:05] "GET /static/bootstrap/css/bootstrap.min.css HTTP/1.1" 200 117305
[19/Apr/2020 18:19:05] "GET /static/list.js HTTP/1.1" 404 1634

Подозревая, что я схожу с ума, я дважды проверил и трижды проверил: эти точные JS файлы, с эти точные имена действительно находятся в рассматриваемом каталоге "stati c".

Я не понимаю, что это за материал MIME и как он может блокировать загрузку файла JS так драматически. Для чего бы то ни было, я проверил типы MIME на своем компьютере таким образом:

mike@M17A ~ $  grep 'js' /etc/mime.types
application/javascript              js
application/json                    json

Мне трудно поверить, что это актуально, так как у меня проблемы со всеми 3 браузерами, но есть «Узнать» ссылка "more" с сообщениями об ошибках FF, которая приводит здесь , где мы читаем следующее:

Начиная с Firefox 72, также применяется отказ от прослушивания MIME в документы верхнего уровня, если указан тип контента. Это может привести к загрузке HTML веб-страниц вместо их рендеринга, когда они обслуживаются с типом MIME, отличным от text / html. Убедитесь, что оба заголовка установлены правильно.

Тестеры безопасности сайта обычно ожидают, что этот заголовок будет установлен.

Моя версия FF? Да, 72.

Как на самом деле «установить заголовок»? Не то чтобы это обязательно было решением ... но, по-видимому, это не повредит.

Редактировать после комментария Сроу
Chrome заголовки инструментов разработчика для jquery -3.3. 1.мин. js:

General
    Request URL: http://localhost:8000/static/jquery-3.3.1.min.js
    Request Method: GET
    Status Code: 404 Not Found
    Remote Address: 127.0.0.1:8000
    Referrer Policy: no-referrer-when-downgrade
Reponse Headers
    Content-Type: text/html
    Date: Sun, 19 Apr 2020 18:36:11 GMT
    Server: WSGIServer/0.2 CPython/3.6.10
Request Headers
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
    Cache-Control: no-cache
    Connection: keep-alive
    Cookie: csrftoken=Nhj1OavzFCQ3HYRmpWIdSlR595Y6hHGprY2sMUkLL5wzuIIDw1PjTx9fUfpVDnU8
    Host: localhost:8000
    Pragma: no-cache
    Referer: http://localhost:8000/
    Sec-Fetch-Mode: no-cors
    Sec-Fetch-Site: same-origin
    User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36

1 Ответ

0 голосов
/ 20 апреля 2020

Публикация этого ответа. Несмотря на мое смущение из-за такой ошибки на уровне сутулости.

Я поместил файлы в неправильный каталог "stati c": [каталог проекта] / stati c, а не [каталог проекта] / lists / stati c, где "lists" - это имя созданного Django "app". Я был введен в заблуждение тем, что в обеих этих директориях "stati c" был базовый файл css (который загружался ).

Я предлагаю принять этот ответ чтобы сохранить вопрос, на том основании, что в будущем кому-то может помочь одна из нескольких причин, по которой могут возникнуть проблемы с загрузкой JS файлов.

Если за голосование проголосует достаточно людей, я все удалю!

...