web-dev-qa-db-fra.com

Que signifie le message d'état HTTP 206 Partial Content et comment puis-je charger complètement les ressources?

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?

31
prasadmsvs

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.

36
csaron92

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.

5
Penfold

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>
1
thiago marini

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.

0
Aran Mulholland