-1

我正在编写一个响应基本请求的 java 程序 - 以此作为参考 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

浏览器第一次发送没有凭据的 GET 请求。我用 401 回复。

out.println("HTTP/1.1 401 Unauthorized");
out.println("Server: My Test Server");
out.println("Content-Type: text/html; charset=iso-8859-1");
out.println("Accept-Ranges: bytes");
out.println("Connection: close");
out.println("WWW-Authenticate: Basic realm=\"myrealm\"");
out.println();

(出是插座)。

所以浏览器发回相同的请求,但现在使用用户名/密码。如果用户名/密码是正确的,我会发回 200 和一切都是 hunkydory。

但是,如果用户名/密码错误,我会再次发回 401(使用与原始请求完全相同的代码,但没有凭据。在这种情况下,我再次收到与以前相同的用户名/密码相同的请求。并且我再次发回 401。这一次循环停止。

需要注意的一点是,在带有凭据的 2 个 GET 请求中,请求带有相同的 uname/password,但请求的顺序不同。

IE

带有凭据的第一个请求

GET /basic HTTP/1.1
Authorization: Basic dHJ5OjEyMzQ1Ng==
User-Agent: Jakarta Commons-HttpClient/2.0.2
Host: IPAddress:Port of my program

带有凭据的第二个请求

GET /basic HTTP/1.1
User-Agent: Jakarta Commons-HttpClient/2.0.2
Host: IPAddress:Port of my program
Authorization: dHJ5OjEyMzQ1Ng==

关于用户代理,我认为 Jakarta Commons-HttpClient/2.0.2 是网络服务器用来将请求转发到我的程序的库。

我在这里做错了什么?错误的凭据是否需要与没有凭据不同的响应?或者这是位于浏览器和我的程序之间的程序的问题(将浏览器的请求转发给我的程序)。发送请求只是为了确保我的程序不会因为原始请求的顺序而拒绝请求吗?

4

1 回答 1

1

如果没有提供凭据,我遇到的每台服务器最初都会发送 401,然后如果提供了凭据但无效,则会发回403 错误。

401 = 您需要获得授权,请给我发送凭据

403 = 我看到了你的凭据,但你没有被授权。

于 2013-04-12T08:15:18.700 回答