生のPOSTデータの意味を理解しようとしています。PHPのマニュアルページには$HTTP_RAW_POST_DATA
、この変数にが含まれていると記載されていますRaw POST data
。
この変数はいつ設定され、生のPOSTデータの意味は何ですか?
私は理解して$_POST
いますが、私は完全に混乱してい$HTTP_RAW_POST_DATA
ます。
生のPOSTデータの意味を理解しようとしています。PHPのマニュアルページには$HTTP_RAW_POST_DATA
、この変数にが含まれていると記載されていますRaw POST data
。
この変数はいつ設定され、生のPOSTデータの意味は何ですか?
私は理解して$_POST
いますが、私は完全に混乱してい$HTTP_RAW_POST_DATA
ます。
HTTPリクエストは2つの部分で構成されています。ヘッダーと本文のセット。
ヘッダーには、要求されているURLやキャッシングコントロールヘルパーなどが含まれます(「昨日からのバージョンがあります。変更がある場合にのみ新しいバージョンを提供しますね」など)。
リクエストの種類によって、本文が表示される場合と表示されない場合があります。POSTリクエストには本文があります。
本文は、クライアントが好む任意の形式にすることができます。ヘッダーの1つは、サーバーにフォーマットを通知します。
HTMLフォームで使用される形式はいくつかあり、PHPはこれらを解析してデータをに入れる方法を知っています$_POST
。
データがJSONなどの別の形式である場合、またはデータがPHPの癖([]
同じ名前のキーの末尾にあるルールなど)に準拠していない場合は、データに直接アクセスすることをお勧めします。自分で解析できます。
これが生のPOSTデータです。
$_POST
$HTTP_RAW_POST_DATA
変数を分割した後の結果と言えます。PHPは、生の投稿データを分割し、$_POST
配列に表示される方法でフォーマットします。例えば:
$HTTP_RAW_POST_DATA
このように見えます
key1=value1&key2=value2
次に、次
$_POST
のようになります。
$_POST = array(
"key1" => "value1",
"key2" => "value2",);
HTTPはテキストベースのプロトコルであるため、すべてのデータは文字列として渡されます。作業するとき$_POST
は、渡されたデータがすでに処理されており、配列形式になっています。これは、コントロールがスクリプトに渡される直前にPHPによって自動的に実行されます。
したがって、生のPOSTデータには、ネットワークを通過したときのデータが含まれます。
a=1&b=2
URLに表示されるように、データが表示される可能性があります。
HTTPプロトコルで実行できることの1つは、サーバーにテキストを送り返すPOSTリクエストを実行することです。
$HTTP_RAW_POST_DATA
それが何を言っていても、そのテキストが含まれます。
ほとんどの場合、POSTリクエストを実行するときに、送信されるテキストに「コンテンツタイプ」を追加します。これにより、サーバーにコンテンツの種類が通知されます。ほとんどの場合、Webではコンテンツタイプを「application/x-www-form-urlencoded」として送信しています。
$_POST
サーバーがこのコンテンツタイプマーカーを使用してPOSTリクエストを受信すると、サーバーは「test=hello」が次のようになるようにデータを配列に変換しようとすることを認識します。
$_POST['test']='hello'
$HTTP_RAW_POST_DATA
次の形式のような生のPOSTデータが含まれています。
この機能はPHP5.6.0で非推奨になっているため、通常はphp://input
代わりに使用する必要があります。$HTTP_RAW_POST_DATA.
この機能に依存することは強くお勧めしません。