2


0

HTTP POSTリクエストには複数の送信が必要ですか?

引用されたテキストは、第16章:サーバー側スクリプティング(983ページ)のMark LutzによるProgramming Python 3rd editionで見つけました。

_ フォームには、ソケットを介してターゲットサーバーマシンにデータを送信するために使用されるエンコードスタイルを指定するメソッドオプションも含まれています。 ここでは、* postスタイルを使用します。このスタイルは、サーバーに接続し、ユーザー入力データのストリームを別の送信で送信します*。 別の* getスタイルは、通常は?の後、スクリプトを呼び出すために使用されるURLの最後にユーザー入力を追加することにより、単一の送信ステップで入力情報をサーバーに送信します* キャラクター(これについては後ほど説明します)。 _

これを少し困惑させて読んだ。 私の知る限り、投稿データは同じhttpヘッダーの一部として同じ送信で送信されます。 ポストデータ送信のこの追加手順について聞いたことがありません。

関連するHTTP rfcをすばやく調べたところ、バージョン1.0または1.1の違いに気付きませんでした。 また、いくつかの分析にwiresharkを使用しましたが、投稿に複数の送信があることに気付きませんでした。

基本的な何かが欠けていますか、これはテキストのエラーですか?

3 Answer


1


シンプルなPOSTリクエストはシングルステップです。 ただし、ファイルをアップロードする場合、フォームは複数の部分に投稿されます。 その場合、コンテンツタイプ* application / x-www-form-urlencoded multipart / form-data *に変更されます。


0


はい、サーバーとクライアント間でのデータの送信は1回のみです。

パッセージのコンテキストは、WebサーバーとCGIアプリケーション間の通信に言及していました。 POSTを使用したWebサーバーとcgiアプリケーション間のサーバー通信は、2つの別々の転送で行われます。 pythonスクリプトの要求は、サーバーによって1回の転送で送信され、その後、POSTデータはstdin(2回の転送)で個別に送信されます。

GETでは、入力データは1回の転送でenv varまたはコマンドライン引数として渡されます。


0


HTTP Expect 100-Continue header(8.2.3を参照)およびhttps://tools.ietf.org/html/rfc2616#section -10.1.1 [100 Continue response]を使用すると、クライアントはHTTP POSTを2つの送信に分割できます(単一の接続経由)。

_ _ 100(続行)ステータスの目的は、クライアントがリクエスト本文を送信する前に、リクエスト本文を含むリクエストメッセージを送信しているクライアントが、オリジンサーバが(リクエストヘッダーに基づいて)リクエストを受け入れるかどうかを判断できるようにすることです。

場合によっては、サーバーが本文を見ずにメッセージを拒否する場合、クライアントが本文を送信することは不適切または非常に非効率的である可能性があります。 _ _

ほとんどのブラウザはこれを使用するとは思いませんが、一部のライブラリ/ユーティリティは使用します(curl、.Net)。