HTTP通信とGETメソッドとPOSTメソッド

  • このエントリーをはてなブックマークに追加

ブラウザとサーバーはHTTP通信を行っている。

HTTP通信は、ブラウザからサーバーに送信されるリクエストメッセージとサーバーからブラウザに送信されるレスポンスメッセージで通信している。このときリクエストメッセージとレスポンスメッセージをHTTPメッセージと呼ぶ。



リクエストメッセージは「リクエストライン」、「ヘッダー」、「ボディ」の3つで構成されている。
レスポンスメッセージは「ステータスライン」、「ヘッダー」、「ボディ」の3つで構成されている。

リクエストメッセージは1行目がリクエストライン、2行目から空行(CR+LF)までがヘッダー、空行の次の行から末尾までがボディとして構成されている。
通信プロトコルでは空行に改行文字「CR+LF」が標準的に用いられる。
CRは「キャリッジリターン」である。
LFは「ラインフィード」である。

HTTPでは、リソース(htmlや画像など)に対して実行したいアクションを示す一連のリクエストメソッドを定義している。
よく使うのがGETメソッドPOSTメソッドの2つ。
GETメソッドPOSTメソッドには役割が定義されている。
GETメソッドは、ブラウザが指定したURLのリソース(htmlや画像など)をサーバーから取得する。
POSTメソッドは、ブラウザからデータ(ログイン時の名前やパスワード等)をサーバーに送信するときに使う。

リクエストメッセージの中にリクエストパラメータが含まれる。
リクエストパラメータは2種類ある
GETパラメータとPOSTパラメータの2つである。

GETメソッドPOSTメソッドの違いは、次の通りである。

GETメソッドの場合
リクエストメッセージにおいて、リクエストラインの中のリクエストURLにリクエストパラメータを含む。この時、リクエストパラメータをGETパラメータと言う。
GETメソッドは、何度繰り返しても同じ結果が得られることが期待される。
通常、GETメソッドを繰り返しても他のプログラムやDBに変更などが起きないように使うべきである。
GETメソッドにはHTTPメッセージの「リクエストライン」、「ヘッダー」がサーバーに送信されるが、「ボディ」はサーバーに送信されない。

POSTメソッドの場合
リクエストメッセージにおいて、リクエストラインの中のリクエストパラメータにリクエストURLに含まずにリクエストメッセージのボディにリクエストパラメータを含む。この時、リクエストパラメータをPOSTパラメータと言う。
POSTメソッドは、他のプログラムやDBに影響を与えることある。
例えば、POSTメソッドでユーザ登録して一意のIDがユーザに割り当てられる場合、POSTメソッドが繰り返される度に登録済みのユーザーIDが増えていくことになる。
ログインするときに「ログインする名前」と「ログインするパスワード」を送信するときもPOSTメソッドが使用される。これは「ログインする名前」と「ログインするパスワード」を「ボディ」に含めることができるためである。
POSTメソッドにはHTTPメッセージの「リクエストライン」、「ヘッダー」、「ボディ」がサーバーに送信される。

参考
GET、POSTどちらを使うべきか?|HTTPの仕組み(パケットキャプチャで学ぼう!) (zenn.dev) ExternalLink

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*