HTTPにおけるGETとPOSTの違い99%の誤り認識

3287 ワード

この文章は2つの部分に分かれており、第1部は新人の装い失敗モード、第2部は修練低調モードとすることができる.装逼失败模式:99%的人对GET和POST的认识修炼低调模式:1%不知道进阶认识
GETとPOSTは、我々の日常WEB開発において、最もよく使われるデータ伝送方式である.面接で私たちもよく会います.一般的に私たちはブラウザでURLを入力してウェブサイトにアクセスするのはGET方式の要求です.HTML FROMフォームでは、method指定コミット方式をGETまたはPOST方式、デフォルトでGETコミット方式とすることができます
HTTPはサーバと対話する異なる方法を定義し、その中で最も基本的な4種類:GET、POST、PUT、DELETE、HEAD;ここで、GETおよびHEADは、GETおよびHEADを使用するHTTP要求によって何の動作も生じないため、セキュリティ方法と呼ばれる.動作が発生しないことは、GETおよびHEADのHTTP要求がサーバ上でいかなる結果も発生しないことを意味する.ただし、セキュリティメソッドは、何も動作しないわけではありません.ここでのセキュリティメソッドは、情報が変更されないことを意味します.
GETとPOSTはよく使われていますが、他のいくつかの実際の応用は少ないので、ここでは理解しています.
99%の人が思っているGETとPOST
1.伝送方式(自己理解「表示方式」)
GETリクエストのデータはURLに添付されます.URLと転送データを分割し、複数のパラメータ間を&接続します.例えば、"http://www.xxx.com/product?type=shoe&price=100&sex=male"データ形式には以下の注意点があります.
  • データが英字/数字であれば、そのまま送信する.
  • スペースの場合、+に変換されます.
  • 中国語または他の文字であれば、"%E4%BD%A0%E5%A5%BD"のうち%XXXXが16進数で表されるASCIIコードであるように、データはBase 64で暗号化される.

  • POSTリクエストは、要求されたデータをHTTPリクエストパケットのパケットに格納し、GETが送信したデータは直接URLに露出し、POSTリクエストはしない.
    2.転送データサイズ
    GET方式で伝送されるデータは最大1024バイトしかない.GETはURLを介してデータを提出するため、GETが提出できるデータ量はURLの長さと直接関係があり、URL自体にパラメータ上限の問題はなく、HTTPプロトコル規範もURLの長さを制限していない.この制限は、特定のブラウザおよびサーバの制限です.IEのURL長に対する制限は2083バイト(2 K+35)である.Netscape、FireFoxなどの他のブラウザでは、オペレーティングシステムのサポートに応じて理論的に長さ制限はありません.
    注意:制限はURL全体の長さであり、転送されるデータの長さだけではありません.
    POST方式は理論的には制限されず、大きなデータを伝送することができる.制限の役割を果たすのは,サーバのプロセッサの処理能力である.Apache,Nigx,IISサーバ自体は、転送サイズを制限するように構成できます.
    3.GETがブラウザでロールバックするのは無害で、POSTは再び要求を提出します
    4.GETによって生成されたURLは、ラベルとして又は履歴に保存することができるが、POSTは、
    5.GET要求はブラウザによってアクティブにcaheされるが、POSTは手動で設定しない限り、できない.
    6.安全性
    GET伝送のデータは直接URLに暴露して、もし私达がユーザーの登录をする时、登录のアカウントとパスワードをバックエンドに伝送して検证する必要があるならば、GET方式を使うならば、口座のパスワードは直接URLの中に暴露して、きわめて危険です.また、ブラウザキャッシュのメカニズムでは、アクセスしたサイトのURLがブラウザ履歴に保存され、他の人は履歴を通じてアクセスサイトのURLを表示し、転送されたデータを直接取得することができます.「Cross-site request forgery」(中国語名:クロスステーション要求偽造)攻撃を受ける可能性が高い.しかし、POSTのデータもブロックできます.
    まとめ:
  • GET要求は、サーバに要求データを送信するための要求であり、実際のアプリケーションではデータがセキュリティに関与していないため、ページ分割や検索キーワード"http://www.xxx.com/product?keywords=xxx&page=2"などのGET方式でバックエンドにデータを要求することができる.
  • POST要求は、サーバにデータを送信する要求であり、セキュリティに関するデータは、GETよりもPOST方式で伝送される方が安全である.

  • かつてのかつて、私もその99%の一人で、また自分のまとめた文章を新人の同僚に送って見て、それから失敗を装って、ボスに最後の1%に導かれました.
    1%の人が持っている
    GETとPOSTは本質的に区別されず、HTTPプロトコルにおける2つの送信要求の方式である.HTTPは、TCP/IPに基づくデータがどのように万次元ネットワークで通信されるかに関するプロトコルである.すなわち、HTTPの下位層はTCP/IPであるため、GETとPOSTの下位層もTCP/IPであり、つまり、GET/POSTはいずれもTCPリンクである.POSTにurlパラメータを付け,GETにrequest bodyを付けて技術的に実現できる.
    管理を容易にし、混乱を回避するために、HTTPはこれらの要求にGET、POST、PUT、DELETEを定義する.データサイズは、ブラウザの制限によるものです.
    だからGETとPOSTは本質的にTCPリンクであり、差はない.しかし、HTTPの規定とブラウザ/サーバーの制限のため、彼らは応用過程でいくつかの違いを体現している.
    隠れたBuff
    GETは1つのTCPパケットを生成し、POSTは2つのTCPパケットを生成する
    GETのリクエストは、ブラウザがhttpヘッダとdataを一括して送信し、サーバは200(データを返す)POSTのリクエストを返し、ブラウザはヘッダを先に送信し、サーバは100 continueに応答し、ブラウザはdataを送信し、サーバは200(データを返す)に応答する
    POSTは2歩必要なので、時間的に消費が多いですが、ネット環境が良い場合は、1回のパケットを送る時間と2回のパケットを出す時間の差は基本的に無視できます.ネットワーク環境が悪い場合,2パケットのTCPはパケット整合性の検証において非常に大きな利点がある.
    すべてのブラウザPOSTが2回パケットを送信するのではなく,Fiefoxが1回送信する.
    最后の最后に、あなたが后で他の人に闻かれた时、あなたは....あなたのショーを始めてください
    もしあなたを助けることができたら、大賞を歓迎します.ミスがあっても、訂正を惜しまないでください.
    参考記事:「HTTPでGETとPOSTの違いを99%の人が勘違いしている」