HTTP GETとPOSTの違い


ツイッターで面接の愚痴をこぼしていた時にHTTP GETとPOSTの違いを聞いても満足できず、不明な人がいて、RFC 2616を見るだけと返事した.暇なうちに話す
面接で得られた回答の多くは、POSTは安全で、提出されたデータが見えない、暗号化されている、他にもGETで中国語が文字化けしている(アドレスバーにある)、データの最大長制限などです.
POSTがGETより安全だと言うのは間違いで、POSTもGETも明文伝送で、httpfoxなどのプラグインで、あるいはWireSharkのように などのツールで観察できます.
POSTとGETの違いは実は大きい.意味上、GETは指定されたURL上のリソースを取得することであり、読み取り操作であり、重要な点は、あるリソースGETに対して何度あってもその状態は変わらないということであり、その意味ではGETは安全(暗号学的またはデータ保護的な意味での安全ではない)であるということである.GETは安全なので、GETが返すコンテンツはブラウザ、Cacheサーバでキャッシュできます(詳細はたくさんありますが、ここでの議論には影響しません).
POSTは指定されたリソースに対してデータを「追加/追加」することを意味するため、安全ではありません.提出されるたびに、参加するコードはこの操作が操作対象リソースの状態を修正すると考えられます.そこで、ブラウザはF 5を押すと確認ボックスを飛び出し、キャッシュサーバはPOST要求の返信内容をキャッシュしません.
残念ながら、これまで応募者がこれに言及できなかった.この背後にある原因は2つあると思います.1つは、多くの人が(私も同じように)任務を完成すればいいのに満足しているかもしれません.どれを使っても、フォームが提出され、データが処理され、内容が表示されたり、別のページに再配向されたりして、1つの任務を完成しても、任務表から削除して、終わります.また大部分の項目(OA,CRM,MIS)の大部分の場合、どちらを使っても良いようです.
同时に、商业机関がメディアや书籍で宣伝贩売しているWS-*の概念と、统合开発环境が提供する「便利」なコード生成ツールを使った后、すべてのWebサービス呼び出しがPOSTを通じて行われていることを「了解」し、POSTとGETは同じであり、GETができることをさらに潜在意识し、POSTはGET++ですか.もちろん、POSTを使えばPOSTを使うので、両者の違いを気にする必要はありません.
これはまた私に最近学んだ概念を思い出させます:Radius Of Comprehension、理解の半径:
概念Aを学ぶには、まず概念Bを理解し、概念CはBを理解する前提である.BもCも新しい学習が必要な概念である場合、Aの理解半径は2であると言える.
A --> B --> C
|--1--|--2--|

Web開発を学習する際、GETとPOSTに接触した場合、「理解の半径」は次のように含まれる可能性があります.
POST vs. GET
     |---> Conditional GET -> ETag -> Cache
     |         `--> Status Code
     `---> HTTP    --> URL

往々にして、手に要求された任務を完成することに満足しているか、なぜかを聞くのがおっくうなので、私たちは自分の理解半径をゼロに設定すると、より深いことを学ぶことができません.そのため、POSTとGETの違いだけを知っていて、違いがどこにあるのか、Conditional GETとキャッシュヘッドなどの概念を知ることはありません.
簡単な面接問題から言えば、大げさなことを言っているようですが、どこまで書いてもいいでしょう.
Fenngを見る Buzzはこの文字を使って、いくつかのコメントを引き起こしたので、ここで2つの概念を議論します. 安全な(Safe)とべき乗などの(Idempotent).
セキュリティとは、リソースのステータスを変更することを含む、ユーザに顕著な影響を及ぼさない副作用を指す.HTTPメソッドのGETもHEADも安全です.
べき乗等とは,1つの方法が何度操作しても結果は同じであることを意味する.PUT(指定URLにコンテンツを入れる)、DELETE(あるURLが表すリソースを削除する)は、いずれもリソースコンテンツを修正しているが、複数回操作して結果は同じであるため、HEAD、GETと同様にべき乗等である.
したがって、HTTPプロトコルによれば、GETは安全であり、べき乗等であり、POSTは安全でもべき乗等でもない.