Javascript ES6模块没有传递.htaccess基本身份验证

Kon*_*ner 20 javascript .htaccess es6-modules

当我运行以下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>
Run Code Online (Sandbox Code Playgroud)

GET [...]mymodule.js [HTTP/1.1 401 Authorization Required 1ms]在Firefox 54上使用基本身份验证的.htaccess打开它(dom.moduleScripts.enabled,它可以在没有.htaccess的情况下工作).

的.htaccess

AuthType Basic
AuthName "Internal Area"
AuthUserFile /opt/.../.htpasswd
Require valid-user
Run Code Online (Sandbox Code Playgroud)

nap*_*zba 8

似乎脚本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>
Run Code Online (Sandbox Code Playgroud)

这将通知浏览器发出"凭证"请求(请求知道HTTP cookie和HTTP身份验证信息).


nap*_*zba 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>
Run Code Online (Sandbox Code Playgroud)

使用 PHP 扩展代替 HTML