2016-12-19 48 views
0

我正在爲Web應用程序構建一些測試,我想測試客戶端能夠正常處理無效HTTP響應的能力。你如何建議修改答案,使其不再有效?我嘗試以下,但快遞顯然固定Content-Length算賬:使用Express發送故意無效的HTTP響應

app.get('/broken/', function(req, res) { 
    console.log('request received for ' + req.path); 
    res.set('Content-Length', 0).send('more than zero'); 
}); 

編輯:要注意的,我不一定在傳入的請求的控制。在過去,其中一些已經失效。

+0

我不確定在客戶端中處理無效響應是否有意義。無論是響應是有效的,或客戶端超時等待一個 –

+0

對我來說,這聽起來像'curl'或'netcat'的工作。 –

+0

您可能需要離開一個包含代碼的框架,以確保您可以發送任何您想要的內容的有效響應。 – jfriend00

回答

1

我認爲正確的答案(即使你可以解決它)是使用HTTP客戶端這一點。任何HTTP客戶端都會盡力阻止您進行無效的HTTP調用。因此,正確的答案是創建一個有意不符合要求的HTTP客戶端,這意味着您需要潛心編寫tcp套接字。即使這意味着這不能完全適合你的測試框架,我認爲你只需要一個測試。

1

的確,Express重置Content-Length裏面的response.send方法。

if (chunk !== undefined) { 
    len = chunk.length; 
    this.set('Content-Length', len); 
} 

基本上,send確實沒有什麼比設定一系列的頭和委託工作的其餘部分http.ServerResponse.end更多。

爲了繞過此行爲,您可以直接使用end方法。

app.get('/broken/', function(req, res) { 
    res.set('Content-Length', 0) 
    .set('Content-Type', type); 
    .end('more than zero'); 
}); 
+0

謝謝,這實際上完成了創建一個無效的HTTP響應。不幸的是,大多數客戶似乎只是閱讀內容長度指定的數量,然後愉快地繼續,而不是拋出希望的錯誤。 –