我已经找到了解决此问题的方法,但我有一个服务器的客户端,当我使用空的Authorization标头发出GET请求时,会丢失400个错误。当没有Authorization标头时,它工作得很好。我想解释\或解决问题,而不是仅仅说我修复了它。
我的旧代码就是这样:
request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"] ?? string.Empty;
request.GetResponse();
我切换到了这个:
if (_Request.ServerVariables["HTTP_AUTHORIZATION"] != null)
{
request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"];
}
request.GetResponse();
答案 0 :(得分:1)
您可能希望看到此问题:What is the HTTP_AUTHORIZATION environment variable?
基本上,当您传递Authorization标头时,服务器应该使用它来测试用户是否有权访问底层资源。通过发送带有空值的标头,您实际上是在告诉服务器使用空白凭证......这是失败的。
当您不发送授权标头时,服务器会尝试使用它的资源的默认凭据,该凭据通过。
这应该起作用的方式是:
如果远程服务器使用401和WWW-Authenticate标头响应初始请求,则您的代码应仅发送Authorization标头。否则不应发送该标题。
更多信息:http://en.wikipedia.org/wiki/Basic_access_authentication