3 Stimmen

Amazon S3 temporärer URL zum Bild funktioniert in IE und Firefox, aber nicht in Safari.

Ich verwende Amazon S3, um Bilder zu hosten. Der S3-Bucket ist privat, daher generiere ich eine temporäre URL (mit Right AWS) mit einer Ablaufzeit von 5 Minuten, um das Bild anzeigen zu lassen. Die URL sieht so aus (Hinweis: Die unten stehende URL funktioniert nicht):

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

Dies funktioniert gut, und ich kann die URL in Firefox einfügen und das Bild wird angezeigt. Dasselbe gilt für den IE. Wenn ich es jedoch in Safari versuche, scheint die URL aufgelöst zu werden, aber kein Bild wird angezeigt. Ebenso wird, wenn ich versuche, die URL im src-Attribut eines IMG-Tags auf einer Webseite zu verwenden, in Safari nichts angezeigt (funktioniert in allen anderen Browsern), z.B.:

alternativer Text http://lylo.co.uk/screenshot.png

Hat jemand dieses Verhalten schon einmal gesehen und kann mir sagen, was ich möglicherweise falsch mache?

0 Stimmen

Ich habe das selbst nicht gesehen - hast du vielleicht deinen Safari so eingestellt, dass Bilder nicht heruntergeladen werden?

0 Stimmen

Nein, Safari ist völlig in Ordnung. Nur diese bestimmten S3-URLs können nicht aufgelöst werden. Ich bin wirklich verblüfft.

0 Stimmen

Wenn Sie das Bild mit FF herunterladen, wird es in Safari angezeigt? Wenn Sie auf das Bild über http anstatt https zugreifen, funktioniert es dann immer noch nicht in Safari? Wenn ja, geben Sie bitte einen Dump des Netzwerkverkehrs an (Wireshark installieren, Capture->Interfaces...->Start, Bild in Safari laden, Capture->Stop, File->Save)

5voto

Olly Punkte 7602

Bei etwas Recherche in der von mir verwendeten S3-Bibliothek habe ich hier das Problem gefunden.

Wenn Sie eine Datei auf S3 hochladen, müssen Sie den Content-Type-Header setzen. In meiner Situation habe ich zwei Dateien hochgeladen, eine war eine originale PDF-Datei mit einem Content-Type von application/pdf, die andere war eine Miniaturvorschau im PNG-Format. Die Bibliothek, die ich zum Hochladen nach S3 verwendet habe, setzt den Content-Type-Header, aber sie setzte den Header sowohl für das Original-PDF als auch für die PNG-Miniaturansicht auf application/pdf.

Es scheint, dass Firefox und IE ein PNG-Bild von S3 problemlos rendern können, auch wenn es den falschen Content-Type-Header hat, während Safari dies überhaupt nicht mag und das Bild daher nicht rendert.

Also wurde das Problem gelöst, indem der S3-Bibliothek, die ich verwende, so gepatcht wurde, dass der richtige Content-Type-Header korrekt auf die PNG-Miniaturansichten gesetzt wird.

Puh.

0voto

vladr Punkte 63255

Ihre URL wird von AWS nicht erkannt:

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

Es sollte tatsächlich so aussehen:

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

Firefox wird alle URL-kodierten Entitäten (vor dem '?' Abfragezeichen) durch ihre entsprechenden ASCII-Repräsentationen ersetzen, bevor die Anfrage tatsächlich gesendet wird (d.h. Firefox wird z.B. %2F in obigem Beispiel mit / ersetzen), während Safari das möglicherweise nicht tut. AWS wird Safari in solchen Fällen wahrscheinlich mit HTTP 404 antworten.

Vergewissern Sie sich, dass Ihre URL für AWS gut formatiert ist. Untersuchen Sie genau alle Unterschiede zwischen der URL, die Firefox in seiner Adressleiste hat, nachdem das Bild erfolgreich abgerufen wurde, und der URL, die Safari in seiner Adressleiste hat, nachdem das Bild nicht abgerufen werden konnte.

0 Stimmen

Hmmm, interessant. Ich frage mich, was Server tun, wenn ihnen %2F im Dateinamen präsentiert wird.

0 Stimmen

Ich habe versucht, die URL zu unescapen, aber es macht keinen Unterschied - sie wird immer noch nicht in Safari gerendert, aber schon in IE und Firefox.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X