2016-06-23 34 views
1

私はになりますはすべて/に来て、/api/に来るようになります。例えば、プロキシとリダイレクトの違いは何ですか

/posts/は、私の知る限り、これはプロキシである知っているが、私はプロキシとリダイレクトの違いについて確信がもてないよう/api/posts/

として扱われるべきです。主な混乱は、redirectが応答ヘッダーのステータスコードを302に設定している間に、プロキシが200に設定されているという事実に由来します。

プロキシとは何が違うのですか?自分がしたいことをするための最良の方法は何ですか?

答えて

3

rewriting:リクエストが特定のエンドポイントで受信されると、HTTPサーバーが処理できるものに書き換えられます。 Expressで

、カスタムミドルウェア機能使用していることを行うことができます。

app.use(function(req, res, next) { 
    // If the current request doesn't start with `/api`... 
    if (req.url.indexOf('/api') !== 0) { 
    // ...rewrite it by prefixing it with `/api`. 
    req.url = '/api' + req.url; 
    } 
    next(); 
}); 

するとあなたはそれが彼らの前に呼び出されるので、あなたのルートの前にそれを含める必要があります。

これはクライアントにとって完全に透過的です。内部では/api/postsハンドラで処理されていても、/postsの応答が返されていると考えられます。

あなたはそれが明示的になりたい場合は、リダイレクトによっては、次のように使用することができます。

app.use(function(req, res, next) { 
    if (req.url.indexOf('/api') !== 0) { 
    return res.redirect('/api' + req.url); 
    } 
    next(); 
}); 

これは全く透明ではありません。クライアントに:「ねえ、/postsをリクエストしようとしましたが、代わりに/api/postsに「」にリクエストする必要があります。これは、クライアントによって追加の要求が行われなければならないことを意味します。

プロキシは、基本的には書き換えを行うための手の込んだ方法ですが、実際の内部HTTP要求は/api/postsに行われ、その結果が正しいハンドラで終わるように変更されます。クライアント。あなたの状況では、それは過剰です(プロキシは一般的に他の HTTPサーバーに要求を渡すために使用されます)。

関連する問題