Samsung utilizza Akamai Image Manager per servire questi file.
Se invio un header Accept con il valore image/jpeg,image/gif, ricevo un image/jpeg, come previsto.
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 tenta di recuperare l’immagine chiamando FileHelper.download, che a sua volta chiama FinalDestination.get, il quale alla fine richiede il file con un UserAgent di:
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Quindi, se richiediamo la stessa immagine con lo stesso header Accept come sopra, ma aggiungendo anche quel user agent, otteniamo:
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'
E viene restituito un image/webp. Sembra che stiano ignorando l’header Accept e stiano usando la propria logica per determinare il tipo di file migliore in base al user agent.
Apple non ha storicamente supportato webp, quindi proviamo con quello:
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'
Successo!
Penso che si possa fare un argomento molto forte secondo cui il web server dovrebbe sempre rispettare l’header Accept e non cercare di essere più intelligente di esso. D’altra parte, qualcuno potrebbe sostenere che se si presenta una stringa di user agent specifica, ci si dovrebbe aspettare di comportarsi come quell’user agent (anche se lo spoofing dell’user agent non è raro e ha una varietà di utilizzi).
Come capita, Apple ha aggiunto il supporto webp a iOS14 (rilasciato di recente) e MacOS Big Sur (rilasciato ieri), quindi probabilmente dovremmo supportarlo (aggiungendolo come estensione consentita predefinita) e configurando ImageMagick per supportarlo (il che introdurrà una dipendenza da libwebp o simile) in modo da poter ottimizzare e ridimensionare, ecc.