Hallo Matthias,
Wenn die URL die gleiche ist und korrekte Caching-Header gesendet werden: ja.
Was müsste ich denn im header angeben?
Vorneweg: Das betrifft eigentlich unr Lösungsansatz 2.
Das PHP-Script, das das Bild ausgibt, darf auf *keinen* Fall einen Cache-Control: no-cache, Pragma: no-cache oder ähnliches senden.
Fangen wir mit dem Cache-Control-Header an. Dieser sollte so aussehen:
Cache-Control: private, max-age=3600, must-revalidate
Das 'private' bewirkt, dass kein Proxy das Bild cachen darf. Das max-age=3600 bewirkt, dass die Datei nicht länger als 3600 Sekunden im Browsercache bleiben darf. (Du darfst an dem Wert natürlich drehen) Das must-revalidate bewirkt, dass der Browser nach ablauf des max-age-Werts auch wirklich das Bild nocheinmal anfordert.
Nun brauchst Du noch eine Expires-Header. Dieser muss das Datum angeben, bei dem das Bild 'ausläuft', also der Browser es zwangsläufig nocheinmal anfordern _muss_:
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Das Datum muss _exakt_ in diesem Format angegeben werden. Es sollte möglichst der gleiche Zeitpunkt wie 'aktuelle Zeit + die Angabe bei max-age' sein. Bei PHP dürften Dir die Funktionen gmdate() und time() dafür nützlich sein.
Noch etwas: Ich habe hier die Header so geschrieben, wie sie in der HTTP-Kommunikation dann auch aussehen; in PHP musst Du sie natürlich so erzeugen:
header ('Cache-Control', 'private, ...');
header ('Expires', '...');
Wenn Du das Bild zwischenspeicherst (Lösungsvorschlag 3) dann sollte der HTTP-Server sich automatisch um so etwas kümmern.
Viele Grüße,
Christian