2016-05-04 20 views
0

私はExpressを使用するノードアプリケーションで作業しています。このアプリでは、私は全体のURLを取得する必要があります。たとえば、ユーザーがhttp://www.my-example.com/path/to-pageを訪問した場合、自分のコードにhttp://www.my-example.com/path/to-pageが必要です。現在、私は自分のコードに次のように使用しています:ノードとエクスプレス - 要求URLを取得

this.url = req.protocol + '://' + req.get('host') + req.originalUrl

上記のアプローチは動作します。しかし、私は、私のアプリがその1行の結果として数ミリ秒のヒットを見たことに気付きました。私は文字列の連結またはget機能要求のためにその場合はわからない。いずれにしても、それはちょうど私に完全なURLを与えるだろうreqオブジェクト自体に何かがあるように思えます。何かありますか、それを見落としていますか?

ありがとうございます!

+2

「数ミリ秒」はユーザーの横に何も効果がないことにご注意ください。 –

+0

@ StoneArcher - 私は同意します。しかし、私は教育の仕事としてこれをやっています。私はちょうど私が要求からURLをつかむことができないと信じるのは難しいと思う。 –

答えて

3

ご存知のように、ブラウザはhttp://somedomain.com/somepathにリクエストしていません。代わりに、ブラウザはプロトコルとドメインを解析します。次に、DNSのドメインを検索してIPアドレスを取得し、そのIPアドレスへのTCP接続を行います。次に、目的のプロトコルを使用してそのTCPソケットで要求を送信します。これはここのHTTPプロトコルなので、GET要求であり、GET要求には標準のHTTPヘッダーと、要求されているパス名とクエリパラメータ(存在する場合)が含まれます。 GETリクエスト自体に元のURLは含まれていません。

HTTP specificationによれば、ブラウザーには、最初に要求されたホスト名を示す「ホスト」ヘッダーが必要です。それはreq.get("host")で取得しているもので、ホスト名を取得する方法です。

したがって、フルURLと元のURLを含むカスタムヘッダーフィールドを含めるようにリクエストの送信者を変更できない限り、このリクエストのURL表現を再構築するための標準のHTTP要求に対して何ができるかは既に行っています。

HTTPリクエストは、元のURL全体を送信する必要はありません。

あなたは(多くのホストが特定のドメインにあることが知られている)前もってのプロトコルやドメインを知っている場合は、できるだけのハードコードドメインご希望の場合:

this.url = req.protocol + '://' + "myDomain.com" + req.originalUrl 

しかし、これをすでに行っていることとは大きく異なることはまずありません。また、コードが別のドメインで使用されている場合は、すでに行っていることがより移植性があります。

関連する問題