簡體   English   中英

當內容長度為零時,強制讀取HttpWebResponse.GetResponseStream()

[英]Force To Read HttpWebResponse.GetResponseStream() When Content-Length Is Zero

正如標題所說。

有時,來自遠程服務器的HTTP響應包含具有零值的Content-Length標頭,但仍返回HTTP body 仍然可以在瀏覽器中使用jQuery獲得該正文,但是使用HttpWebResponse.GetResponseStream()無法讀取任何內容。 我該如何強迫閱讀? 感謝大家。

這是我遇到的HTTP響應示例。


HTTP / 1.1 200 OK

連接:保持活動狀態

緩存控制:無緩存,無存儲

內容類型:文本/純文本

內容長度:0

日期:2013年9月30日星期一09:34:21 GMT

(HTTP正文)

查看源代碼,我找不到強制這種行為的方法。 可能您無能為力。

嘗試禁用HTTP流水線。 在這種情況下,也許HttpWebRequest不依賴於內容長度。 它不太可能會有所幫助。

使用其他HTTP庫,或使用TcpClient發送請求。 您可以使用Fiddler復制模板HTTP請求,並將其用作您的基礎。 不應該做很多工作。

您還可以創建一個重寫代理來刪除標頭。 那可能是一個努力的解決方案。

第一個問題-您從哪里獲得HTTP響應? 您是使用Fiddler捕獲的,還是通過在調試器中檢查HttpWebResponse來輸入您認為的內容? 我建議使用Fiddler來運行它,並檢查完整的響應頭(如果尚未安裝的話)。

我們首先需要確定返回的Content-Length值為零,還是項目中的某些其他代碼使您將其解釋為零,或者將內容長度的副本設置為零。

我認為這里發生了兩件事之一:

  1. 響應與上面的指示不完全相同,請與Fiddler進行檢查,可以很快確定。 我很可能懷疑Content-Length實際上丟失了,並且存在Transfer-Encoding並將其設置為分塊。 在這種情況下,HttpWebResponse.ContentLength屬性將返回-1而不是0(零)。
  2. 響應與您所指示的完全相同(特別是存在Content-Length並將其指定為零),在這種情況下,您的Web服務器就被破壞了。 我不應該返回Content-Length設置為零的主體; 如果使用的是HTTP 1.0,則不會返回Content-Length,但是上面明確指出是HTTP 1.1,因此它應該返回Transfer-Encoding:分塊,不返回Content-Length,如果不進行分塊則不返回Content-Length,如果返回非零,則返回0身體。

哈羅德

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM