تستخدم سامسونج مدير صور أكاماوي لتقديم هذه الملفات.
إذا أرسلت رأس 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.
لم تدعم شركة أبل صيغة 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 (على الرغم من أن تزوير الـ user agent ليس أمرًا نادرًا وله استخدامات متنوعة).
في الواقع، أضافت أبل دعم صيغة WebP إلى iOS14 (المُطلَق حديثًا) و macOS Big Sur (المُطلَق أمس)، لذا ربما ينبغي لنا دعم ذلك (بإضافته كإضافة افتراضية مسموح بها) وتكوين ImageMagick لدعمه (مما سيؤدي إلى إضافة اعتماد على libwebp أو ما شابه) حتى نتمكن من تحسين الصور وتغيير حجمها، وما إلى ذلك.