Як поставити фото на сторінку, коли є лише URL
Сторінка, яка тягне картинку з чужого сервера, — це сторінка з чужим трекінг-пікселем.
Чому не приймати просто URL
Бо поле картинки, що приймає адресу, — це діра. Спрямуйте його на чужий хост, і браузер кожного відвідувача повідомить про себе цьому хосту — на сервісі, чия сторінка про приватність обіцяє повну відсутність сторонніх запитів. Те саме поле витекло б неекранованим у CSS-тло, а це окремий клас проблем.
Тому поля картинок приймають рівно одну форму: ключ сховища, виданий нашим же роутом завантаження. Щоб його отримати, надішліть адресу на ендпоїнт завантаження в JSON із видом avatar, background або card. Сервер завантажить файл, перевірить, перекодує й поверне ключ, який ви збережете в сторінку, як будь-яке інше поле.
- Завантаження за URL, отримання ключа, патч сторінки цим ключем. Три кроки — або один, якщо передати адресу фотографії при створенні.
- Завантажуються лише публічні адреси: усе, що розв’язується в приватну чи локальну адресу, відхиляється — і до редиректів, і після.
- Обмеження за розміром стосуються джерела: вісім мегабайтів для аватарів і карток, тридцять для тла.
- У відповіді приходять ще й вага з розмірами після обробки, що зручно, коли треба відзвітувати про зроблене.
Що відбувається з байтами
- Усе перекодовується. Файл, який ми віддаємо, ніколи не дорівнює файлу, який ви надіслали.
- EXIF викидається, і це важливо: телефонні фотографії несуть координати GPS.
- Розміри й вага обмежуються за видами, щоб сторінка з шістьма картинками відкривалася на мобільному інтернеті.
- HEIC з iPhone декодується на сервері, конвертувати заздалегідь не потрібно.
Точки кадрування і помилка, якої варто уникнути
Шаблони ріжуть: коло для фото, на весь екран для тла, смуга для картки. У кожного поля картинки є парна точка у відсотках, і від неї залежить, обличчя в кадрі чи груди. При створенні точку можна передати разом із фотографією; потім це ще одне поле в оновленні, а MCP-інструмент, що ставить фото, приймає її аргументом.
Помилка, яку варто назвати: використовувати адресу CDN Instagram так, ніби вона постійна. Ці URL підписані й спливають за лічені дні. Переносьте байти одразу — саме це й робить завантаження за URL, — інакше аватар тихо зламається через тиждень після передачі сторінки.