これは、Node 側でのリダイレクト ループのように見えます。
サーバー B がノード サーバーであると述べた場合、ルートを正しく設定しないと、誤ってリダイレクト ループが作成される可能性があります。たとえば、サーバー B (ノード サーバー) で Express を使用している場合、2 つのルートがあり、ルート ロジックを別のモジュールに保持するとします。
var routes = require(__dirname + '/routes/router')(app);
//... express setup stuff like app.use & app.configure
app.post('/apicall1', routes.apicall1);
app.post('/apicall2', routes.apicall2);
次に、routes/router.js は次のようになります。
module.exports = Routes;
function Routes(app){
var self = this;
if (!(self instanceof Routes)) return new Routes(app);
//... do stuff with app if you like
}
Routes.prototype.apicall1 = function(req, res){
res.redirect('/apicall2');
}
Routes.prototype.apicall2 = function(req, res){
res.redirect('/apicall1');
}
その例は明らかですが、これらのルートのいくつかの条件の中にリダイレクト ループが隠されている可能性があります。問題のルート内の条件の最後に何が起こるか、たとえば呼び出しに適切なパラメーターがない場合のデフォルトの動作は何ですか?例外の動作は何ですか?
余談ですが、node-validator ( https://github.com/chriso/node-validator ) のようなものを使用して、間違ったリクエストまたは投稿パラメーターを特定して処理することができます。
// Inside router/routes.js:
var check = require('validator').check;
function Routes(app){ /* setup stuff */ }
Routes.prototype.apicall1 = function(req, res){
try{
check(req.params.csrftoken, 'Invalid CSRF').len(6,255);
// Handle it here, invoke appropriate business logic or model,
// or redirect, but be careful! res.redirect('/secure/apicall2');
}catch(e){
//Here you could Log the error, but don't accidentally create a redirect loop
// send appropriate response instead
res.send(401);
}
}
リダイレクト ループであるかどうかを判断するには、curl を使用して、同じ投稿パラメーターで URL をヒットできます (投稿であると仮定します。それ以外の場合は、chrome を使用するだけでエラーが発生します)。リダイレクト ループに気付いた場合はコンソール)、またはノード サーバーの stdout に書き込むか、問題のあるルート内で syslog アウトすることができます。
「リダイレクトが原因」の部分について言及されたのは良いことです。それが問題だと思います。
上記の例では状況を説明するために Express を使用していますが、もちろん、フレームワークやライブラリをまったく使用していない場合は、接続、他のフレームワーク、または独自のハンドラー コードを使用しても問題が発生する可能性があります。いずれにせよ、適切なパラメーター チェックを行い、常にエッジ ケースをテストすることを習慣にしています。過去に急いでいたときに、まさにこの問題に遭遇しました。