基本的なリクエストに応答する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 を返信します。
しかし、ユーザー名/パスワードが間違っている場合は、401 を再度送信します (元の要求に使用したのとまったく同じコードを使用して、資格情報なしで使用します。この場合、以前と同じユーザー名/パスワードで同じ要求を再度取得します。そして、再び 401 を送り返します。今度はサイクルが停止します。
注意すべきことの 1 つは、クレデンシャルを伴う 2 つの GET リクエストのうち、同じ uname/password を伴うリクエストですが、リクエストの順序が異なることです。
すなわち
資格情報を使用した最初のリクエスト
GET /basic HTTP/1.1
Authorization: Basic dHJ5OjEyMzQ1Ng==
User-Agent: Jakarta Commons-HttpClient/2.0.2
Host: IPAddress:Port of my program
資格情報を含む 2 番目の要求
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 が、Web サーバーが要求をプログラムに転送するために使用するライブラリだと思います。
ここで何が間違っていますか?資格情報が正しくない場合は、資格情報がない場合とは異なる応答が必要ですか? または、これはブラウザと私のプログラムの間にあるプログラムの問題ですか(ブラウザのリクエストを私のプログラムに転送します)。元のリクエストの順序が原因でプログラムがリクエストを拒否していないことを確認するためだけにリクエストを送信していますか?