GET POSTの違い

GET POSTの違い

1. Get はサーバーからデータを取得するために使用され、Post はサーバーにデータを渡すために使用されます。
2. Get は、フォーム内のデータを、変数 = 値の形式で action が指す URL に追加し、両者を「?」で接続し、各変数を「&」で接続します。Post は、フォーム内のデータをフォームのデータ本体に格納し、変数と値の対応する形式で action が指す URL に渡します。
3. Get は、送信プロセス中に要求された URL にデータが配置されるため、安全ではありません。多くの既存のサーバー、プロキシ サーバー、またはユーザー エージェントは、要求された URL をログ ファイルに記録し、それをどこかに置きます。この方法では、一部の個人情報が第三者に見られる可能性があります。さらに、ユーザーは送信されたデータをブラウザ上で直接確認することもでき、一部の内部システムメッセージもユーザーに表示されます。すべての投稿操作はユーザーには見えません。
4. Get で送信されるデータ量は少なく、これは主に URL の長さの制限によるものです。一方、Post は大量のデータを送信できるため、ファイルをアップロードするときには Post のみを使用できます (もちろん、別の理由もありますが、これについては後で説明します)。
5. Get は、Form フォームのデータ セットの値を ASCII 文字に制限しますが、Post は ISO10646 文字セット全体をサポートします。デフォルトのエンコーディングは ISO-8859-1 です。
6. Get は Form のデフォルト メソッドです。
次の比較は非常に役立ちます:
私はしばらくJava Web開発をしていますが、いつも悩まされる問題があります。それは文字化けの問題です。基本的に、インターネットで解決策を探します(インターネットには本当にたくさんの情報があります)。この種の文字化けの問題を解決する方法についての紹介はたくさんありますが、問題の詳細を明確に説明しているものはほとんどありません。いくつかの記事を読んだ後、理解したと思うこともありますが、開発中に文字化けの問題が幽霊のように現れて私を怖がらせ、本当に頭痛の種です!この記事は、文字化けとの長い闘いで得た私の理解の集大成です。より多くの友人が私にアドバイスや補足を与えてくれることを願っています。
サーバーにデータを送信するには、get と post の 2 つの方法があります。それぞれについて説明しましょう。
1. 提出する
1. まず、クライアント (ブラウザ) フォームが get メソッドを使用してデータをエンコードし、サーバーに送信する方法について説明します。

get メソッドの場合、データは要求された URL の後にパラメータとして連結されます (例: http://localhost:8080/servlet?msg=abc)。
(非常に一般的な文字化けの問題が発生します。URL に中国語やその他の特殊文字が含まれる場合 (例: http://localhost:8080/servlet?msg=杭)、サーバー側で文字化けが発生しやすくなります)。URL が連結された後、ブラウザーは URL を URL エンコードしてサーバーに送信します。URL エンコード プロセスでは、URL の一部を文字として特定のエンコード方式 (例: utf-8、gbk など) に従ってバイナリ バイトコードにエンコードし、各バイトを 3 文字の文字列 "%xy" で表します。xy はバイトの 2 桁の 16 進数表現です。ここで述べたことは明確ではないかもしれません。詳細な紹介については、java.net.URLEncoder クラスの紹介をこちらで参照してください。 URL エンコードのプロセスを理解すると、2 つの非常に重要な問題がわかります。まず、URL エンコードが必要な文字は、一般的に非 ASCII 文字です (一般的に言えば)。簡単に言えば、英語の文字 (中国語、日本語など) 以外のすべての文字は、URL エンコードする必要があります。したがって、私たちにとって、すべて英語の文字である URL は、サーバー上で文字化けすることはありません。文字化けは、URL 内の中国語または特殊文字によって発生します。次に、 URL エンコードでは、文字をエンコードするためにどのようなエンコード方法を使用するのでしょうか。これはブラウザの仕組みであり、ブラウザによって慣例が異なります。中国語版ブラウザは一般的にデフォルトでGBKを使用していますが、ブラウザの設定によりUTF-8を使用することもできます。ユーザーによってブラウザの設定が異なり、エンコード方法も異なります。そのため、多くのウェブサイトでは、まずJavaScriptを使用してURL内の中国語または特殊文字をエンコードし、次にURLをつなぎ合わせてデータを送信します。これはブラウザのURLエンコードを行うためです。その利点は、ウェブサイトがgetメソッドを使用してデータを送信するエンコード方法を統一できることです。 URL エンコードが完了すると、URL は ASCII 範囲の文字になり、iso-8859-1 エンコード方式を使用してバイナリに変換され、リクエスト ヘッダーとともに送信されます。ここでもう少し言いたいのは、get メソッドの場合、リクエストの実体は存在せず、データを含む URL はすべてリクエスト ヘッダー内にあるということです。URLエンコードを使用する理由は、リクエスト ヘッダーが最終的に iso-8859-1 エンコード方式を使用してバイナリ 101010 にエンコードされ、インターネット上で送信されるためだと個人的には考えています。中国語などの特殊文字をそのまま iso-8859-1 を使用してエンコードすると、情報が失われるため、最初に URL エンコードを行う必要があります。
2.サーバー (tomcat) はデコード用のデータをどのように取得するのでしょうか?
最初のステップは、iso-8859-1 を使用してデータをデコードすることです。get メソッドの場合、Tomcat は ASCII 範囲のリクエスト ヘッダー文字を取得します。リクエスト URL にはパラメーター データが含まれます。パラメーターに中国語などの特殊文字が含まれている場合、URL エンコード後も %XY 状態のままです。ここで、開発者がデータを取得する一般的なプロセスについて説明しましょう。通常、パラメータデータを取得するには、request.getParameter("name") を使用します。リクエストオブジェクトから取得したデータはデコードされており、デコード処理はプログラム内で指定できません。ここで言いたいのは、多くの初心者が、request.setCharacterEncoding("character set") を使用してデコード方法を指定できると言うことです。実際には、それは不可能です。公式のサーブレット API の説明には、このメソッドの説明があります。このリクエストの本文で使用されている文字エンコーディングの名前をオーバーライドします。このメソッドは、リクエストパラメータの読み取りまたは getReader() を使用して入力の読み取りを行う前に呼び出す必要があります。getメソッドに対して無力であることがわかります。では、データをデコードするためにどのようなエンコード方式を使用すべきでしょうか? これはTomcatの仕事です。デフォルトはiso-8859-1です。このようにして、中国語のパラメータを含むgetリクエストがサーバー側で文字化けする理由がわかります。その理由は、クライアントが通常、データURLをエンコードするためにUTF-8またはGBKを使用しているためです。ここでiso-8859-1 URLデコーダーを使用することはできません。プログラムでは、直接
Javaコード
1. new String(request.getParameter("name").getBytes("iso-8859-1"),"クライアントが指定したURLエンコード方式")
それをバイトコードに復元し、正しい方法でデータをデコードします。オンライン記事では通常、Tomcat で設定します。
XMLコード
1. <コネクタ ポート="8080" プロトコル="HTTP/1.1" 最大スレッド数="150" 接続タイムアウト="20000" リダイレクト ポート="8443" URIEncoding="GBK"/>
これにより、Tomcatはデータを取得した後に指定されたURLデコーダーを使用できるようになります。URLデコーダーの紹介はここ(I)投稿投稿です
1. クライアント (ブラウザ) フォームは、どのように POST メソッドを使用してデータをエンコードし、サーバーに送信するのでしょうか。
post メソッドで送信されるデータも URL エンコードする必要がありますが、どのようなエンコード方式が使用されますか?
フォームが配置されている HTML ファイルにセクション <meta http-equiv="Content-Type" content="text/html; charset=文字セット (GBK、utf-8 など)"/> がある場合、投稿はここで指定されたエンコーディングを使用してエンコードされます。このコードは、ブラウザにウェブページを解釈するためにどの文字セットを使用するかを知らせるためのもので、ウェブサイト側ではこれを HTML コードの先頭に配置して、文字化けをできるだけ避けるというのが一般的な考えですが、実はフォームの post メソッドでデータを送信するための URL エンコード方式を指定する機能も持っています。ここから、get メソッドの場合、ブラウザがデータの URL をエンコードする方法はブラウザの設定 (js を使用して一律に指定可能) によって決まりますが、post メソッドの場合は開発者が指定できることがわかります。
2.サーバー (tomcat) はデコード用のデータをどのように取得するのでしょうか?
Tomcat のデフォルト設定を使用し、フィルターやその他のエンコードを設定しない場合は、iso-8859-1 を使用してデコードされますが、request.setCharacterEncoding("character set") が便利です。

Tomcat が上記のような動作をするのは、リクエスト ヘッダーにエンコード方式が指定されていないことが前提であることがわかりました。リクエスト ヘッダーにエンコード方式が指定されている場合は、このようにエンコードされます。
推奨される記事が 2 つあります。アドレスは次のとおりです。簡単な用語での URL エンコード:
http://www.cnblogs.com/yencain/articles/1321386.html ;
post メソッドを使用してデータを送信するときに文字化けする問題:
http://wanghuan8086.javaeye.com/blog/173869

post を使用する場合、フォームが配置されている HTML ファイルに段落があることが非常に重要です <meta http-equiv="Content-Type" content="text/html; charset=文字セット (GBK、utf-8 など)"/>
投稿投稿の使用を強くお勧めします

<<:  Vueは書籍ショッピングカートの機能を実現

>>:  Docker を使用した ElasticSearch:7.8.0 クラスターのインストールに関する詳細なチュートリアル

推薦する

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

MySQL バッチ追加および保存メソッドの例

ストレステストにログインする際には、多くの異なるユーザーが必要となり、データベースに新しいデータを追...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

CSS ハック \9 と \0 は IE11\IE9\IE8 のハッキングには機能しない可能性があります

Web ページやフォームを設計するたびに、さまざまなブラウザ、特に IE ファミリの互換性の問題に悩...

ふるい抽選を実施するミニプログラム

この記事の例では、ふるい抽選を実装するためのミニプログラムの具体的なコードを参考までに共有しています...

MySQLデータベースパラダイムの詳細な説明

序文:データベースパラダイムについてはよく耳にしていましたが、詳細まで理解したことはありませんでした...

Vueデータプロキシの詳細な説明

目次1. これからお話しするのは、フロントエンド担当者がvue-cliで完了できるソリューション、デ...

必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

1.これは1. 誰が誰に電話をかけますか?例: 関数foo(){ console.log(&quo...

MySQLトリガーの使用例の詳細

MySQL トリガー構文の詳細: トリガーは、特定のテーブル内のデータが挿入、削除、または更新される...

効率的なMySQLページングの詳細な説明

序文通常、大量のデータを扱う MySQL クエリには「ページング」戦略が採用されます。ただし、ページ...

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明

MySql バッチ挿入の最適化 SQL 実行効率の例の詳細な説明itemcontractprice ...

プライベートイメージウェアハウスを構築するためのDockerレジストリの実装方法

マイクロサービスのイメージは、保存用に Docker リポジトリにアップロードされます。一般的に使用...

JS クロスドメイン XML - AS URLLoader を使用

最近、機能拡張の要件を受け取りました。ただし、新しい要件で参照されているデータインターフェイスは、X...

Webstorm と Chrome を使用して Vue プロジェクトをデバッグする方法

目次序文1. 新しいVueプロジェクトを作成する2. WebStormの設定1. デバッガポートを設...

Linuxシステムでノードプロセスを実行しているが、プロセスを強制終了できない問題を解決します

まず、Linux システムで実行されているノード プロセスはプロセスを強制終了できないことを紹介しま...