web-dev-qa-db-fra.com

403 Erreur lors de l'extraction d'une image avec JS

J'ai lu toutes les questions liées à 403 ici et ailleurs et je ne trouve pas de réponse à cette question: lorsque j'essaie d'obtenir une image particulière sur un domaine distant via JavaScript, l'erreur 403 s'affiche. Mais si je tape exactement la même URL d'image dans le même navigateur, l'image est téléchargée et affichée sans erreur. Même chose (succès) si j'essaie de l'obtenir via PHP.

Voici un violon avec un exemple live de la 403 (visible dans la console de débogage): http://jsfiddle.net/8VfrQ/ Ensuite, copiez et collez simplement le lien img.src le navigateur et vous verrez l'étoile affichée.

Merci pour toutes les astuces.

3
chris

Le site semble vérifier le champ du référent.

curl -I http://mysticstars.net/gifs/star_bul.gif -e "*"
HTTP/1.1 403 Forbidden
Date: Wed, 25 Jun 2014 15:45:40 GMT
Server: Apache/2.2.27
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Length: 1007
Content-Type: text/html

curl -I http://mysticstars.net/gifs/star_bul.gif -e "http://mysticstars.net"
HTTP/1.1 200 OK
Date: Wed, 25 Jun 2014 15:46:37 GMT
Server: Apache/2.2.27
Last-Modified: Wed, 26 Sep 2007 20:56:22 GMT
ETag: "1a08a9c-e3-43b1016084980"
Accept-Ranges: bytes
Content-Length: 227
Content-Type: image/gif

Comme @Wayne Whitty le fait remarquer, cela est probablement dû à la réécriture des règles empêchant la création de liens dynamiques.

À ma connaissance, javascript ne peut pas passer par le champ référant, vous devrez donc peut-être modifier les règles de liaison dynamique.

3
jeffatrackaid

Lorsque j'essaie d'obtenir une image particulière sur un domaine distant via JavaScript, j'obtiens une erreur 403.

Réponse probable: le site en question est protégé contre le "leeching"/hotlinking. c'est-à-dire qu'il vérifie quel hôte demande le fichier avant de le servir. Si la demande provient d'un site Web non reconnu, une erreur 403 Forbidden est générée.

Si vous jetez un oeil à ce violon mis à jour vous verrez que ce n'est pas seulement JavaScript qui est affecté.

6
Wexford