Samsung verwendet Akamai Image Manager, um diese Dateien auszuliefern.
Wenn ich einen Accept-Header mit dem Wert image/jpeg,image/gif sende, wird wie erwartet ein image/jpeg zurückgegeben.
wget --header="Accept: image/jpeg,image/gif" http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
--2020-11-13 11:43:58-- http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
Resolving image-us.samsung.com (image-us.samsung.com)... 23.217.144.69
Connecting to image-us.samsung.com (image-us.samsung.com)|23.217.144.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 83094 (81K) [image/jpeg]
Saving to: 'samsung-logo-191-1.jpg.6'
Discourse versucht, das Bild abzurufen, indem es FileHelper.download aufruft, was wiederum FinalDestination.get aufruft, welches letztendlich die Datei mit einem UserAgent anfordert:
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Wenn wir also dasselbe Bild mit demselben Accept-Header wie oben anfordern, aber diesen User-Agent hinzufügen, erhalten wir:
wget --header="Accept: image/jpeg,image/gif" --header="User-Agent: Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36" http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
--2020-11-13 11:52:50-- http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
Resolving image-us.samsung.com (image-us.samsung.com)... 23.217.144.69
Connecting to image-us.samsung.com (image-us.samsung.com)|23.217.144.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45540 (44K) [image/webp]
Saving to: 'samsung-logo-191-1.jpg.10'
Es wird ein image/webp zurückgegeben. Es scheint, als würden sie den Accept-Header ignorieren und ihre eigene Logik verwenden, um den besten Dateityp basierend auf dem User-Agent zu bestimmen.
Apple hat WebP historisch nicht unterstützt, also probieren wir das aus:
wget --header="Accept: image/jpeg,image/gif" --header="User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Safari/605.1.15" http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
--2020-11-13 12:27:02-- http://image-us.samsung.com/SamsungUS/home/samsung-logo-191-1.jpg
Resolving image-us.samsung.com (image-us.samsung.com)... 23.217.144.69
Connecting to image-us.samsung.com (image-us.samsung.com)|23.217.144.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 83094 (81K) [image/jpeg]
Saving to: 'samsung-logo-191-1.jpg.16'
Erfolg!
Ich denke, man kann ein ziemlich starkes Argument dafür anführen, dass der Webserver den Accept-Header immer respektieren und nicht versuchen sollte, ihn zu überlisten. Andererseits könnte man argumentieren, dass man, wenn man eine bestimmte User-Agent-Zeichenfolge übermittelt, bereit sein sollte, sich wie dieser User-Agent zu verhalten (obwohl User-Agent-Spoofing nicht ungewöhnlich ist und verschiedene Verwendungszwecke hat).
Tatsächlich hat Apple WebP-Unterstützung hinzugefügt in iOS 14 (vor kurzem veröffentlicht) und macOS Big Sur (gestern veröffentlicht), also sollten wir das wahrscheinlich unterstützen (indem wir es als standardmäßig erlaubte Erweiterung hinzufügen) und ImageMagick so konfigurieren, dass es WebP unterstützt (was eine Abhängigkeit von libwebp oder Ähnlichem einführt), damit wir optimieren und die Größe ändern usw. können.