blog

HTTPリクエストメソッド

Hypertext Transfer Protocol は、ハイパーメディア文書を転送するためのアプリケーション層プロトコルです。 ウェブブラウザとウェブサーバ間の通信用に設計されていますが、他の目的...

Apr 10, 2020 · 3 min. read
Share this

はじめに

Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)は、ハイパーメディア文書を転送するためのアプリケーション層プロトコル。ウェブブラウザとウェブサーバ間の通信用に設計されていますが、他の目的にも使用できます。クライアントはコネクションを開いてリクエストを行い、サーバー側のレスポンスを受信するのを待ちます。HTTPはステートレスプロトコルであり、2つのリクエストの間にサーバーがデータを保持することはありません。

HTTPリクエスト・メソッドとは何ですか?

HTTP は、指定されたリソースに対して実行されるアクションを示す一連のリクエストメソッドを定義します。与えられたリソースに対して実行されるアクションを示します。

GET GETメソッドは指定されたリソースの表現を要求するもので、GETを使ったリクエストはデータを取得するためだけに使うべきです。
HEAD HEADメソッドは、GETリクエストに対するレスポンスと同じレスポンスを要求しますが、レスポンスボディは要求しません。
POST POSTメソッドは、指定されたリソースにリクエストを送信するために使用され、通常はサーバーの状態変更や副作用をもたらします。
PUT PUTメソッドは、ターゲットリソースの現在のすべての表現をリクエストペイロードに置き換えます。
DELETE DELETE メソッドは、指定されたリソースを削除します。
CONNECT CONNECTメソッドは、ターゲットリソースで識別されるサーバーへのトンネルを確立します。
OPTIONS OPTIONSメソッドは、対象リソースの通信オプションを記述するために使用します。
TRACE TRACE メソッドは、ターゲットリソースへのパスに沿ってメッセージループバックテストを実行します。
PARCH PATCHメソッドは、リソースに部分的な変更を適用するために使われます。

POSTリクエストとGETリクエストの違い

日々の開発の中で最も一般的なのはGETとPOSTですが、この2つの違いについて、いつPOSTを使うべきか、いつGETを使うべきかを探ります。

区別1

上の表から、GETリクエストはサーバー側でデータを取得するために使われることが多く、POSTインターフェースはサーバー側でデータを変更するために使われることが多いことがわかります。

区別2

POSTのパラメータはリクエストボディの中にあり、理論的にはサイズに制限はありません。

ディスティンクション3

セキュリティ はい いいえ
冪等性 はい いいえ
キャッシュ可能 はい 鮮度情報が含まれている場合のみ
セキュリティ

ここでいう安全とは、基本的に読み取り専用という意味です。読み取り専用であることで、サーバー側で状態の変化を引き起こさないのであれば、メソッドは安全です。

冪等性

GET は読み込み操作だけを行うので、冪等です。標準的な POST リクエストはサーバー側の状態を変更するので、冪等ではありません。

キャッシュ可能

キャッシュ可能性とは、リクエストメソッドがブラウザによってキャッシュ可能かどうかを意味します。場合によっては、GET と POST はキャッシュ可能です。しかし、ほとんどのブラウザはGETキャッシュしかサポートしていません。

ディスティンクション4

GETとPOSTはどちらも基本的にTCPリンクです。GETは1つのTCPパケットを生成し、POSTは2つのTCPパケットを生成します。

GETは実際にリクエストを一度だけ送信します。

Read next

iOSは写真の向きが正しくない問題を処理している

写真をサーバーにアップロードし、サーバー側で見たところ、反時計回りに90度回転していたとします。

Apr 9, 2020 · 1 min read