41

「投稿/リダイレクト/取得」の正確なプロセスを理解するのに非常に苦労しています。

このサイトとウェブを数時間くまなく調べましたが、「ここにコンセプトがあります」以外は何も見つかりません。

post/redirect/get パターンを理解する方法は?

4

5 に答える 5

85

ウィキペディアはこれをとてもよく説明しています!

問題

問題

ソリューション

ソリューション

于 2013-01-30T13:11:26.623 に答える
32

調査からわかるように、POST-redirect-GETは次のようになります。

  • クライアントはフォームのあるページを取得します。
  • フォームPOSTはサーバーに送信されます。
  • サーバーはアクションを実行し、別のページにリダイレクトします。
  • クライアントはリダイレクトに従います。

たとえば、Web サイトの構造が次のようになっているとします。

  • /posts(投稿の一覧と「投稿を追加」へのリンクが表示されます)
    • /<id>(特定の投稿を表示)
    • /create(GETメソッドでリクエストされた場合、それ自体へのフォーム投稿を返します。リクエストの場合、投稿を作成し、エンドポイントPOSTにリダイレクトします)/<id>

/postsそれ自体は、この特定のパターンとはあまり関係がないので、省略します。

/posts/<id>次のように実装できます。

  • データベースでその ID を持つ投稿を見つけます。
  • その投稿のコンテンツでテンプレートをレンダリングします。

/posts/create次のように実装できます。

  • リクエストがリクエストの場合GET:
    • ターゲットがそれ自体に設定され、メソッドが に設定された空のフォームを表示しPOSTます。
  • リクエストがリクエストの場合POST:
    • フィールドを検証します。
    • 無効なフィールドがある場合は、エラーが示されているフォームを再度表示します。
    • それ以外の場合、すべてのフィールドが有効な場合:
      • 投稿をデータベースに追加します。
      • リダイレクト先/posts/<id>(<id>データベースへの呼び出しから返される場所)
于 2012-05-31T04:07:54.330 に答える
8

説明してみます。たぶん、別の視点があなたのためにトリックを行います.

PRG を使用すると、ブラウザは最終的に 2 つのリクエストを作成します。最初のリクエストは POST リクエストで、通常はデータの変更に使用されます。サーバーは、レスポンスに Location ヘッダーを含めて応答し、本文に HTML は含めません。これにより、ブラウザが新しい URL にリダイレクトされます。次にブラウザは、ブラウザがレンダリングする HTML コンテンツで応答する新しい URL に対して GET リクエストを行います。

PRG を使用する理由を説明します。GET メソッドがデータを変更することは想定されていません。ユーザーがリンクをクリックすると、ブラウザまたはプロキシ サーバーはキャッシュされた応答を返し、要求をサーバーに送信しない場合があります。これは、変更したいときにデータが変更されなかったことを意味します。また、データを返すために POST リクエストを使用しないでください。ユーザーがデータの新しいコピーを取得したい場合は、リクエストを再実行する必要があり、サーバーがデータを再度変更することになります。これが、ブラウザが、リクエストを再送信してデータをもう一度変更するか、電子メールをもう一度送信するかを確認するあいまいなダイアログを表示する理由です。

PRG は POST と GET を組み合わせたもので、それぞれを目的に合わせて使用​​します。

于 2012-05-31T04:00:22.433 に答える