Модули 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