Obsługa przeglądarek odpowiedzi wieloczęściowych

Chciałbym utworzyć odpowiedź HTTP, używając multipart/mixed, ale nie jestem pewien, które przeglądarki ją obsługują; i jeśli jest to tak wygodne, jak się wydaje, z punktu widzenia klienta. Szczerze mówiąc, nie potrzebuję specjalnie tego typu treści. Chcę tylko przesłać więcej niż jeden plik w tej samej odpowiedzi; może jest inny typ treści bardziej używany.

Author: Diego Jancic, 2009-11-27

3 answers

Przetestowałem go, z domowym serwerem i prostą odpowiedzią. Nie wiem, czy odpowiedź jest dobrze uformowana, ponieważ żadna przeglądarka nie rozumie tego w 100% OK. Ale oto wyniki:

  • Firefox 3.5 : renderuje tylko ostatnią część, inne są ignorowane.
  • IE 8 : pokazuje całą zawartość tak, jakby była to tekst / zwykły, łącznie z granicami.
  • Chrome 3 : zapisuje całą zawartość w jednym pliku, nic nie jest renderowane.
  • Safari 4 : Zapisuje cała zawartość w jednym pliku, nic nie jest renderowane.
  • Opera 10.10 : coś dziwnego. Rozpoczyna renderowanie pierwszej części jako zwykły / tekst,a następnie czyści wszystko. Pasek postępu ładowania zawiesza się na 31%.

Oto pełna odpowiedź, jeśli ktoś znajdzie jakiś błąd, proszę mi powiedzieć, a spróbuję jeszcze raz:

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--
 27
Author: Diego Jancic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-02 11:06:21

Z mojego doświadczenia wynika, że odpowiedzi wieloczęściowe działają w Firefoksie, ale nie w Internet Explorerze. To było 2 lata temu, przy użyciu ówczesnych przeglądarek.

Miałem odpowiedzi HTTP multipart pracujących dla strumienia obrazów JPEG. Kamery IP Axis wykorzystują na przykład strumień motion JPEG dla przeglądarki Firefox. W przeglądarce Internet explorer Axis wymaga użycia wtyczki.

Jeśli Obsługa tylko Firefoksa spełnia Twoje wymagania, to polecam ustawienie nagłówka content-length w każdej części odpowiedź wieloczęściowa. Może to pomóc uczynić łańcuch graniczny identycznym w oryginalnym nagłówku HTTP i odpowiedzi wieloczęściowej (w nagłówku HTTP brakuje'--').

 4
Author: Thomas Bratt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-02 11:31:09

Dwa pomysły:

  1. formatowanie: myślę ,że "multipart" powinien być pisany małymi literami i nie sądzę, aby średnik był oczekiwany na końcu nagłówka Content-type(chociaż wątpliwe, czy to coś zmieni, możliwe, że tak będzie).
  2. próbowałeś zastąpić tryb? Wystarczy użyć: Content-type: multipart/x-mixed-replace -- Wszystko inne powinno pozostać takie samo.
 3
Author: RickNZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 21:04:54