49

大きな HTTP リクエストを考えてみましょう:

POST /upload HTTP/1.1
Content-Type: multipart/form-data
Content-Length: 1048576

...

クライアントは、メガバイトのデータのアップロードを開始します。これには時間がかかる場合があります。ただし、サーバーは HTTP 承認が必要であると判断したため、 で応答することを決定しHTTP 401 Unauthorizedます。

Content-Lengthサーバーは、応答する前に、リクエスト全体 (IE、ヘッダー + CRLF CRLF + バイト) を受信するまで待機する必要がありますか?

実際には、そのような動作はブラウザを壊しますか? とにかくブラウザはファイルのアップロードを続けますか、それとも「時期尚早」の応答を受け取った場合、送信を停止しますか?

さらに重要なことは、このシナリオで、ユーザーは正常に認証され、(資格情報を使用して) アップロードを再開できるでしょうか? それとも、このようにアップロードを中断するのは信頼できないでしょうか?

4

1 に答える 1

35

プロトコルを定義する RFC 2616 を見ると、セクション 8.2.2 エラー ステータス メッセージの接続の監視で、次のように述べられています。

メッセージ本文を送信する HTTP/1.1 (またはそれ以降) のクライアントは、要求の送信中にネットワーク接続のエラー状態を監視する必要があります。クライアントがエラー ステータスを確認した場合、クライアントはすぐに本文の送信を停止する必要があります。

したがって、401エラーを送信してジャンプできると思います。そして、10.4.2 401 Unauthorized を見ると

リクエストにはユーザー認証が必要です。応答には、要求されたリソースに適用可能なチャレンジを含む WWW-Authenticate ヘッダー フィールド (セクション 14.47) を含める必要があります。クライアントは、適切な Authorization ヘッダー フィールドを使用してリクエストを繰り返すことができます (MAY)。

クライアントが適切な資格情報で再試行できることを示します。

ただし、ブラウザーが実際にどのように機能するかを確認するための実験は行っていません。

于 2013-01-23T15:59:53.357 に答える