2017-12-23 23 views
0

私はPHPで割り当てを行っていますが、URLを軽度のエラーで入力した場合は301リダイレクトを実装しました。これはリダイレクトが実際にどのように機能するかを考えさせてくれました。私はまた、ディレクトリが最後のスラッシュなしで入力されたときにApacheが自動的にリダイレクトすることに気付きました301リダイレクトの詳細

header("Location: https://www.example.com");

:私はこのようなかなり基本的なものを使用しています。結果は同じです。

私の理解では、サーバーは301のステータスと適切なLocationヘッダーを持つ応答を送信します。今、クライアントは別の要求をする必要がありますか、またはサーバーが正しいリソースを自動的に送信しますか?また、クライアントはリダイレクトを無視できますか?

+2

クライアントは別の要求を行います。 – Barmar

答えて

3

リダイレクトが返されると、クライアントは新しいURLに対して別の要求を行います。リダイレクトはまったく別のサーバーになる可能性があるため、元のサーバーは正しいリソースを単独で送信できませんでした。また、サーバーがリソースを単独で返すことができたとしても、クライアントは新しいURLを知る必要があります。これは、相対URLが元の場所ではなくその場所を基準にして解決される必要があるためです。

クライアントは確実にリダイレクトを無視できます。 --locationオプションを使用すると、curlクライアントはリダイレクトに従います。ほとんどのクライアントでは、リダイレクトループを防止するために、単一の要求を満たすために従うリダイレクトの数に制限があります。

+0

リダイレクトループは、header()を呼び出すPHPスクリプトを参照するようにLocationヘッダーを設定することで簡単に説明できました。無限の再帰のように見えます。 –