Samsung использует Akamai Image Manager для обслуживания этих файлов.
Если я передаю заголовок Accept со значением image/jpeg,image/gif, сервер возвращает image/jpeg, как и ожидалось.
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 пытается загрузить изображение, вызывая FileHelper.download, который вызывает FinalDestination.get, что в конечном итоге запрашивает файл с UserAgent:
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Таким образом, если мы запросим то же изображение с тем же заголовком Accept, что и выше, но добавим этот User-Agent, мы получим:
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'
И возвращается image/webp. Похоже, что они игнорируют заголовок Accept и используют собственную логику для определения лучшего типа файла на основе User-Agent.
Apple исторически не поддерживала WebP, поэтому давайте попробуем это:
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'
Успех!
Я считаю, что можно привести довольно веские доводы в пользу того, что веб-сервер всегда должен уважать заголовок Accept и не пытаться быть «умнее» его. С другой стороны, кто-то может возразить, что если вы предоставляете конкретную строку User-Agent, то должны быть готовы вести себя как этот пользователь (хотя подмена User-Agent не редкость и имеет множество применений).
Как оказалось, Apple добавила поддержку WebP в iOS 14 (выпущен недавно) и MacOS Big Sur (выпущен вчера), поэтому мы, вероятно, должны добавить эту поддержку (добавив её как расширение по умолчанию) и настроить ImageMagick для работы с ней (что потребует зависимости от libwebp или аналогичной библиотеки), чтобы мы могли оптимизировать и изменять размер изображений и т. д.