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

推薦する

MySqlデータベースをバックアップするいくつかの方法

mysqldump ツールのバックアップデータベース全体をバックアップする $> mysqld...

Linux クラウド サーバー上に SFTP サーバーとイメージ サーバーを構築する方法

まず、SFTP プロトコルと FTP プロトコルの違いを理解してください。ここでは詳細には触れません...

MySQLサービスが起動しても接続されない問題の解決策

mysql サービスは開始されていますが、接続できません。この問題を解決するにはどうすればよいでしょ...

1つの記事でJSONPの原理と応用を理解する

目次JSONPとはJSONP 原則JSONP実装1. Ajaxでクロスドメインリクエストが行われると...

Vue2.xは、ユーザーのログインと終了を実装するためにルーティングナビゲーションガードを設定します。

目次序文1. ルーティングナビゲーションガードを設定する1. グローバルナビゲーションガード2. ロ...

Nginxのアクセスボリューム制御の詳細な説明

目的リクエスト アクセス ボリュームを制御するための Nginx ngx_http_limit_co...

Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)

目次JDKをダウンロードしてインストールするTomcat 圧縮パッケージをダウンロードTomcatの...

Linux での透過的巨大ページの使用と無効化の概要

導入コンピューティングのニーズが拡大し続けるにつれて、アプリケーションのメモリに対する需要も増加して...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

異なるページ間のJavaScriptデータ転送(URLパラメータ取得)

Web ページでは、あるページに情報を入力すると、別のページにジャンプし、入力した情報が別のページ...

VMware Workstation Pro 16 ライセンス キーと使用方法のチュートリアル

VMware Workstation は、開発、テスト、デモンストレーション、展開のために仮想マシン...

1つのSQL文でMySQLの重複排除が完了し、1つが保持されます。

数日前、ある要件に取り組んでいたとき、MySQL で重複レコードをクリーンアップする必要がありました...

MySQLクエリ条件におけるonとwhereの配置の違いの分析

導入今日SQLを書いているときに、問題が発生しました。要件は、データを照会し、スコアと過去 1 週間...

JavaScript strictモードの概要 strictを使用する

目次1. 概要1.1 厳密モードとは何ですか? 1.2 厳密モードの目的2. 厳密モードを有効にする...

CentOS 7.9 の zabbix5.0.14 のインストールと設定プロセス

目次1. 基本的な環境設定2. データベースをインストールする3. zabbix関連コンポーネントを...