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

推薦する

CSS で TikTok テキスト揺れエフェクトを実装する例

日々の開発において、フロントエンドの学生はアニメーションやデザインについてよく議論します。デザイナー...

標準的なHTMLの書き方は、Dreamweaverによって自動的に生成されるものとは異なります。

コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...

HTML印刷関連の操作と実装の詳細な説明

原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...

mysql8.0.14.zip のインストール中にデータ フォルダを自動的に作成できませんでした。サービスを開始できません。

今日システムを再インストールした後、コンピューターに mysql を再インストールし、ZIP ファイ...

雨滴効果を実現する JavaScript キャンバス

この記事の例では、雨滴効果を実現するためのキャンバスの具体的なコードを参考までに共有しています。具体...

Vue で動的パラメータと計算プロパティを使用する方法

1. 動的パラメータ2.6.0 以降では、角括弧で囲まれた JavaScript 式をディレクティブ...

Docker+DockerCompose を使用して Web アプリケーションをカプセル化する方法

目次テクノロジースタックバックエンドビルドAPIフロントエンドウェブ構築ゲートウェイ建設ゲートウェイ...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

CentOs でノード バージョンを手動でアップグレードする方法

1. 対応するNode.jsパッケージを見つけます。https://nodejs.org/downl...

フィルターと固定間の競合の原因と解決策の詳細な説明

問題の説明body内でfilter属性を使用すると、 fixed要素の位置が不正確になります。つまり...

WebpackはTypeScriptコードをパッケージ化するためのスキャフォールディングを構築します

フォルダを作成するディレクトリ構造: dabaots npm init -yを初期化して packa...

VPSサーバーでよく使われるパフォーマンステストスクリプトの概要

これは、VPS サーバー用の一般的なワンクリック パフォーマンス テスト スクリプトです。マシンの構...

Explainキーワードに基づいてMySQLインデックス機能を最適化する方法

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

TypeScript におけるジェネリックケースの詳細な説明

ジェネリックの定義 // 要件 1: ジェネリックは指定されていないデータ型をサポートできるため、渡...