当URL中提供凭据时,浏览器为什么不发送身份验证标头?
我想让用户有机会通过在URL中提供用户名和密码来执行每个请求的身份验证。由于请求是安全的,我对此不担心 我试图呼叫请求当URL中提供凭据时,浏览器为什么不发送身份验证标头?,url,authentication,curl,browser,basic-authentication,Url,Authentication,Curl,Browser,Basic Authentication,我想让用户有机会通过在URL中提供用户名和密码来执行每个请求的身份验证。由于请求是安全的,我对此不担心 我试图呼叫请求http://user:password@localhost/使用普通浏览器(Firefox、Chrome、Safari和Opera是我测试的浏览器),我得到了401响应。当我尝试使用相同的URI时,但这次提供了HTTP头的凭据,比如身份验证:Basic dXNlcjpwYXNzd29yZA==,它成功了 在搜索时,我找到了另一个问题的答案: 这个答案声称,浏览器应该根据URL中
http://user:password@localhost/
使用普通浏览器(Firefox、Chrome、Safari和Opera是我测试的浏览器),我得到了401响应。当我尝试使用相同的URI时,但这次提供了HTTP头的凭据,比如身份验证:Basic dXNlcjpwYXNzd29yZA==
,它成功了
在搜索时,我找到了另一个问题的答案:
这个答案声称,浏览器应该根据URL中提供的凭据自动生成身份验证标头
在命令行上使用curl进行尝试时,它是有效的。那么,为什么它不能在浏览器中工作呢
这和安全有关吗
Firefox是唯一声称:
您将要使用用户名“user”登录到网站“localhost”,但该网站不需要身份验证。这可能是
企图欺骗你
“localhost”是您想要访问的站点吗
但当通过单击yes确认此请求时,它会发送不带凭据的请求。至少,我在firebug的“网络”选项卡中看不到它们。。。答案也是401。是的,这是关于安全,也是关于选择 首先,当您使用curl执行上面提到的操作时,curl默认为并假设您需要(除非您指定了其他内容,而且名称确实是“Basic”) 如果您要求curl使用单个方法进行HTTP身份验证,并且您提供了凭据,那么它会决定可以立即发送身份验证头。如果您改为要求它执行几种身份验证类型(底层库可以执行),那么它不会在第一个请求中发送任何身份验证头,而是会发送一个非身份验证请求,以查看服务器想要的方法,就像浏览器一样 在浏览器的情况下,他们总是采用多个身份验证方案的方法,这样他们就不会假设您需要基本身份验证,这样他们就不会盲目地通过网络发送您的用户+密码。然后,只有当服务器实际上只需要Basic(或者浏览器不支持服务器支持的任何其他auth类型)时,他们才会这样做
我希望这能澄清一些问题。好的。。。听起来很合理。这里有一个视图链接,帮助我理解其余部分并使结构更加清晰:(介绍-如何工作-逐步)(如何提供多个领域)我的问题是,服务器没有在响应中发送
WWW-Authenticate
头。因此浏览器忽略了标题,Firefox警告我,这个请求不需要身份验证。