2013-07-26 38 views
1

我的CGI腳本使用標題Content-Disposition: attachmentTransfer-Encoding: chunked,所以我打印文件內容塊。如何模擬與CGI的網絡(連接)錯誤

由於內容取決於很多因素,並且它是實時生成的,所以在某些情況下,腳本無法完成其工作。如果發生這種情況,已發送的部分內容是無效文件。如果腳本以正常方式結束,Web服務器關閉連接和瀏覽器接受內容完整,並提供用戶保存或打開下載的文件,即使它是無效的。

我正在尋找解決方案如何模擬網絡錯誤或任何類似的會導致一些錯誤,所以瀏覽器不會相信下載已成功完成,並不會提供客戶端來保存或打開這樣的文件。

+0

有趣的問題。腳本錯誤通常通過HTTP標頭傳遞給瀏覽器,但是具有挑戰性的是,大多數瀏覽器在內容已經發送之後不會識別標頭。 作爲這樣做的另一種方式,您的腳本可以緩衝服務器端的所有內容(無論是在內存中的臨時文件),直到您確定您擁有所有內容,然後只發送整個內容瀏覽器一旦知道它是完好的? – mti2935

+0

@ mti2935 - 正確!即使規範爲「chunked」編碼,也允許在文件結尾處的內容之後存在標題,主要瀏覽器尚未實現此功能。至於你的第二部分評論 - 就我而言,內容不能被緩存或延遲,需要儘快發送。 –

+0

您是在客戶端還是CGI測試? – chooban

回答

0

也許一種方法是,如果遇到無法生成剩餘輸出的情況,腳本會產生運行時錯誤(例如除以零錯誤)。我很好奇瀏覽器在這種情況下會如何迴應。

+0

不幸的是,即使對於'$ _ = 1/0;'web服務器關閉連接定期 –

0

由於您正在測試客戶端在出現錯誤時的行爲,因此以下可能適用。

爲您的CGI創建一個模擬器,它將接受傳入的連接,將一些數據發送回客戶端,然後在關閉連接之前睡眠n秒。然後配置您的客戶端的超時值小於n。此時,您的客戶端代碼應該超時並輸入錯誤處理代碼。

0

我不確定我在這裏完全掌握了服務器邏輯;但每當我不得不惹惱連接時,我通常使用netem來引入分組丟失和/或延遲(例如,以觸發超時) - YMMV。