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

ブログ    

推薦する

Dockerの国内イメージソースを変更する方法

Dockerデーモンのアクセラレータを構成する設定ファイルから Docker を起動し、/etc/d...

WEB2.0の片手ルール

<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...

Nginx設定の原理と実装プロセスの詳細な説明https

Linuxユーティリティcertbotを使用してhttps証明書を生成するこのツールは Let&#...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...

JavaScript スコープチェーンの基本原理のグラフィカルな説明

目次序文範囲1. スコープとは何ですか? 2. [[スコープ]] プロパティ3. スコープチェーン4...

MySQLのロック機構に関する最も包括的な説明

目次序文グローバルロック完全なデータベース論理バックアップFTWRL と set global re...

Docker-compose インストール db2 データベース操作

db2 データベースをホストマシンに直接インストールするのは面倒で、ユーザーや権限を巻き込むのも不便...

MySQL MHA のセットアップと切り替えに関するいくつかのエラー ログの概要

1: masterha_check_repl レプリカ セット エラー レプリケートが構成ファイルで...

JavaScript 組み込みの日付と時刻の書式設定のサンプル コード

1. 基礎知識(日付オブジェクトのメソッド) 😜 getFullYear() は年を表す4桁の数字を...

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

MYSQLは、ショッピングカートに追加する際に重複追加を防ぐためのサンプルコードを実装します。

序文最近、仕事の都合で、APP ショッピングカートの注文支払いに取り組んでいました。テスト中にバグが...

HTMLのタグと要素の違いの詳細な説明

ウェブページに慣れていない友人の多くは私と同じように、HTML で要素、タグ、属性がどのように定義さ...

Nginx で何ができるかの包括的な分析

序文この記事は、サードパーティのモジュールをロードせずにNginxで処理できることのみに焦点を当てて...

プロフェッショナルなMySQL開発設計仕様とSQL記述仕様

チーム開発のプロセスでは、プロジェクトの安定性、コードの効率性、管理の利便性のために、内部開発および...

mysql8.0.23 msi インストールの超詳細なチュートリアル

1.MySqlをダウンロードしてインストールする公式ウェブサイトからMySqlデータベースをダウンロ...