blog

GET & POST "ビッグボス "の背後にある "小さな秘密"

その後、公共の秘密は、もちろん、多くのために採用されているか、またはすぐに採用される "新鮮な肉のIT "彼らは、あなたが数え切れないほどのGETとPOSTリクエストを書いている可能性があり、またはそ...

Jun 15, 2020 · 5 min. read
シェア

その後、国民の秘密は、もちろん、多くの人が採用されているか、すぐに採用される "新鮮な肉のIT "のために、あなたは数え切れないほどのGETとPOSTリクエストを書いている可能性があり、またはそれらの違いを要約し、多くの権威のあるウェブサイトを見てきました、あなたは何を使用するときに非常によく知っています。

あなたは簡単に「標準的な答え」を出しました:

  • GETはブラウザがフォールバックしても無害ですが、POSTはリクエストを再度送信します。

  • GETはブックマークできるURLアドレスを生成しますが、POSTはできません。

  • GETリクエストはブラウザによって積極的にキャッシュされますが、POSTは手動で設定しない限りキャッシュされません。

  • GET リクエストは url-encoded のみですが、POST は複数のエンコーディングに対応しています。

  • GETリクエストのパラメータはブラウザの履歴や、場合によってはウェブサーバーのログにそのまま残りますが、POSTのパラメータは残りません。

  • GETリクエストにはURLに渡されるパラメータの長さに制限がありますが、POSTにはありません。

  • パラメータのデータ型について、GETはASCII文字のみを受け付けますが、POSTには制限がありません。

  • GETは、パラメータがURLに直接公開されるため、POSTよりも安全性が低く、機密情報の受け渡しには使用できません。

  • GETリクエストはurlにデータを追加し、urlを分割してデータを転送し、"? "はurlを分割してデータを転送し、複数のパラメータは"&"で接続され、POSTリクエストは要求されたデータをhttpリクエストボディに置きます。つまり、GETパラメータはURLを通して渡され、POSTはリクエストボディに置かれます。

"残念ながら、そんな答えは出ませんよ!"

本当のことを教えてください。

GETとPOSTに本質的な違いはないと言ったら、あなたは私を信じますか?

GETとPOSTの皮を剥いで、正直になりましょう!

HTTPプロトコルでリクエストを送信する2つの方法、GETとPOSTとは何ですか?

HTTPとは何ですか?HTTPは、ワールド・ワイド・ウェブ上でのデータ通信方法に関するTCP/IPに基づくプロトコルです。

HTTPの基礎となるレイヤーはTCP/IPなので、GETとPOSTの基礎となるレイヤーもTCP/IP、つまりGET/POSTはどちらもTCPリンクです。GETではリクエストボディを、POSTではurlパラメータを追加しなければなりませんが、技術的には全く問題ありません。

では、"標準的な答え "の違いは何なのでしょうか?

私の大きなワールド・ワイド・ウェブの世界では、TCPは車のようなものです。TCPを使ってデータを転送すれば、信頼性が高く、紛失や欠落はありません。しかし、もし道路が全く同じように見える車でいっぱいなら、世界は混乱したように見え、緊急の荷物を配達する車は、道路の前の荷物を満載した車に止められるかもしれず、交通システム全体が麻痺しているに違いありません。このような状況を避けるために、道路HTTPのルールが生まれた、車の輸送にHTTPは、いくつかのサービスカテゴリを設定するには、GET、POST、PUT、DELETEなどがあり、HTTPの規制は、GETリクエストの実装では、ラベルGETに車を与えるために、レコードを容易にするために、車の屋根の上にデータの伝送が必要です。それはPOSTリクエストの場合は、車のPOSTラベルを付けるとキャリッジ内の商品を置く必要があります。もちろん、GETでこっそり商品をコンパートメントに入れることもできますが、それはみっともないことです。あるいは、POSTでも車の屋根にデータを載せて、バカらしく見せることもできます。HTTPは単なる行動規範であり、TCPはGETとPOSTがどのように実装されるかの基本です。

しかし、HTTPはGETとPOSTのパラメータについて、配信チャネルに要件を課しているとしか思えません。パラメータのサイズに関する「標準的な回答」の制限はどこから来るのでしょうか?

ワールド・ワイド・ウェブの世界には、もうひとつ重要な役割があります。ブラウザやサーバーが違えば、運送会社も違います。 理論的には、車の上に無制限に貨物を積むことができます。しかし、運送会社もバカではありません。貨物の積み下ろしはコストもかかるので、データが多すぎてブラウザとサーバーの両方に大きな負担がかかるリスクをコントロールするために、1回の輸送量を制限するのです。業界の不文律として、ブラウザは通常urlの長さを2Kバイトに制限し、サーバは64Kまでのurlサイズを扱うことができます。あなたがGETサービスを使用する場合は、リクエストボディに密かにデータを非表示にすると、別のサーバーはまた、別の方法で対処するために、いくつかのサーバーは、データを読み出し、アンロードするのに役立ちますが、いくつかのサーバーは直接無視されるので、GETはリクエストボディとすることができますが、また、それがああ受信することができることを保証することはできません。

さて、GETとPOSTは基本的にTCPリンクであり、違いがないことはお分かりいただけたと思います。しかし、HTTPの規則やブラウザ/サーバの制限によって、用途に違いが現れます。

この記事が終わったと思いますか?

私たちの後ろにいる大ボスが出てきたら、死ぬほどからかってきますよ。

ビッグボスはまだ出てくるのを待っています。

このBOSSがいかにミステリアスか。インターネットで「GETとPOSTの違い」を探そうとしても、検索結果には彼のことは一切出てきません。彼は一体何者なのでしょうか?

GETとPOSTにはもうひとつ大きな違いがあります:

GETは1つのTCPパケットを生成し、POSTは2つのTCPパケットを生成します。

GETリクエストの場合、ブラウザはデータとともにhttpヘッダーを送信し、サーバーは200で応答します;

POSTの場合、ブラウザは最初にヘッダを送信し、サーバは100 continueで応答し、ブラウザは次にデータを送信し、サーバは200 okで応答します。

つまり、GETは1回走ればいいのに対して、POSTは2回走らなければなりません。1回目は、まずサーバーに「こんにちは、商品を届けに行くので、ドアを開けて待っていてください」と挨拶に行き、その後、商品を届けるために引き返します。

POSTは2つのステップを必要とし、少し時間がかかるため、POSTよりもGETの方が効率的であるようです。そこでYahooチームは、サイトのパフォーマンスを最適化するために、POSTをGETに置き換えることを推奨しています。しかし、これは落とし穴です!飛び込むときは注意してください。なぜ?

\GETとPOSTはそれぞれ独自のセマンティクスを持っており、安易に混在させるべきではありません。

\2.調査によると、良好なネットワーク環境では、パケットを1回送信する時間と2回送信する時間の差は基本的に無視できます。また、劣悪なネットワーク環境では、2パケットTCPはパケットの完全性を検証する上で非常に有利です。

\3.すべてのブラウザがPOSTでパケットを2回送信するわけではなく、Firefoxは1回だけ送信します。

Read next

表面描画バッファ作成プロセス

Androidのビュー描画はGUIシステムの中核であり、ビューの描画にはバッファ、つまりキャンバスが必要なので、このバッファの割り当て処理を理解する必要があり、今回はこのバッファの割り当てについて説明します。 Acitivtyは、実はWMS側では単なるWindowで、記述を行うためのものですが、AMS側では...

Jun 14, 2020 · 20 min read