2000P's Blog

最初のページ

nodejsのリダイレクト

著者 pinger 時間 2020-04-12
all

リダイレクト概念

リダイレクトとは、様々な方法により、様々なネットワーク要求を他の方向に再設定することである(例えば、ウェブページリダイレクト、ドメイン名のリダイレクト、ルート選択の変化も、データリポートが経路を介してリダイレクトされることである)。

レスリング.ロcation()

ExpressはLocationヘッダを介して指定されたURL文字列をブラウザに転送します。指定された文字列を検証しません。ブラウザは、応答ヘッダLocationで指定されたURLに現在のURLを再定義する責任がある。

redirect

redirect()は、2つのパラメータを追加できます。最初のパラメータが数値タイプの場合は、リダイレクト方式を表し、2番目のパラメータが文字列タイプで、ジャンプが必要な経路です。最初のパラメータが文字列である場合、ジャンプを直接代表する経路リダイレクト方式は2つの場合があり、1つは301リダイレクト(永久リダイレクト)、もう1つは302リダイレクト(一時リダイレクト)であり、最初のパラメータが記入されていない場合、デフォルトは302リダイレクトである。第二のパラメータパスは、locationと一致します。redirectでは、プログラムが/getルーティングの下であると仮定して、相対パスを使用する方法がある。すなわち、rest.redirect(「appi/post」)は、ジャンプする経路が/get/appi/postであることを示す。個人的にはこのような方式は勧められません。後のコードを読む時、リダイレクト位置を素早く理解することができないからです。

URLリダイレクト原理

状態コードが301または302の場合(301−永久リダイレクト、302−一時リダイレクト)は、リソース位置が変化したことを示し、リダイレクトが必要である。

Locationヘッダ情報は、リソースの変化の位置、すなわち、リダイレクトするURLをジャンプすることを意味する。

リダイレクト方式の比較

ロカションの大体の実現方法を見てみます。

res.location = function(url){ var req = this.req; // "back" 是 referrer的别名 if ('back' == url) url = req.get('Referrer') || '/'; // 设置Lcation this.setHeader('Location', url); return this; };

以上のコードから分かるように、location()方法は本質的にServerResonseオブジェクトを呼び出すset Header()方法であるが、状態コードは設定されていない。location()によりヘッダ情報を設定し、その後のコードも実行します。

redirectの実現方式をもう一度見てみます。

res.redirect = function(url){ var head = 'HEAD' == this.req.method; var status = 302; var body; // 通过 location 方法设置头信息 this.location(url); // 设置状态并返回响应 this.statusCode = status; this.set('Content-Length', Buffer.byteLength(body)); this.end(head ? null : body); };

もうちょっと