-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 を返信します。

しかし、ユーザー名/パスワードが間違っている場合は、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 サーバーが要求をプログラムに転送するために使用するライブラリだと思います。

ここで何が間違っていますか?資格情報が正しくない場合は、資格情報がない場合とは異なる応答が必要ですか? または、これはブラウザと私のプログラムの間にあるプログラムの問題ですか(ブラウザのリクエストを私のプログラムに転送します)。元のリクエストの順序が原因でプログラムがリクエストを拒否していないことを確認するためだけにリクエストを送信していますか?

4

1 に答える 1

1

私が遭遇したすべてのサーバーは、資格情報が提供されていない場合は最初に 401 を送信し、資格情報が提供されているが無効である場合は403 エラーを返します。

401 = 認証が必要です。認証情報を送ってください

403 = 認証情報を確認しましたが、認証されていません。

于 2013-04-12T08:15:18.700 に答える