2009-02-23 8 views
3

J'utilise Amazon S3 pour héberger des images. Le compartiment S3 est privé, donc je génère une URL temporaire (en utilisant Right AWS) avec une expiration de 5 minutes pour permettre le rendu de l'image. L'URL ressemble à ceci (note: URL ci-dessous ne fonctionnera pas):Amazon S3 temporaire URL à l'image fonctionne dans IE et Firefox mais pas Safari

https://mybucket.s3.amazonaws.com:443/attachments%2F30%2Fsmall.png?Signature=J%2BXzQd95myCNv0Re8arMhuTFSvk%3D&Expires=1235511662&AWSAccessKeyId=1K3MW21E6T8LWBY94C01 

Cela fonctionne très bien, et je peux coller l'URL dans Firefox et l'image est affichée. Idem pour IE. Cependant, lorsque je l'essaye dans Safari, l'URL semble se résoudre mais aucune image n'est affichée. De même, si j'essaie d'utiliser l'URL dans le src attribut d'un IMG tag sur une page Web, rien est rendu par Safari (très bien dans tous les autres navigateurs), par exemple:

alt text http://lylo.co.uk/screenshot.png

Quelqu'un a-t-il déjà vu ce comportement auparavant et pouvez-vous indiquer ce que je faisais, le cas échéant?

+0

Lorsque vous téléchargez l'image avec FF, s'affiche-t-elle dans Safari? Lorsque vous accédez à l'image via http au lieu de https, cela ne fonctionne-t-il toujours pas dans Safari?Si oui, veuillez fournir un vidage du trafic réseau (Installer wireshark, Capture-> Interfaces ...-> Démarrer, charger img dans Safari, Capture-> Arrêter, Fichier-> Enregistrer) – phihag

Répondre

5

Avec un peu de creuser dans la bibliothèque S3 que j'utilise, j'ai trouvé le problème ici.

Lorsque vous téléchargez un fichier vers S3, vous devez définir l'en-tête Content-Type. Dans ma situation, je téléchargeais deux fichiers, l'un était un fichier PDF original avec un Content-Type de application/pdf, l'autre était un aperçu de la vignette au format PNG. La bibliothèque que j'utilisais pour télécharger vers S3 définissait l'en-tête Content-Type, mais définissait l'en-tête sur application/pdf pour le PDF original et la miniature PNG.

Il semble que Firefox et IE vont heureusement rendre une image PNG à partir de S3 même s'il a le mauvais en-tête Content-Type, alors que Safari n'aime pas cela du tout et par conséquent ne rendra pas l'image. Donc, en corrigeant la bibliothèque S3 que j'utilise de telle sorte que l'en-tête Content-Type correct soit correctement défini sur les vignettes PNG, j'ai résolu le problème.

Oeuf.

0

Je ne l'ai pas vu moi-même - avez-vous peut-être configuré votre Safari pour ne pas télécharger d'images?

+1

Non, Safari est absolument parfait. Seules ces URL S3 particulières ne seront pas résolues. Je suis vraiment déconcerté. – Olly

0

Votre URL est pas reconnu par AWS:

...attachments%2F30%2Fsmall.png... 

Il faut en fait lire:

...attachments/30/small.png... 

Firefox va remplacer toutes les entités URL codées (avant le marqueur de requête '?) avec leurs représentations ASCII correspondantes avant de soumettre réellement la requête (ie Firefox remplacera %2F avec / dans l'exemple ci-dessus), alors que Safari pourrait ne pas le faire. AWS répondra probablement avec HTTP 404 à Safari dans de telles circonstances.

Assurez-vous que votre URL est bien formée pour AWS. Étudiez soigneusement toutes les différences entre l'URL que Firefox a dans sa barre d'adresse après que l'image est récupérée avec succès, par rapport à l'URL que Safari a dans sa barre d'adresse après que l'image échoue pour être récupérée.

+0

Hmmm, intéressant. Je me demande quels serveurs font des choses étranges lorsqu'ils sont présentés avec% 2F dans le nom du fichier. – Joshua

+0

J'ai essayé de déconnecter l'URL et cela ne fait aucune différence - il ne s'affiche toujours pas dans Safari mais dans IE et Firefox. – Olly

Questions connexes