這看起來像是Node側的重定向循環。
您提到服務器B是節點服務器,如果您錯誤地設置了路由,可能會無意中創建重定向循環。例如,如果您使用的是服務器B快遞 - 節點服務器,你可能有兩條路線,並假設你保持你的路線邏輯獨立的模塊:
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);
然後你的路由/ 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');
}
這個例子是顯而易見的,但你可能有一個重定向循環隱藏在其中的一些路線的一堆條件。我將從邊緣案例開始,比如所討論的路由條件末尾會發生什麼情況,例如調用沒有正確的參數和什麼是異常行爲,默認行爲是什麼?
順便說一句,你可以使用類似的節點驗證(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使用相同的post參數來訪問url(假設它是一個post,否則你可以使用chrome,如果它發現重定向循環,它會在控制檯中出錯),或者你可以寫在有問題的路由中標出節點服務器或syslog。
希望有所幫助,你提到的好東西是「重定向引起的」部分,那就是我認爲的問題。
上面的示例情況使用express來描述情況,但是當然,如果您根本沒有使用任何框架或庫,則只需使用連接,其他框架或甚至您自己的處理程序代碼就可以存在問題。無論哪種方式,我都會習慣於進行良好的參數檢查,並且始終測試您的邊緣情況,而過去我一直匆忙的時候,我已經將自己陷入了這個問題。
你能否提供更多的細節有關服務器A,像什麼庫要導入。 – user568109 2013-02-11 19:55:03
我正在使用Python請求庫來提出請求 – 2013-02-11 20:12:16
很難說,但似乎您已將Apache配置爲將一個URL重定向到另一個** **轉發到nodejs的前端。我認爲這裏的apache配置是重要的一部分數據。 – slezica 2013-02-11 20:26:34