我要指出,我使用谷歌Chrome瀏覽我的瀏覽器(谷歌瀏覽器似乎並不關心MIME類型,當它看到音頻它會嘗試像在HTML5播放器中那樣使用它),但是如果您嘗試在頁面中託管媒體內容,這也適用。
無論如何,我正在用提琴手檢查我的標題,並注意到Chrome向服務器傳遞了3個請求。我開始和其他瀏覽器一起玩,並且注意到他們沒有這樣做,但是根據瀏覽器和我硬編碼爲MIME類型的內容,我會得到一個瘋狂的文本頁面或下載文件。
經進一步檢查,我注意到chrome會先請求文件。然後用幾個不同的標題再次請求文件,最顯着的是範圍標題。第一個字節= 0,然後下一個大小不同的文件取決於文件的大小(可以根據文件的大小進行多於3個請求)。
所以出現了這個問題。 Chrome會先請求文件。一旦看到該類型,它會發送另一個請求,看起來我在尋找文件有多大(byte = 0-),然後另一個請求文件的後半部分或類似的東西,以允許在使用時經歷的某種流式傳輸HTML5。我編寫的東西很快,以處理MIME類型,並與音頻組件一起扔了HTML5網頁,發現其他瀏覽器也這樣做(除了IE)
因此,這裏是一個快速的解決方案,我不再得到這些錯誤
string range = context.Request.Headers["Range"];
int rangeBegin = 0;
int rangeEnd = msg.Length;
if (range != null)
{
string[] byteRange = range.Replace("bytes=", "").Split('-');
Int32.TryParse(byteRange[0], out rangeBegin);
if (byteRange.Length > 1 && !string.IsNullOrEmpty(byteRange[1]))
{
Int32.TryParse(byteRange[1], out rangeEnd);
}
}
context.Response.ContentLength64 = rangeEnd - rangeBegin;
using (Stream s = context.Response.OutputStream)
{
s.Write(msg, rangeBegin, rangeEnd - rangeBegin);
}
是否有可能在所有內容發送之前調用Stop()?你的調用代碼是怎樣的? –
我從不叫停,甚至在發生這些異常之後,我發現它們仍然在傳遞內容。問題在於瀏覽器不斷請求文件並導致文件緩慢下降。我再次在音樂文件和視頻文件中發現這個問題。調用代碼正在創建一個以「http:// *:8080 /」作爲前綴的新Web服務器,然後調用start。沒有做任何線程或任何事情,所以它只是在開始時陷入循環。 – Pieces