0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptでPOSTリクエストをしたときはリダイレクトなんだっけ?

Posted at

あまり疑問視はしなかったが...

何かしら入力操作をするサイトの構築にて「JavaScriptからPOSTリクエスト→サーバー側で受理→別の画面へ遷移」というPRGパターンは血反吐を吐くほど見てはきたが、POSTの通信がリダイレクトなんだっけと思慮することがあったので調べてみた。

結論は、POSTリクエスト自体はリダイレクトではない。
だが、サーバー側がリダイレクトを指示したときはリダイレクトとなる。

どういうことだ?

ASP.NET MVCでは、画面遷移の方法として主に以下の2つがある。

  • View():現在のコントローラー内のビューを表示(フォワード)
  • RedirectToAction():別のアクションへリダイレクト(GETで遷移)
public IActionResult Index()
{
    return View(); // フォワード
}

public IActionResult GoToNext()
{
    return RedirectToAction("NextPage"); // リダイレクト(GET)
}

サーバーサイドでリダイレクトしたときは、301または302のHTTPステータスコードが返却されるが、一方でデータ通信の結果を返却するような処理では200のHTTPステータスコードが返却される。

🔄 リダイレクト vs View の違い(ASP.NET MVC)

項目 リダイレクト (RedirectToAction) View (View)
HTTPメソッド 通常は GET に変換される(POST → GET) 元のメソッド(POSTなど)を保持
URL変更 クライアント側でURLが変更される URLは変更されない(内部処理)
サーバー処理 クライアントに新しいリクエストを促す サーバー内でビューを直接返す
POSTデータの保持 基本的に失われる(TempDataなどで補完) モデルをそのまま渡せる
用途 完了画面への遷移、認証後の誘導など 入力エラー時の再表示、同一画面内処理など
SEOへの影響 301/302などのステータスが検索エンジンに影響 SEOには直接関係しない
ユーザー体験 URLが変わるため、画面遷移感がある URLが変わらないため、同一画面に見える
C#での記述例 return RedirectToAction("Next"); return View("NextView", model);

📝 補足

  • リダイレクトは「一度レスポンスを返して、クライアントが新たにリクエストする」動き。
  • **View()**は「サーバー内で処理を完結させて、ビューを直接返す」動き。
  • 入力フォームのバリデーションエラー時などは、View()で再表示するのが一般的。
  • 完了画面や別機能への遷移は、RedirectToAction()が適している。

こういうミスは割とある。

JavaScript側でPOST処理をした後、HTTPステータスコードを200以外をエラーとする。
実はサーバーサイドでリダイレクトして、301が返却されてました。

あると思います!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?