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.
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--
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'--').
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:
- 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).
- próbowałeś zastąpić tryb? Wystarczy użyć:
Content-type: multipart/x-mixed-replace
-- Wszystko inne powinno pozostać takie samo.
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