Prise en charge par le navigateur des réponses en plusieurs parties
Je voudrais créer une réponse HTTP, en utilisant multipart / mixed,mais je ne suis pas sûr des navigateurs qui la supportent; et si c'est aussi pratique que cela puisse paraître, du point de vue du client. Pour être honnête, je n'ai pas besoin spécifiquement de ce type de contenu. Je veux juste transmettre plus d'un fichier dans la même réponse; peut-être y a-t-il un autre type de contenu plus utilisé.
3 réponses
Je l'ai testé, avec un serveur fait maison et une réponse simple. Je ne sais pas si la réponse est bien formée car aucun navigateur ne la comprend 100% OK. Mais voici les résultats:
- Firefox 3.5 : rend uniquement la dernière partie, les autres sont ignorées.
- IE 8 : Affiche Tout le contenu comme s'il s'agissait de texte / plain, y compris les limites.
- Chrome 3 : enregistre tout le contenu dans un seul fichier, rien n'est rendu.
- Safari 4 : Enregistre tout le contenu dans un seul fichier, rien n'est rendu.
- Opera 10.10: quelque Chose de bizarre. Commence à rendre la première partie en clair / texte,puis efface tout. La barre de progression du chargement se bloque sur 31%.
Voici la réponse complète, si quelqu'un trouve une erreur, veuillez me le dire et je vais essayer à nouveau:
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--
D'après mon expérience, les réponses en plusieurs parties fonctionnent dans Firefox mais pas dans Internet Explorer. C'était il y a 2 ans, en utilisant les navigateurs de l'époque.
J'ai eu des réponses HTTP multipart fonctionnant pour un flux D'images JPEG. Par exemple, les caméras IP Axis utilisent pour leur flux Motion JPEG pour Firefox. Pour Internet explorer, Axis nécessite l'utilisation d'un plugin.
Si le support Firefox uniquement répond à vos besoins, je recommande de définir l'en-tête content-length dans chaque partie du réponse en plusieurs parties. Cela pourrait aider à rendre la chaîne de limite identique dans l'en-tête HTTP d'origine et la réponse en plusieurs parties (le '--' est manquant dans l'en-tête HTTP).
Deux idées:
- formatage: je pense que "multipart" devrait être en minuscules, et je ne pense pas qu'un point-virgule soit attendu à la fin de L'en-tête Content-type (bien qu'il soit douteux que cela fasse une différence, c'est possible).
- Avez-vous essayé le mode remplacer? Utilisez simplement:
Content-type: multipart/x-mixed-replace
-- Tout le reste devrait rester le même.