2009-11-27 7 views
30

Ich möchte eine HTTP-Antwort mit multipart/mixed erstellen, aber ich bin mir nicht sicher, welche Browser es unterstützen; und wenn es so bequem ist wie es klingt, aus der Sicht des Kunden. Um ehrlich zu sein, brauche ich nicht speziell diesen Inhaltstyp. Ich möchte nur mehr als eine Datei in der gleichen Antwort übertragen; vielleicht gibt es einen anderen Inhaltstyp, der mehr verwendet wird.Browser-Unterstützung von Multipart-Antworten

+0

Ich kann keine gute Informationen über Google finden, so dass Sie es nicht getestet zu werden - eine einfache Seite bauen, die als mehrteiliger gesendet wird - Test in verschiedenen Browsern lassen - hier :) Ergebnisse (Diese Seite ist das zweite Ergebnis in Google bei der Suche nach diesem) –

+0

Wenn die Dateien miteinander verwandt sind, z. B. Ressourcen eines Stammdokuments, versuchen Sie 'multipart/related'. –

Antwort

26

Ich habe es getestet, mit einem hausgemachten Server und einer einfachen Antwort. Nicht sicher, ob die Antwort wohlgeformt ist, weil kein Browser es 100% OK versteht. Aber hier sind die Ergebnisse:

  • Firefox 3.5: Renders nur der letzte Teil, alle anderen werden ignoriert.
  • IE 8: Zeigt den gesamten Inhalt als wäre es text/plain, einschließlich der Grenzen.
  • Chrome 3: Speichert den gesamten Inhalt in einer einzigen Datei, nichts wird gerendert.
  • Safari 4: Speichert den gesamten Inhalt in einer einzigen Datei, nichts wird gerendert.
  • Opera 10.10: Etwas seltsam. Startet das Rendern des ersten Teils als einfachen/Text und löscht dann alles. Der Ladefortschrittsbalken hängt bei 31%.

Hier ist die vollständige Antwort, wenn jemand einen Fehler findet, bitte sagen Sie mir, und ich werde versuchen Sie es erneut:

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

Ich bin mir nicht sicher, wo du falsch gelaufen bist, aber ich habe es 2006 in Firefox implementiert und es hat gut funktioniert. – kybernetikos

+2

Wenn Sie ein Beispiel haben, bitte senden Sie es :) Danke! –

+0

für Knoten: ff funktioniert gut, Chrom scheint ein Rahmen hinter zu sein: '' 'var boundary =" XXMIMEBOUNDARY "; var Abschnitt = 0; Funktion writeSection (res) {var a = (Abschnitt ++); console.log ("Schreiben", a); res.write ("Inhaltstyp: text/plain \ n \ n"); res.write ("Abschnitt" + a); res.write ("-" + Grenze + "\ n");}; require ('http'). createServer (Funktion (req, res)) {console.log ('empfangene Anfrage'); res.writeHead (200, {"Inhaltstyp": 'multipart/x-mixed-replace; boundary = "} + Grenze + '"'}); writeSection (res); setInterval (Funktion() {writeSection (res);}, 2500);}). listen (8080); '' ' – kybernetikos

4

In meiner Erfahrung, mehrteiliger Reaktionen in Firefox arbeiten, aber nicht in Internet Explorer. Dies war vor 2 Jahren, mit den Browsern der Zeit.

Ich hatte HTTP Multipart Antworten für einen Strom von JPEG-Bildern. Zum Beispiel verwenden Axis IP-Kameras für ihre Bewegung JPEG-Stream für Firefox. Für den Internet Explorer erfordert Axis die Verwendung eines Plugins.

Wenn Firefox-only-Unterstützung Ihre Anforderungen erfüllt, dann empfehle ich, den Content-Length-Header in jedem Teil der mehrteiligen Antwort festzulegen. Es kann hilfreich sein, die Grenzzeichenfolge im ursprünglichen HTTP-Header und in der mehrteiligen Antwort identisch zu machen (das '-' fehlt im HTTP-Header).

3

Zwei Ideen:

  1. Formatierung: Ich denke, „multipart“ in Kleinbuchstabe sein sollte, und ich glaube nicht, ein Semikolon am Ende der Content-Type-Header zu erwarten ist (obwohl es zweifelhaft ist, dass Es wird einen Unterschied machen, möglicherweise ist es möglich).
  2. Haben Sie den Ersetzungsmodus versucht? Verwenden Sie einfach: Content-type: multipart/x-mixed-replace - alles andere sollte gleich bleiben.
+0

Es gibt einen großen semantischen Unterschied zwischen 'multipart/mixed' und' multipart/x-mixed-replace'. Es ist nicht wahrscheinlich, dass irgendein Browser "multipart/mixed" unterstützt, da es einfach nicht von echten Servern verwendet wird. 'multipart/x-mixed-replaced' hat einige Unterstützung, da einige Server es für das serverseitige Pushing verwenden, wie für das Streaming von Medien. Die einzigen anderen "multipart/..." -Typen, die üblicherweise bei HTTP verwendet werden, sind "multipart/form-data" und "multipart/byteranges". –