Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当URL中提供凭据时,浏览器为什么不发送身份验证标头?_Url_Authentication_Curl_Browser_Basic Authentication - Fatal编程技术网

当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中

我想让用户有机会通过在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警告我,这个请求不需要身份验证。