为什么Chrome有时会第二次要求基本身份验证而Firefox却没有?

Pau*_*ang 7 authorization google-chrome

我在一个基本身份验证后面的Nginx服务器(homestead Vagrant box)上运行了一个React前端和一个Laravel后端,Nginx配置如下:

server {
    ...
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        auth_basic              "Restricted";
        auth_basic_user_file    /home/vagrant/Code/project/.htpasswd;
    }
}
Run Code Online (Sandbox Code Playgroud)

这基本上可以正常运行,Chrome(v52,Mac OS X)"有时"会在后续请求中再次请求auth,例如在按钮悬停时加载定义为css-background的图像.这种行为(至少对我目前的研究而言)并不一致,我不能定期重现它,它不时发生,我找不到后续auth请求的原因.

在Firefox(v47.0,Max OS X)中,我得到一个auth提示符,然后它按预期工作.

您是否知道如何调试Chrome中的特定行为或确保第一个auth提示符是唯一的?

注意:前端向后端发送一些XHR调用,这些调用还设置了"授权"标头以完成基本身份验证而不显示提示.

小智 2

我怀疑这里的问题在于您如何在本地存储授权令牌及其有效时间。浏览器对本地存储的处理方式略有不同,因此,如果您使用本地存储或会话存储,则可能只是数据保存方式有所不同。

我相信这篇文章可能有助于回答这个问题:localStorage 的持久性如何?

基本上,Chrome 允许数据设置一个超时期限,而在 Firefox 中“不可能为任何数据指定过期期限”

如果您经常使用 Chrome 并出于其他原因清除缓存,那么您可能也会清除您的身份验证令牌。如果您仅使用 Firefox 进行测试,则您可能有一个未过期的缓存身份验证令牌。

  • [此](http://stackoverflow.com/a/35161885/1744768) 答案说明其存储在浏览器缓存中 (2认同)