リダイレクトとステータス 200 の両方を持つことはできません。
RFC2616は、ステータス コード 200について次のように述べています。
10.2.1 200OK
リクエストは成功しました。応答で返される情報は、要求で使用されるメソッドによって異なります。たとえば、次のようになります。
- GET : 要求されたリソースに対応するエンティティが応答で送信されます。
- HEAD : 要求されたリソースに対応するエンティティ ヘッダー フィールドは、メッセージ本文なしで応答で送信されます。
- POST : アクションの結果を記述または含むエンティティ。
- TRACE : エンド サーバーが受信した要求メッセージを含むエンティティ。
そのため、JavaScript などのユーザー エージェントによって解釈されるコンテンツをブラウザーに送信する以外に、リダイレクトする余地はありません。
これは、ステータス コード 301、302、または 303 を使用したリダイレクトについて説明する仕様の一部です。
10.3.2 301 恒久的に移動
要求されたリソースには新しい永続的な URI が割り当てられており、このリソースへの今後の参照では、返された URI のいずれかを使用する必要があります。リンク編集機能を持つクライアントは、可能であれば、Request-URI への参照をサーバーから返された 1 つ以上の新しい参照に自動的に再リンクする必要があります。特に明記しない限り、この応答はキャッシュ可能です。
新しい永続的な URI は、応答の Location フィールドで指定する必要があります。リクエスト メソッドが HEAD でない限り、レスポンスのエンティティには、新しい URI へのハイパーリンクを含む短いハイパーテキスト ノートを含める必要があります。
GET または HEAD 以外のリクエストへの応答として 301 ステータス コードを受信した場合、ユーザーが確認できない限り、ユーザー エージェントはリクエストを自動的にリダイレクトしてはなりません。これにより、リクエストが発行された条件が変更される可能性があるためです。
注: 301 ステータス コードを受け取った後に POST リクエストを自動的にリダイレクトする場合、一部の既存の HTTP/1.0 ユーザー エージェントはそれを誤って GET リクエストに変更します。
10.3.3 302 見つかりました
要求されたリソースは、一時的に別の URI に存在します。リダイレクトは場合によって変更される可能性があるため、クライアントは今後のリクエストに対して引き続き Request-URI を使用する必要があります。この応答は、Cache-Control または Expires ヘッダー フィールドで示されている場合にのみキャッシュ可能です。
一時的な URI は、応答の Location フィールドで指定する必要があります。リクエスト メソッドが HEAD でない限り、レスポンスのエンティティには、新しい URI へのハイパーリンクを含む短いハイパーテキスト ノートを含める必要があります。
GET または HEAD 以外のリクエストに応答して 302 ステータス コードを受信した場合、ユーザーが確認できない限り、ユーザー エージェントはリクエストを自動的にリダイレクトしてはなりません。これにより、リクエストが発行された条件が変更される可能性があるためです。
注: RFC 1945 および RFC 2068 では、リダイレクトされた要求でクライアントがメソッドを変更することは許可されていないと規定されています。ただし、ほとんどの既存のユーザー エージェント実装は、302 を 303 応答であるかのように扱い、元の要求メソッドに関係なく、Location フィールド値に対して GET を実行します。ステータス コード 303 および 307 は、クライアントに期待される反応の種類を明確に明らかにしたいサーバー用に追加されました。
10.3.4 303 その他を参照
リクエストへのレスポンスは別の URI で見つけることができ、そのリソースで GET メソッドを使用して取得する必要があります。このメソッドは主に、POST でアクティブ化されたスクリプトの出力がユーザー エージェントを選択したリソースにリダイレクトできるようにするために存在します。新しい URI は、最初に要求されたリソースの代替参照ではありません。303 応答はキャッシュしてはなりませんが、2 番目の (リダイレクトされた) 要求に対する応答はキャッシュ可能かもしれません。
応答の Location フィールドで別の URI を指定する必要があります (SHOULD)。リクエスト メソッドが HEAD でない限り、レスポンスのエンティティには、新しい URI へのハイパーリンクを含む短いハイパーテキスト ノートを含める必要があります。
注: 多くの HTTP/1.1 以前のユーザー エージェントは 303 ステータスを理解していません。このようなクライアントとの相互運用性が懸念される場合は、代わりに 302 ステータス コードを使用できます。これは、ほとんどのユーザー エージェントが 303 についてここで説明されているように 302 応答に反応するためです。