Question

Je voudrais créer une réponse HTTP en multipart / mixte, mais je ne suis pas sûr que les navigateurs le prennent en charge; 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 qu'il y a un autre type de contenu plus utilisé.

Était-ce utile?

La solution

Je l’ai testé, avec un serveur fait maison et une réponse simple. Pas sûr que la réponse soit bien formée car aucun navigateur ne la comprend à 100%. Mais voici les résultats:

  • Firefox 67.0.1 (64 bits) : ne restitue que la dernière partie, les autres sont ignorées.
  • IE 11.503 : enregistre tout le contenu dans un seul fichier (y compris les limites), rien n'est rendu.
  • Chrome Mai 2019 : 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 d'étrange. Commence à rendre la première partie en texte brut / clair, puis efface tout. La barre de progression du chargement est bloquée à 31%.

Voici la réponse complète. Si quelqu'un trouve une erreur, dites-le-moi et j'essaierai à 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--

Autres conseils

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 en plusieurs parties HTTP fonctionnant pour un flux d'images JPEG. Par exemple, les caméras IP Axis utilisent pour leur flux JPEG de mouvement pour Firefox. Pour Internet Explorer, Axis nécessite l’utilisation d’un plugin.

Si la prise en charge de Firefox uniquement répond à vos exigences, je vous recommande de définir l'en-tête content-length dans chaque partie de la réponse en plusieurs parties. Il pourrait être utile de 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:

  1. Mise en forme: je pense "multipart" " devrait être en minuscule, 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, il est possible que ça puisse l'être).
  2. Avez-vous essayé de remplacer le mode? Utilisez simplement: Content-type: multipart / x-mixed-replace - tout le reste devrait rester identique.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top