Вы действительно не можете безопасно различать клиентов по HTTP. Когда они записывают весь трафик, они всегда могут воспроизвести взаимодействие, если вы не используете некоторые криптографические механизмы.
В качестве простого подхода я бы попытался разрешить запросы только в сочетании с ключом доступа. Ключ доступа создается вами и отправляется в браузер в качестве параметра URI. Когда клиенты отправляют запрос, он действителен только в том случае, если предоставленный ключ доступа также действителен. В ключе доступа вы можете закодировать некоторую информацию, такую как IP-адрес, временной диапазон, пользовательский агент и т. Д.
Но, как я уже сказал, не существует 100% безопасного способа защитить ваши данные, если вы в конечном итоге предоставите их через HTTP. Всегда есть хардкорный подход, чтобы перехватить весь трафик и перестроить файлы таким образом.
Ключи доступа используются Amazon S3, но есть также плагины для веб-серверов, таких как nginx.