Модули Javascript ES6 не проходят через базовую аутентификацию .htaccess
Когда я запускаю следующий JavasScript, я могу успешно войти в систему, но не получить доступ к этим модулям. Как я могу передать им аутентификацию?
Пример кода
<DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="module">
import * as mymodule from "./js/mymodule.js";
mymodule.runme();
</script>
</body>
</html>
Открывая это с помощью .htaccess с базовыми результатами аутентификации в GET
[...]mymodule.js [HTTP/1.1 401 Authorization Required 1ms]
в Firefox 54 (dom.moduleScripts.enabled, он работает без .htaccess).
.htaccess
AuthType Basic
AuthName "Internal Area"
AuthUserFile /opt/.../.htpasswd
Require valid-user
Ответы
Ответ 1
Кажется, что скрипт с type="module"
не извлекает файл javascript с необходимыми данными учетных данных для аутентификации пользователя сервером.
Поэтому вы получаете HTTP/1.1 401 Authorization Required
Чтобы решить эту проблему, вы можете добавить атрибут crossorigin
в тег скрипта:
<script type="module" crossorigin src="./js/mymodule.js"></script>
<script type="module">
import * as mymodule from "./js/mymodule.js";
mymodule.runme();
</script>
Это сообщит браузеру о том, чтобы выполнить "учетный" запрос (запрос, который знает о HTTP файлах cookie и HTTP-аутентификации).
Ответ 2
Похоже, что HTML кэшируется Firefox, и вы не аутентифицируетесь на сервере.
Вы можете попробовать следующее:
Предотвращение кэширования файлов html. Добавить в .htaccess:
<filesMatch "\.(html)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Sat, 01 Jan 2000 00:00:00 GMT"
</ifModule>
</filesMatch>
используйте расширение PHP вместо HTML