Java HttpServer基本身份验证问题

Java HttpServer基本身份验证问题,java,com.sun.net.httpserver,apache-commons-httpclient,Java,Com.sun.net.httpserver,Apache Commons Httpclient,我有一个Java的HttpServer实现,我用它来测试它的基本功能,这意味着我可以动态地调整为客户端提供的服务。我的代码使用apache http客户端 我想使用这个实现测试一些身份验证,但我遇到了一些问题。我的问题是,我的代码从不进行身份验证,发送初始请求,服务器使用401进行响应,但http客户端从不响应。它遍历身份验证类型列表,但从不选择基本类型 如果我使用浏览器连接到同一个url,系统会提示我提交凭据时,它会登录。如果我更改代码,使代码尝试登录到其他服务器,那么它是成功的,因此我知道两

我有一个Java的
HttpServer
实现,我用它来测试它的基本功能,这意味着我可以动态地调整为客户端提供的服务。我的代码使用apache http客户端

我想使用这个实现测试一些身份验证,但我遇到了一些问题。我的问题是,我的代码从不进行身份验证,发送初始请求,服务器使用401进行响应,但http客户端从不响应。它遍历身份验证类型列表,但从不选择基本类型

如果我使用浏览器连接到同一个url,系统会提示我提交凭据时,它会登录。如果我更改代码,使代码尝试登录到其他服务器,那么它是成功的,因此我知道两端都可以工作

我已经在客户端和服务器端对连接进行了有线共享,我可以看到的区别是:

  • 连接成功后,后续请求将作为POST而不是GET发送
  • 当我的服务器响应时,身份验证头是Www而不是Www(当它工作时)
编辑:

通过查看http代码,区分大小写不应导致任何问题。第一个响应失败,第二个响应有效:

失败

工作

GET/svn HTTP/1.1
主机:SVN服务器
连接:保持活力
用户代理:Apache HttpAsyncClient/4.0-beta1(java 1.5)
需要HTTP/1.1 401授权
日期:2012年4月16日星期一09:51:58 GMT
服务器:Apache/2.2.3(CentOS)
WWW-Authenticate:Basic-realm=“Subversion存储库”
内容长度:475
保持活动状态:超时=15,最大=100
连接:保持活力
内容类型:text/html;字符集=iso-8859-1
401需要授权
需要授权
此服务器无法验证您是否
您有权访问该文档
请求。要么你提供的是错误的
凭据(例如,错误的密码)或您的
浏览器不了解如何提供
所需的凭据


位于SVN服务器端口80的Apache/2.2.3(CentOS)服务器 GET/svn HTTP/1.1 主机:SVN服务器 连接:保持活力 用户代理:Apache HttpAsyncClient/4.0-beta1(java 1.5) 授权:基本YQVkd2Gm3GS6dXNjbMk5
您可以发布一些您正在使用的示例代码(客户端)吗?此问题是由于客户端代码仅在端口443上进行身份验证造成的,我的服务器使用的是非标准端口。是的,我允许http客户端在任何端口上进行身份验证,它都能正常工作!
GET /testing HTTP/1.1
Host: 192.168.30.65:8000
Connection: Keep-Alive
User-Agent: Apache-HttpAsyncClient/4.0-beta1 (java 1.5)

HTTP/1.1 401 Unauthorized
Content-length: 0
Www-authenticate: Basic realm="myRealm"
GET /svn HTTP/1.1
Host: svnserver
Connection: Keep-Alive
User-Agent: Apache-HttpAsyncClient/4.0-beta1 (java 1.5)

HTTP/1.1 401 Authorization Required
Date: Mon, 16 Apr 2012 09:51:58 GMT
Server: Apache/2.2.3 (CentOS)
WWW-Authenticate: Basic realm="Subversion Repository"
Content-Length: 475
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
<hr>
<address>Apache/2.2.3 (CentOS) Server at svnserver Port 80</address>
</body></html>

GET /svn HTTP/1.1
Host: svnserver
Connection: Keep-Alive
User-Agent: Apache-HttpAsyncClient/4.0-beta1 (java 1.5)
Authorization: Basic YQVkd2Gm3GS6dXNjbMk5