簡単にGETとPOSTについて話しますが、何か違いがありますか?

3491 ワード

もし誰かがあなたにGETとPOSTの違いを聞きました。どう答えますか?
真実のケース
     先日、私にこの問題を聞きました。GETはデータを取得するためのもので、POSTは一般的にサーバにデータを送るためのものです。
    この答えは彼が望んだものではないようです。そこで彼は引き続き他の違いがあるかどうかを問い詰めました。これは名前です。サーバーがサポートすれば、彼はGETをGET 2と名前を変えられます。彼は問い返しましたが、それは単なる名前の違いですよね?考えてみます。もっと具体的な違いを言えば、RFC文書を見るしかないと思います。また、サーバーの具体的な実現によって決まります。しかし、HTTPのRFC文書をよく見たことがないと認めざるを得ません。そこで私はHTTPプロトコルにあまり詳しくないと言いました。この問題はもう終わりです。
最も普遍的な答え
     帰ってきてから長い間考えましたが、彼はいったい私に何を聞きたいのですか?GETとPOSTは意味以外の区別がないとずっと思っていましたが、Webプログラミングを習い始めてからはそう理解しています。
     多くの人がもう当てたかもしれません。彼が求めている答えは:
1.GETはURLまたはCookieを使用して参。POSTはデータをBODYに入れます。
2.GETのURLは長さに制限があり、POSTのデータは非常に大きいことができます。
3.POSTはGETより安全です。データはアドレスバーで見られないからです。
     残念ですが、これらの違いは全部間違っています。さらに残念なことに、この答えはGoogleの検索のトップです。しかし、これらが答えだとは思いませんでした。私から見れば、彼らはすべて間違っていると思います。説明します。
GETとPOSTはデータをどう伝えるかは関係ありません。
     GETとPOSTはHTTPプロトコルで定義されている。HTTPプロトコルでは、MethodとData(URL,Body,Header)は直交する2つの概念であり、つまり、どのMethodを使用するかとアプリケーション層のデータがどのように伝送されるかということは相互関係がない。
     HTTPは要求していません。MethodがPOSTデータであれば、BODYに入れます。要求もありません。MethodがGETであれば、データ(パラメータ)は必ずURLに入れて、BODYに入れてはいけません。
     では、ネットで広く伝わっているこの説はどこから来たのですか?私はHTML標準で似たような説明を見つけました。これはネットで流布されている説と一致しています。しかし、これはHTML標準のHTTPプロトコルの使い方に対する約束です。GETとPOSTの違いはどうなりますか?
    また、現代のWeb ServerはGETにBODYを含むというリクエストをサポートしています。このような要求はブラウザからはできませんが、現在のWeb Serverはブラウザ用だけではないので、HTMLサーバの範囲を完全に超えています。
     これは何の役に立つか分かりますか?説明したくないです。自分が痛くて初めて覚えます。
HTTPプロトコルはGETとPOSTの両方に長さの制限がありません。
     HTTPプロトコルは、HTTPヘッダとBodyの両方に長さの要求がないことを明確に指摘した。URLの長さに対する制限には、2つの理由があります。
     1.ブラウザ。初期のブラウザはURLの長さを制限するという。IEはURLの長さを2048文字に制限するという。自分で試してみましたが、90 KのURLを作って、IE 9を通じてlive.comにアクセスするのは正常です。ネット上のものはWikipedia上のものでも信じられません。
     2.サーバ。URLが長くなりましたので、サーバー処理にも負担がかかります。元々の会話にはデータがあまりないですが、今は何MサイズのURLを悪意的に作っておけば、サーバーにアクセスし続けています。サーバーの最大マージン数は明らかに下がります。もう一つの攻撃方法は、サーバーにContent-Lengthを教えることは大きな数です。そしてサーバーにデータを送るだけです。タイムアウトの設定があっても、このような故意の訪問がタイムアウトしても、サーバーが食べきれなくなります。このため、多くのサーバーは安全や安定などの面からURLの長さに制限を加えています。しかし、この制限はすべてのHTTP要求に対して、GET、POSTとは関係がない。
安全不安はGET、POSTと関係ありません。
     これは本当に中国の特色だと思います。私が小さい話をすると、皆さんはこの言い方がどんなにおかしいかわかるはずです。
      POSTデータはGETデータより安全だと思う人が言います。
    “君子に小人を防ぐ。中国は白が多いので、白のユーザーを防げばいいです。」
    “うん、「えっと、」私はそう思いません。「じゃ、URLのパラメータは全部Encodeに過ぎました。あるいはBase 64にしても、白は分かりません。」
     あの人は「Ecodeは簡単すぎて、賢いシロは簡単にDecodeを直してくれる」と反論しました。
     私は笑って言いました。「五十歩が百歩の耳を笑うと、もっと頭のいい白がカバンを切って再送します。Operaはこの機能があります。」
     その人は神器を陰険に祭り上げました。最終的な解釈権は「これはシロではない」と言いました。
     日本語ですよ。
最後の感想
     私はWindowsのデスクトップアプリケーションをずっとやっていましたが、Webの開発についてはよく分かりませんでした。一年以上前にサーバーの開発に転じて、HTTPに触れ始めました。注意してください。私が言っているのはHTTPで、HTMLではありません。サーバーオープンインターフェースはRESTコンセプトに基づいて設計され、使用プロトコルはHTTPですが、伝送内容はHTMLではありません。これはWeb Serverではなく、Webサービスです。
     ですから、GETとPOSTの理解は、純粋にHTTPプロトコルから来ています。彼らはまったく違っています。データを得るために、一つはデータを修正するために使います。具体的にはRFC文書を参照してください。
     もし一人が最初からWeb開発をしていたら、HTMLのHTTPプロトコルの使い方を、HTTPプロトコルの唯一の合理的な使い方として認識する可能性があります。これによって例外的なエラーが発生しました。
     思い詰めている人がいるかもしれません。私はただあいまいさが嫌いで、境界がはっきりしないことが好きではありません。概念がはっきりしないことが好きではありません。「持ってきて主義」が好きではありません。他の頑固な人に野次られるのも嫌です。
内容はネットから調べて、時間はちょっと長いです。同じものがあれば、ご了承ください。
この記事はリンクを参照してください
1.HTTPプロトコルhttps://www.w3.org/Protocols/rfc2616/rfc2616.html
2.HTML標準https://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13.1