6

これで、URL のパラメーターと POST パラメーターの違いがわかりました。ブラウザーによっては、URL が長すぎると誤動作する可能性があるため、アプリが応答できる場合でも、URL に何百ものパラメーターを詰め込むことはお勧めできません。 GET リクエスト。

説明のために、次の Web アプリケーションを想定してみましょう。ユーザーは、一連の (場合によっては数百の) X、Y 座標を入力できます。サーバーはそれらをチャートにプロットし、画像として返します。

これは明らかに冪等操作の例であるため、 HTTP 仕様によれば、GET 操作として実装することが推奨されています。ただし、長すぎるため、すべてのパラメーターを使用して URL を作成することはできません。<form method="get"> はそれほど多くのパラメータを処理できますか?

また、 <form method="get"> は URL にパラメーターを配置するのと完全に同等であると聞いたことがあります。さて、それは一部のブラウザまたは HTTP プロトコル全体に当てはまりますか? リクエストに最大の長さはありますか?

4

8 に答える 8

7

HTTP 仕様では制限が設定されていませんが、ブラウザーとサーバーでは制限が設定されています。詳細はこちらをご覧ください。

フォームのメソッドが GET に設定されている場合、ブラウザーは長い URL を作成するため、上記の制限が適用されます。

于 2008-11-05T17:26:01.267 に答える
3

HTTP 仕様では、GET 要求のパラメーターを URI に配置することを明示的に要求していません。POST を使用するフォームのように、GET リクエストでメッセージ本文を送信することは合法です。

ただし、ブラウザーは非常に正当な理由で GET フォームをこの方法で実装します: キャッシュです。GET リクエストは、副作用なしでサーバー上で処理されることが期待されます。そのため、GET 要求への応答がキャッシュされる可能性があります。GET 要求でメッセージ本文を使用し始めると、このパフォーマンス向上オプションは即座に失われます。

チャート API を設計する予定がある場合は、Googleを参照することをお勧めします。彼らはすでに非常に優れたものを一般に提供しています。できるだけ多くの情報を URI パラメータに詰め込む方法を学ぶためだけのものだとしても、一見の価値があります。

代替テキスト 代替テキスト 代替テキスト 代替テキスト

于 2008-11-05T17:44:54.830 に答える
2

ブラウザが実際に行うことは、フォーム入力から非常に長い URL を作成することです。したがって、URL とフォーム Method="GET" の間に違いはありません。どちらでも同じ URL が読み込まれます。

于 2008-11-05T17:23:30.427 に答える
1

いいえ、サーバーは、パラメーターをURLに入れることと、FORMをGETメソッドで使用することの違いを認識できません。したがって、パラメータを含む特定のURLが長すぎる場合は、GETメソッドを使用してFORMを使用しても役に立ちません。

POSTまたはGETは、主にセマンティクスのために選択する必要があります。GETは「安全な」アクション用です。つまり、ユーザーはGETリクエストによって実行される操作に対して責任を負わされるべきではありません。POSTメソッドは、ユーザーが責任を負う必要がある操作に使用されます。

たとえば、検索機能でPOSTを使用する場合、非常にイライラします。ユーザーは、単純なクエリが重要なシステム状態を変更することを期待していません。検索が「安全な」操作であることを期待しています。

一方、安全でない操作にはGETリクエストやPOSTを介してアクセスできるため、多くの脆弱性が存在します。これは、攻撃者が正当なサイトのIMGタグに悪意のある「src」URLを取得するだけでよいXSRFのような脆弱性の原因になります。

ユースケースでは、Ajaxが実際に適切なソリューションである可能性があります。選択したポイントごとにGETリクエストを作成し、サーバーのセッションに保存できます。ユーザーがポイントの入力を終了すると、最後のGETリクエストで完成品が取得されます。

于 2008-11-05T17:38:11.367 に答える
1

form method=get は、フォームのすべての入力を URL に入れます。

ブラウザには URL の最大長があることは事実です。ブラウザからブラウザへ、そして確かにブラウザ版からブラウザ版へと変化します。

可能であれば、フォームに POST を使用することをお勧めします。

HTH

于 2008-11-05T17:27:52.837 に答える
1

GET と url ?name=value&... は同じものです。ブラウザはリクエストを送信する前に GET フォームを URL に変換するだけです。

URL の最大長はブラウザーとサーバーのレベルで決定されるため、特定のブラウザー/サーバーでは、2 つのうち小さい方になります。

この投稿には、URL の現在の最大長の適切なリストがあります。

于 2008-11-05T17:28:32.913 に答える
0

これは、取得と投稿に関する質問への回答ではありませんが、説明しているような状況では、より複雑なデータをサーバーに保存して、セッションIDまたはユーザーアカウントに関連付けるよりも簡単な場合がよくあります。毎回URLに。次に、Cookie内のそのセッションの識別子のみを使用するか、画像を取得するためのurlパラメーターとして使用できます。

これは、要求された画像をキャッシュするのにも役立つため、ユーザーが特定のグラフをもう一度見たいと思うたびに画像を再生成する作業を行う必要はありません。

于 2008-11-05T17:37:10.993 に答える
0

また、 <form method="get"> は URL にパラメーターを配置するのと完全に同等であると聞いたことがあります。

その通りです。対応するRFC セクションは次のとおりです。

リクエストの最大長はありますか?

仕様には、 「HTTP プロトコルは URI の長さにアプリオリな制限を設けない」と書かれています。

ただし、Internet Explorer 6 には 2,083 文字の制限があります。他のブラウザーではより多くの文字を使用できますが、そのルートに行く場合は、基本的に ie6 用に設計する必要があります。

于 2008-11-05T17:27:50.077 に答える