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 クラスターのインストールに関する詳細なチュートリアル

推薦する

互換性を維持しながら他のウェブページのデータを適用する iframe の使い方

以下は、Shiji Tiancheng が Tencent KartRider ページを呼び出すため...

MySQL の count()、group by、order by の詳細な説明

最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...

jQueryはドロップダウンメニューのスライド効果を実現します

Web ページを作成するときに、クールでスムーズなドロップダウン メニューが必要になることがあります...

Windows Server 2008 R2 で忘れたパスワードを処理する方法

Windows Server 2008R2を忘れた場合の対処方法サーバーの数が多すぎる、サーバーが多...

HTML タグのカスタム属性に関する質問

以前の開発では、クラス、名前などの HTML のデフォルト属性を使用していました。 Huawei社の...

構造とプレゼンテーションの分離を理解するためのWeb標準の学習

Web 標準について議論するときに必ず話題になるのは、構造とプレゼンテーションを分離することの重要性...

40以上の美しいWebフォームデザイン例

Web フォームは、訪問者と Web サイト所有者間の主要なコミュニケーション チャネルです。フィー...

Linux SSHポートを転送する3つの方法

ssh は私が最も頻繁に使用する 2 つのコマンドライン ツールのうちの 1 つです (もう 1 つ...

Nginx バージョンのスムーズなアップグレードソリューションの詳細説明

目次背景: Nginx スムーズ アップグレード ソリューションフォールバック手順要約する背景:負荷...

MySQL ツリー構造データベース テーブル設計

目次序文1. 基本データ2. 継承駆動設計3. 左右の値のエンコーディングに基づく設計4. ツリー構...

特定のシンボルで複数の行と列に分割するMySQLの例

一部の障害コード テーブルでは、履歴またはパフォーマンス上の理由から、次の設計パターンが使用されます...

MySQLがクエリキャッシュをキャンセルした理由

MySQL には以前、クエリ キャッシュ (Query Cache) がありました。8.0 以降では...

MySQL の group by と having の詳細な説明

GROUP BY 構文を使用すると、指定されたデータ列の各メンバーに従ってクエリ結果をグループ化して...

MySQL の完全なデータベース バックアップからデータベースとテーブルを復元する方法

公式の MySQL ダンプ ツールで、特定のデータベースのみを復元するにはどうすればよいですか?完全...

Link と @import の違いを詳しく見る

ページで CSS を使用する主な方法は、スタイル属性値をインラインで追加する方法、ページ ヘッダーで...