GET とは正確には何で、POST とは何ですか?フロントエンドプログラマー必須のコース
序文
ブラウザとサーバーの間のインターネットの舞台では、GET と POST は 2 つの伝説の登場人物のようなもので、それぞれ重要な役割を果たします。彼らの戦場は HTTP であり、この戦いは Web ページの速度、ユーザー エクスペリエンスなどに関連しており、広範囲に影響を及ぼします。
このブログでは、GET と POST の間の決闘にあなたを導きます。古典的な映画の 2 人の主人公のように、彼らにはそれぞれ独自の長所と特徴があります。この HTTP 戦争をわかりやすく解明してみましょう。
httpの基本
HTTP (Hypertext Transfer Protocol) は、Web 上でのデータ通信に使用されるプロトコルです。これはクライアント/サーバー プロトコルであり、クライアントがリクエストを送信し、サーバーが応答を返します。 HTTP の基本概念は次のとおりです。
1. リクエスト:
-
リクエスト メソッド: はリクエストの操作タイプを定義します。一般的なものには、GET (リソースの取得)、POST (データの送信)、PUT (リソースの更新)、DELETE などがあります。(リソースの削除など)
-
URL (Uniform Resource Locator): はリクエストのターゲット リソースを表します。プロトコル (http または https)、ホスト名、ポート番号、パスなどが含まれます。
-
リクエスト ヘッダー: ユーザー エージェント、受け入れられるデータ タイプなど、リクエストに関する追加情報が含まれます。
-
リクエスト本文: POST リクエストなどの一部のリクエストでは、リクエスト本文を通じてデータをサーバーに送信できます。
2. 応答:
-
ステータス コード: サーバーによるリクエストの処理結果。一般的なものは、200 OK (成功)、404 Not Found (リソースが見つからない)、500 Internal Server Error (サーバーの内部エラー) です。エラー)など
-
レスポンス ヘッダー: サーバー タイプ、日付、コンテンツ タイプなど、レスポンスのメタ情報が含まれます。
-
レスポンス本文: HTML ページ、JSON データなどの実際のレスポンス データが含まれます。
3. クライアントとサーバー間の通信方法:
-
接続の確立: クライアントはサーバーとの TCP 接続 (デフォルト ポート 80) を確立するか、安全な HTTPS プロトコル (デフォルト ポート 443) を介して暗号化された接続を確立します。
-
リクエストの送信: クライアントは、リクエスト行、リクエスト ヘッダー、リクエスト本文を含む HTTP リクエストをサーバーに送信します。
-
リクエストの処理: サーバーはリクエストを受信すると、リクエストの内容に従ってリクエストを処理します。
-
レスポンスの送信: サーバーは、ステータス行、レスポンス ヘッダー、レスポンス本文を含む HTTP レスポンスをクライアントに送信します。
-
接続の終了: HTTP インタラクションが完了すると、クライアントまたはサーバーは接続を閉じるか、後続のリクエストに備えて接続を維持するかを選択できます。
4. HTTP バージョン:
-
HTTP/1.0: 最初は、リクエスト/レスポンスごとに新しい接続が確立されました。
-
HTTP/1.1: 現在広く使用されているバージョンは永続的な接続をサポートしており、同じ接続上で複数のリクエストとレスポンスを送信できます。
-
HTTP/2: には、パフォーマンスを向上させるための多重化などの新機能が導入されています。
-
HTTP/3: 速度とパフォーマンスを向上させるために設計された UDP プロトコルに基づく新しいバージョン。
これらの基本概念は HTTP プロトコルの中核を形成しており、それらを理解することは Web 開発とネットワーク通信にとって重要です。
GET と POST の概要
GET と POST は HTTP プロトコルの 2 つの一般的なリクエスト メソッドで、サーバーにデータをリクエストまたは送信するために使用されます。
1. GET リクエスト:
定義: GET リクエストは、通常はデータ読み取り操作のためにサーバーからリソースを取得するために使用されます。これは冪等な操作であり、複数回実行しても異なる結果は生じません。
特徴:
-
パラメータの受け渡し方法: パラメータは URL のクエリ文字列に追加されます。URL とパラメータは疑問符 (?) とアンパサンド (&) で区切られます。 ) は複数のパラメータの間に使用されます。
GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
-
可視性: パラメータは URL 内で可視であるため、パスワードなどの機密情報の送信には適していません。
-
キャッシュ: はブラウザによってキャッシュでき、頻繁に読み取られるがほとんど変更されないデータに適しています。
-
長さ制限: パラメータは URL に追加されるため、URL の長さには制限があり、大量のデータの送信には適していません。
2. POST リクエスト:
定義: POST リクエストは、通常はデータの作成、更新、削除操作のためにデータをサーバーに送信するために使用されます。これは冪等ではないため、複数回実行すると異なる結果が生じる可能性があります。
特徴:
-
パラメータの受け渡し方法: パラメータは URL ではなくリクエスト本文に配置されます。より大きなデータや機密データの転送に適しています。
POST /path/resource HTTP/1.1 Content-Type: application/x-www-form-urlencoded param1=value1¶m2=value2
-
可視性: GET リクエストと比べてパラメータがリクエスト本文に含まれるため、POST リクエスト内のデータはユーザーには見えず、機密情報の送信により適しています。 。
-
キャッシュ: 通常、ブラウザによってキャッシュされませんが、特別な設定によってキャッシュを実現できます。
-
長さの制限: パラメータはリクエスト本文に含まれるため、理論的には URL の長さに制限されることなく、より大きなデータを送信できます。
3. 相違点の概要:
- GET はリソースの取得に使用され、POST はデータの送信に使用されます。
- GET パラメータは URL に追加され、POST パラメータはリクエスト本文に配置されます。
- GET は少量のデータの送信に適しており、POST は大量のデータや機密データの送信に適しています。
- GET はブラウザーでキャッシュできますが、POST はデフォルトではブラウザーでキャッシュされません。
- GET は冪等であり、複数回実行しても同じ結果が得られますが、POST は冪等ではなく、複数回実行すると異なる結果が生じる可能性があります。
実際のアプリケーションでは、GET または POST の選択は、特定のニーズとビジネス シナリオによって異なります。 GET はデータの読み取りに使用され、POST はフォーム データの送信やファイルのアップロードなどの操作に使用されます。
GET と POST: パラメーターの受け渡し
HTTP では、GET と POST は 2 つの一般的なリクエスト メソッドですが、パラメータの受け渡しにいくつかの重要な違いがあります。
1. GET リクエストのパラメータの受け渡し:
-
位置: GET リクエストのパラメータは通常、URL のクエリ文字列に追加されます。
GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
-
可視性: パラメータは URL 内で可視であるため、機密情報の送信には適していません。
-
制限事項: URL の長さの制限により、GET リクエストにはパラメータのサイズに一定の制限があり、大量のデータの送信には適していません。
-
記述形式: パラメータを区切るにはアンパサンド (&) を使用し、キーと値のペアを接続するには等号 (=) を使用します。
2. POSTリクエストのパラメータ転送:
-
位置: POST リクエストのパラメータはリクエスト本文に配置されます。
POST /path/resource HTTP/1.1 Content-Type: application/x-www-form-urlencoded param1=value1¶m2=value2
-
可視性: GET リクエストと比べてパラメータがリクエスト本文に含まれるため、POST リクエスト内のデータはユーザーには見えず、機密情報の送信により適しています。 。
-
制限事項: パラメータはリクエスト本文に含まれるため、理論的には、URL の長さによる制限を受けることなく、より大きなデータを送信できます。
-
記述形式: パラメータもアンパサンド (&) で区切られ、キーと値のペアは等号 (=) で接続されますが、末尾に追加されることはありません。 URL。
3. GET または POST を選択します。
-
該当するシナリオを取得します。
- ページビューなどのデータを読み取るために使用されます。
- パラメータは小さく、機密情報は含まれません。
- 冪等な操作、つまり複数の実行では異なる結果は生成されません。
-
POST に該当するシナリオ:
- フォームの送信など、データを送信するために使用されます。
- パラメータは大きいため、機密情報が含まれる可能性があります。
- 非冪等な操作、つまり複数の実行では異なる結果が生じる可能性があります。
4. 補足説明:
-
フォーム送信: HTML フォームは通常、POST メソッドを使用してデータを送信するため、URL の長さに制限されることなくより多くのデータを送信できます。
-
ファイルのアップロード: ファイルは通常大きいため、ファイルをアップロードするときは通常 POST リクエストが使用されます。
-
セキュリティに関する考慮事項: 機密情報を含む操作の場合は、POST リクエストの使用をお勧めします。これは、POST リクエストのパラメータがリクエスト本文に含まれており、GET リクエストよりも安全であるためです。 。
全体として、GET と POST にはそれぞれ独自の利点があり、選択は特定のビジネス ニーズとセキュリティの考慮事項によって異なります。実際のアプリケーションでは、開発者はシナリオに応じて適切なリクエストメソッドとパラメータ転送メソッドを選択する必要があります。
安全性と冪等性
安全性:
GET リクエストのセキュリティ:
- GET リクエストは通常、サーバー上のデータに実質的な影響を与えることなくリソースを読み取るために使用されるため、安全であると考えられています。
- GET リクエストはサーバーのステータスを変更してはならず、データの変更、追加、削除などを行ってはなりません。
- セキュリティの概念では、同じリソースに対する複数の GET リクエストは、リソースの状態を変更せずに同じ結果を生成する必要があると規定されています。
POST リクエストのセキュリティ:
- POST リクエストはサーバーにデータを送信するために使用され、サーバー上のデータが変更、追加、または削除される可能性があるため、一般に安全ではないと考えられています。
- POST リクエストはサーバーのステータスを変更する可能性があるため、安全ではありません。
- セキュリティの概念は、同じリソースに対する複数の POST リクエストがサーバーの状態に変化を引き起こす可能性があるため、異なる結果を生成する可能性があることを示唆しています。
冪等性:
GET リクエストの冪等性:
- GET リクエストはべき等です。つまり、同じリソースに対する複数の GET リクエストは、リソースの状態を変更せずに同じ結果を生成する必要があります。
- 冪等機能により、GET リクエストの繰り返し実行によるさらなる影響が防止されます。
POST リクエストの冪等性:
- 通常、POST リクエストは冪等ではありません。つまり、同じリソースに対する複数の POST リクエストは、サーバーの状態に変化を引き起こす可能性があるため、異なる結果を生成する可能性があります。
- 冪等性の概念は、同じリソースに対する POST リクエストを繰り返すと、単一の操作ではなく複数回同じ操作が発生する可能性があることを示しています。
実際的な影響:
-
キャッシュ: GET リクエストは冪等であるためブラウザでキャッシュできますが、POST リクエストはデフォルトではブラウザでキャッシュされません。
-
ブラウザ履歴: GET リクエストはべき等であるため、ブラウザ履歴に悪影響を及ぼしませんが、POST リクエストではいくつかの問題が発生する可能性があります。
-
ネットワークの再試行: ネットワークの再試行では冪等性が非常に重要です。リクエストが冪等である場合、ネットワーク障害の後、一貫性のない結果を引き起こすことなくリクエストを安全に再試行できます。 GET はべき等ですが、POST は通常そうではありません。
-
ブックマークとリンク: GET リクエストのセキュリティにより、ブックマークの生成やページ内のリンクの作成により適しています。
Web アプリケーションを設計して使用するときは、システムの一貫性、信頼性、セキュリティを確保するために、安全性と冪等性の概念を理解して考慮することが重要です。これらの側面におけるさまざまな HTTP メソッドの特性は、特定のシナリオでの選択と使用に影響します。
使用するシーン
1. GET を使用するシナリオ:
a. データを取得します。
- 例: 記事の詳細ページをリクエストします。
- 理由: GET は冪等でサーバーのステータスに影響を与えないため、データの取得に適しています。
b. クエリパラメータ:
- 例: 検索エンジンにクエリを送信します。
- 理由: GET リクエストのパラメータは URL を通じて渡されます。これはクエリ パラメータを渡すのに適しており、ブックマークによって保存できます。
c. ページのナビゲーション:
- 例: 他のページにジャンプします。
- 理由: GET を使用するとブラウザのキャッシュと履歴を利用できるため、ユーザー エクスペリエンスに有益です。
d. 静的リソース要求:
- 例: 画像、スタイル シート、JavaScript などの静的リソースをリクエストします。
- 理由: GET リクエストはブラウザのキャッシュに適しており、パフォーマンスを向上させることができます。
2. POST を使用するシナリオ:
a. フォーム データを送信します。
- 例: ユーザー登録とログイン。
- 理由: データはリクエスト本文に含まれており、URL には表示されないため、POST リクエストは機密情報を含むフォーム データの送信に適しています。
b. ファイルのアップロード:
- 例: ユーザー アバターまたはその他のファイルをアップロードします。
- 理由: POST リクエストは、リクエスト本文での大量のデータの受け渡しをサポートしており、ファイルのアップロードに適しています。
c. データの更新:
- 例: ユーザー プロフィールを変更します。
- 理由: POST リクエストはデータの変更、追加、削除に使用され、冪等です。
d. 安全な操作:
- 例: ユーザーのパスワードを変更します。
- 理由: POST リクエストはブラウザによってキャッシュされないため、セキュリティが重要な操作を実行するのに適しています。
3. ベストプラクティスと原則:
a. GET リクエストで機密情報を渡さないようにします。
- URL はブラウザやサーバー ログなどによって記録される可能性があるため、URL には機密情報を含めないでください。
b. 適切な HTTP メソッドを使用します。
- RESTful 設計原則に従い、GET を使用してリソースを読み取り、POST を使用してリソースを変更します。
c. キャッシュを利用します。
- 頻繁に変更されないデータの場合は、GET リクエストを使用し、適切なキャッシュ ヘッダーを構成してパフォーマンスを向上させます。
d. 冪等性を考慮してください。
- 操作が冪等である場合は、GET リクエストを優先して、不必要な状態変更を減らします。
e. セキュリティを考慮します。
- ユーザーのプライバシーや機密情報に関わる操作の場合は、POST リクエストを使用し、HTTPS プロトコルを使用して通信を暗号化します。
f. ビジネス ニーズに応じて選択します。
- 特定のビジネス シナリオとニーズに応じて、GET または POST を選択すると、機能要件をより適切に満たすことができます。
実際の開発では、特定のビジネス ニーズ、セキュリティ上の考慮事項、パフォーマンス要件、HTTP メソッドの特性に基づいて、適切なリクエスト メソッドを選択することが重要です。さまざまな要素を考慮して、特定の状況に応じて GET または POST を合理的に選択できます。