2009-11-27 69 views
30

我想創建一個使用multipart/mixed的HTTP響應,但我不確定哪些瀏覽器支持它;從客戶的角度來看,如果它聽起來很方便。 說實話,我並不需要專門的內容類型。我只想在同一個響應中傳輸多個文件;也許還有另一種內容類型被使用。瀏覽器對多部分響應的支持

+0

我找不到任何谷歌良好的信息,所以你必須對它進行測試 - 建立被髮送的多 一個簡單的頁面 - 在不同的瀏覽器 測試 - 將結果在這裏:)(此頁是Google在搜索時的第二個結果) – 2009-11-27 20:32:41

+0

如果文件彼此相關,例如根文檔的資源,請嘗試'multipart/related'。 – 2014-11-26 10:27:11

回答

26

我測試過它,有一個自制的服務器和一個簡單的響應。不確定響應是否格式良好,因爲沒有瀏覽器100%確定。但這裏的結果:

  • 火狐3.5:呈現只有最後一部分,其它的被忽略。
  • IE 8:將所有內容顯示爲文本/純文本,包括邊界。
  • Chrome 3:將所有內容保存在單個文件中,不會呈現任何內容。
  • Safari 4:將所有內容保存在單個文件中,不會呈現任何內容。
  • 歌劇10.10:奇怪的東西。開始將第一部分渲染爲純文本/文本,然後清除所有內容。加載進度條掛在31%。

下面是完整的反應,如有任何錯誤,請告訴我,我會再試一次:

HTTP/1.1 200 OK 
Date: Tue, 01 Dec 2009 23:27:30 GMT 
Vary: Accept-Encoding,User-Agent 
Content-Length: 681 
Content-Type: Multipart/mixed; boundary="sample_boundary"; 

Multipart not supported :(
--sample_boundary 
Content-Type: text/css; charset=utf-8 
Content-Location: http://localhost:2080/file.css 

body 
{ 
background-color: yellow; 
} 
--sample_boundary 
Content-Type: application/x-javascript; charset=utf-8 
Content-Location: http://localhost:2080/file.js 

alert("Hello from a javascript!!!"); 

--sample_boundary 
Content-Type: text/html; charset=utf-8 
Content-Base: http://localhost:2080/ 

<html> 
<head> 
    <link rel="stylesheet" href="http://localhost:2080/file.css"> 
</head> 
<body> 
Hello from a html 
    <script type="text/javascript" src="http://localhost:2080/file.js"></script> 
</body> 
</html> 
--sample_boundary-- 
+0

我不確定你哪裏錯了,但我在2006年在Firefox中實現它,它很好地工作。 – kybernetikos 2012-06-14 11:11:05

+2

如果您有任何示例,請提交:)謝謝! – 2012-06-14 14:27:02

+0

爲節點:ff很好地工作,鉻似乎是一個框架落後: '''var boundary =「XXMIMEBOUNDARY」; var section = 0;函數writeSection(res){var a =(section ++);的console.log( 「寫」,一個); res.write(「Content-type:text/plain \ n \ n」); res.write(「Section」+ a); res.write(「 - 」+ boundary +「\ n」);};請求('http')。createServer(function(req,res){console.log('received request'); res.writeHead(200,{「Content-type」:'multipart/x-mixed-replace; boundary = 「'+ border +'」'}); writeSection(res); setInterval(function(){writeSection(res);},2500);})。listen(8080);''' – kybernetikos 2012-06-22 08:51:53

4

以我的經驗,多響應於Firefox,而不是在Internet Explorer中。這是2年前,使用當時的瀏覽器。

我有HTTP多部分響應工作的JPEG圖像流。例如,Axis IP攝像機使用Firefox的運動JPEG流。對於Internet Explorer,Axis需要使用插件。

如果僅支持Firefox的支持符合您的要求,那麼我建議在多部分響應的每個部分中設置內容長度標題。這可能有助於使原始HTTP標頭和多部分響應(' - '在HTTP標頭中缺失)中的邊界字符串相同。

3

兩個想法:

  1. 格式:我覺得「多」應該是在較低的情況下,我不認爲一個分號預計將在Content-type頭結束(雖然它是值得懷疑的它會有所作爲,它可能會)。
  2. 你試過替換模式嗎?只需使用:Content-type: multipart/x-mixed-replace - 其他一切應該保持不變。
+0

'multipart/mixed'和'multipart/x-mixed-replace'。任何瀏覽器都不可能支持'multipart/mixed',因爲它不是真正的服務器所使用的東西。 'multipart/x-mixed-replaced'有一些支持,因爲有些服務器確實將它用於服務器端推送,就像流媒體一樣。通常用於HTTP的唯一其他'multipart/...'類型是'multipart/form-data'和'multipart/byteranges'。 – 2014-11-26 10:27:29