Как понять, что файл на сервере изменился при сохранении имени и пути?
Что проверяют
Знаете ли вы механизм условных HTTP-запросов и умеете ли не качать файл заново, когда он не менялся. Следом обычно спрашивают, что делает сам URLSession без вашего участия и как узнать об изменении, не опрашивая сервер.
Как отвечать
Имя и путь тут ничего не говорят, нужен признак версии содержимого. Варианты от простого к сложному:
ETagиIf-None-Match: сервер отдаёт идентификатор версии, клиент при следующем запросе присылает его обратно. Файл не изменился, приходит304 Not Modifiedбез тела. Изменился, приходит200с новым файлом и новымETag;Last-ModifiedиIf-Modified-Since: то же по дате. Точность до секунды, поэтому две правки за одну секунду неразличимы;HEAD-запрос: получить заголовки без тела и сравнитьETag,Last-Modified,Content-Lengthс сохранёнными;- хэш в метаданных: API отдаёт манифест с SHA-256 файлов, клиент сравнивает его с локальным, посчитанным через
SHA256.hash(data:)из CryptoKit; - версия в URL: сервер меняет адрес при каждой правке (
avatar.jpg?v=a1b2), и проблема кэша исчезает вовсе.
Отдельно скажите про URLCache. При политике .useProtocolCachePolicy сессия сама хранит ETag, сама отправляет условный запрос и на 304 может вернуть вам закэшированное тело со статусом 200. Если нужно явно видеть факт изменения, управляйте заголовками сами и отключайте кэш для этого запроса через .reloadIgnoringLocalCacheData.
Если об изменении надо узнать без запроса, это уже push: тихое уведомление с content-available или событие по WebSocket, после которого клиент делает тот же условный запрос.
Где спотыкаются
Предлагают скачать файл целиком и сравнить хэш. Экономии никакой: трафик потрачен, а весь смысл проверки был в том, чтобы его не тратить.
Сравнивают размер файла. Правка может не изменить длину, так что совпадение размера ничего не доказывает.
Не учитывают, что сервер или CDN может вообще не отдавать ETag или отдавать слабый вариант W/"...", который не гарантирует побайтового совпадения. Прежде чем строить логику, посмотрите заголовки реального ответа.