ホームページ >バックエンド開発 >PHPチュートリアル >HTTP の GET と POST の違いは何ですか?
GET と POST は HTTP リクエストの 2 つの基本的なメソッドであり、WEB 開発に携わったことがある人なら誰でもそれらの違いを見分けることができます。
最も直感的な違いは、GET では URL にパラメーターが含まれているのに対し、POST ではリクエスト本文を通じてパラメーターが渡されることです。
あなたは数え切れないほどの GET リクエストと POST リクエストを自分で書いたことがあるかもしれませんし、それらの違いをまとめた多くの信頼できる Web サイトを読んだことがあるかもしれません。
面接でこの質問をされると、あなたの心は自信と喜びで満たされます。
あなたは簡単に「標準的な答え」を与えました:
GET はブラウザがロールバックしても無害ですが、POST はリクエストを再度送信します。
GETで生成されたURLアドレスはブックマークできますが、POSTではブックマークできません。
GET リクエストはブラウザによってアクティブにキャッシュされますが、POST は手動で設定しない限りキャッシュされません。
GET リクエストは URL エンコードのみ可能ですが、POST は複数のエンコード方法をサポートしています。
GET リクエストのパラメータはブラウザ履歴に完全に保持されますが、POST のパラメータは保持されません。
GETリクエストのURLで送信されるパラメータには長さの制限がありますが、POSTには長さの制限がありません。
パラメータのデータ型に関しては、GET は ASCII 文字のみを受け入れますが、POST には制限がありません。
GET は、パラメータが URL 上で直接公開されるため、POST よりも安全性が低く、機密情報を渡すために使用することはできません。
GETパラメータはURLを通じて渡され、POSTはリクエストボディに配置されます。
(この標準的な回答は w3schools から参照されています)
「残念ながら、これは私たちが望む回答ではありません!」
真実を教えてください。 。 。
「GET と POST には本質的に違いはない」と言ったら、信じますか?
GETとPOSTのマントを脱いで、お互いに正直になりましょう!
GET と POST とは何ですか? HTTP プロトコルでリクエストを送信する 2 つの方法。
HTTPとは何ですか? HTTP は、World Wide Web 上でデータを通信する方法に関する TCP/IP に基づくプロトコルです。
HTTP の最下層は TCP/IP です。したがって、GET と POST の最下層も TCP/IP です。つまり、GET/POST は両方とも TCP リンクです。 GET と POST は同じことを実行できます。リクエスト本文を GET に追加し、URL パラメーターを POST に追加する必要があります。技術的には、これは完全に実現可能です。
それでは、「標準的な回答」の違いは何でしょうか?
私たちの World Wide Web の世界では、TCP はデータを転送するために使用されるものであり、欠落することはありません。しかし、道路を走るすべての車がまったく同じに見えるとしたら、緊急メッセージを伝える車が前から荷物を積んだ車によって妨げられ、交通システム全体が麻痺することは間違いありません。これを防ぐために、Traffic Rules HTTP が誕生しました。 HTTP では、GET、POST、PUT、DELETE など、自動車輸送用のいくつかのサービス カテゴリが設定されています。HTTP では、GET リクエストを実行するときは、自動車に GET のラベルを付ける必要があり (メソッドを GET に設定する)、Put を要求する必要があると規定しています。簡単に記録できるように、データを車の屋根(URL 内)に送信します。 POST リクエストの場合は、車に POST ラベルを貼り、商品を台車に載せる必要があります。もちろん、GET 中にこっそり車の中に商品を隠すこともできますが、これは非常に恥ずべきことであり、POST 中にデータを屋根に置くこともでき、人々は愚かに感じます。 HTTP は単なる行動規範であり、TCP は GET と POST の実装方法の基礎です。
ただし、HTTP が GET および POST パラメーター (URL またはリクエスト本文) の送信チャネルに要件を課していることだけがわかります。 「標準的な回答」のパラメータ サイズの制限はどこから来たのでしょうか?
私たちのワールドワイドウェブの世界には、運送会社というもう一つの重要な役割があります。異なるブラウザ (http リクエストを開始する) とサーバー (http リクエストを受け入れる) は、異なる運送会社です。 ただし、理論上は、車の屋根に無制限に商品を積むことができます (URL には無制限のパラメーターを追加できます)。しかし、運送会社もバカではありません。リスクを制御するために、荷積みと荷降ろしには非常にコストがかかります。データが多すぎると、ブラウザとサーバーに大きな負担がかかります。業界の不文律は、(ほとんどの)ブラウザは通常 URL の長さを 2K バイトに制限し、(ほとんどの)サーバーは最大 64K のサイズの URL を処理できるということです。超過分は処理されません。 GET サービスを使用してリクエスト本文にデータを秘密に隠した場合、サーバーによってはデータのアンロードと読み取りをサポートするものもあれば、リクエスト本文を直接無視するサーバーもあります。受け取ることは保証できません。
さて、GET と POST は本質的に TCP リンクであり、違いはないことがわかりました。ただし、HTTP 規制とブラウザ/サーバーの制限により、アプリケーション プロセスにはいくつかの違いがあります。
この記事がこのように終わると思いましたか?
私たちの大ボスはまだ登場を待っています。 。 。
このBOSSはどれほど神秘的ですか?インターネットで「GET と POST の違い」を調べようとすると、表示される検索結果にはその違いが記載されていません。彼は一体何者なのでしょうか? 。 。
GET と POST にはもう 1 つの大きな違いがあります。簡単に言えば、
GET は 1 つの TCP データ パケットを生成します。POST は 2 つの TCP データ パケットを生成します。
長い話:
GET リクエストの場合、ブラウザは http ヘッダーとデータを一緒に送信し、サーバーは 200 (データを返す) で応答します。
POST の場合、ブラウザは最初にヘッダーを送信し、サーバーが送信します。は 100 continue で応答し、ブラウザは再度データを送信し、サーバーは 200 ok (データを返す) で応答します。
言い換えると、GET では商品を届けるのに車で 1 回の移動が必要ですが、POST では 2 回の移動が必要で、最初の移動でサーバーに挨拶に行きます。「商品をまとめて配送します。」後でドアを開けて挨拶してください」と言い、商品を届けに戻ります。
POSTは2つのステップが必要で少し時間がかかるため、POSTよりもGETの方が効率的だと思われます。したがって、Yahoo チームは Web サイトのパフォーマンスを最適化するために、POST を GET に置き換えることを推奨します。しかし、これは罠です!慎重に飛び込んでください。なぜ?
1. GET と POST には独自のセマンティクスがあるため、簡単に混合することはできません。
2. 調査によると、ネットワーク環境が良好な場合、1 つの荷物を送信する時間と 2 つの荷物を送信する時間の差は基本的に無視できます。ネットワーク環境が劣悪な場合、2 つのパケットを使用する TCP はデータ パケットの整合性を検証する上で大きな利点があります。
3. すべてのブラウザが POST でパッケージを 2 回送信するわけではありません。Firefox は 1 回だけ送信します。
さて、面接官に「GETとPOSTの違い」を改めて聞かれたとき、あなたは心の中でこう感じていますか?
以上がHTTP の GET と POST の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。