0

私は Web アプリケーションで作業しており、HTTP リダイレクトを介してデータを渡す必要があります。例えば:

http://foo.com/form.html 

への投稿

http://foo.com/form/submit.html

データに問題がある場合、応答はリダイレクトされます。

http://foo.com/form.html?error=Some+error+message

クエリ パラメータ「エラー」の値がページに表示されます。

リダイレクトを介してデータを渡す信頼できる方法は他にありますか (つまり、HTTP ヘッダーなど)。

クエリ パラメータとしてデータを渡すことは機能しますが、次の理由から理想的ではありません。

  • そのクリアテキスト(およびクエリ文字列内、SSLは暗号化に依存できない)なので、機密データを渡したくありません
  • URI の長さはブラウザーによって制限されています (ただし、長さは一般的にかなり長いです)。

重要: このプラットフォームはステートレスで、多くのアプリ サーバーに分散されているため、サーバー側のセッション オブジェクトでデータを追跡することはできません。

4

3 に答える 3

1

データの量によっては、Cookie を使用するのが合理的な解決策になると思います。サーバー側で追跡できないため(たとえば、セッションを使用すると、はるかに簡単になります)

于 2012-05-04T20:37:18.760 に答える
1

サーバー上のデータベースにエラーメッセージを保存し、ID で参照できます。

http://foo.com/form.html?error_id=42

エラー テキストが修正されている場合は、データベースを使用する必要さえありません。

また、 Web ストレージを使用することもできます。"Location" ヘッダーでリダイレクトする代わりに、次の JavaScript で出力ページを表示できます。

var error_message = "Something is wrong";
if( typeof(Storage) !== "undefined" ) {
  localStorage.error_message = error_message;
else {
  // fallback for IE < 8
  alert(error_message);
}
location.href = "new url";

リダイレクト後localStorage.error_message、JavaScript を使用して読み取り、メッセージを表示できます。

于 2012-05-04T20:38:10.550 に答える
1

クライアントとサーバーの相互作用の観点からは、これはサーバー内部のディスパッチの問題です。

ブラウザは、HTTP 仕様に従って最初のリクエストのエンティティを自動的に再ポストすることを意図していません。「必要なアクションは、2 番目のリクエストで使用されたメソッドがGET または HEAD。

まだそうでない場合はform.html、HTML 静的ファイルになるように動的にします。リクエストを自分自身に送信し、POSTエラーが発生した場合に備えて値を事前入力します。または、問題がある場合submit.htmlと同じテンプレートを使用することもできます。form.html

そのクリアテキスト(およびクエリ文字列内、SSLは暗号化に依存できない)なので、機密データを渡したくありません

ここで何が問題なのかわかりません。とにかく、プレーンな HTTP 経由ですべてを送信しています。Cookie、クエリ パラメータ、およびリクエスト エンティティはすべて表示されます。HTTPS を使用すると、実際にはこれらすべてが保護されますが、クエリ パラメータは依然としてブラウザの履歴とサーバー ログの問題になる可能性があります (これは TLS が保護する接続の一部ではありません)。

于 2012-05-04T20:42:18.370 に答える