J'ai des balises d'image sur un site comme celui-ci.
<img src="img.png"/>
Quand j'essaye de les charger, ils ne se chargent qu'à moitié. Lorsque j'ai vérifié la demande dans la console réseau, je vois que la réponse est:
206 Contenu partiel
Je l'ai googlé et il dit que s'il y a une plage définie dans l'en-tête, ce sera comme ça. Mais où ces en-têtes sont-ils réellement définis? Et comment puis-je éviter cela et charger les images complètes?
De la réponse de user16639 à la question Pourquoi Firebug affiche-t-il une réponse "206 Partial Content" sur une demande de chargement vidéo?
Ce code de contenu partiel (206) peut être envoyé depuis le serveur lorsque le client a demandé une plage (par exemple "donnez-moi les 2 premiers Mo de données vidéo ").
Il est vital pour télécharger des données en morceaux, ce qui évite de chercher des ressources inutilisées. (Je regarde rarement une vidéo complète en ligne.) Regardez la demande sortante pour un en-tête
Range
.
C'est au client de passer un autre appel pour obtenir le reste des données (ou le bit suivant). Vous n'avez rien à faire, ils obtiendront finalement l'image complète, même si cela prend plusieurs appels http.
J'ai eu un problème similaire lors du chargement des polices de différents sous-domaines. Dans mon cas, j'obtenais 206 en raison de problèmes de domaine croisé et je l'ai résolu simplement en mettant un fichier .htaccess dans mon dossier racine:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
D'abord:
Le HTTP 206 Partial Content
le code de réponse d'état de réussite indique que la demande a réussi et que le corps contient les plages de données demandées, comme décrit dans l'en-tête Range
de la demande.
S'il n'y a qu'une seule plage, le Content-Type
de la réponse entière est défini sur le type du document, et un Content-Range
est fourni.
Si plusieurs plages sont renvoyées, le Content-Type
est défini sur multipart/byteranges
et chaque fragment couvre une plage, avec Content-Range
et Content-Type
le décrivant.
( D'après l'excellente référence de code d'état HTTP de Mozilla. )
Prochain:
Les en-têtes HTTP définis sur les ressources sont généralement définis par le serveur Web. Cependant, si le fichier est volumineux, comme un fichier vidéo le navigateur peut demander un morcea de la ressource en cours de chargement. Généralement, un HTTP 206
l'en-tête sera renvoyé à partir d'une demande initiée par le client. Les en-têtes définis sur les ressources dans Apache sont définis dans le mod_headers
section du httpd.conf
. Recherchez la ligne suivante pour voir si le contenu partiel est activé:
Header set Accept-Ranges bytes
Cette section contrôle le comportement des en-têtes définis par Apache, ce sera donc un bon point de départ.
La définition des en-têtes peut cependant se faire de différentes manières. Par exemple, lorsque vous utilisez Apache, vous pouvez contrôler les images chargées afin qu'elles soient mises en cache. Cela peut être fait en utilisant le [a2enmod module][2]
. Cela réduira la charge sur votre serveur.