2016-03-21 10 views
12

При взгляде на то, как веб-сайты, такие как Facebook, хранят изображения профиля, URL-адреса, похоже, используют случайно генерируемое значение. Например, страница профиля изображения страницу Google, Facebook имеет следующий URL:Хранение данных пользователя

https://scontent-lhr3-1.xx.fbcdn.net/hprofile-xft1/v/t1.0-1/p160x160/11990418_442606765926870_215300303224956260_n.png?oh=28cb5dd4717b7174eed44ca5279a2e37&oe=579938A8 

Однако почему бы не просто организовать это как так:

https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png 

Очевидно, что это было бы гораздо проще с точки зрения хранения и простоты. Я что-то упускаю? Благодарю.

+0

Это может представлять интерес, он не отвечает на вопрос, но он дает представление о том, как к CDN URLs Facebook использовали быть построен, и показывает некоторые из проблем, с не заслоняя/хэширования параметров в URL. https://www.lightbluetouchpaper.org/2009/02/11/new-facebook-photo-hacks/ –

+0

Я недавно наткнулся на это видео на youtube, которое охватывает именно это (среди прочего): [Будет ли YouTube выходить из Идентификаторы видео?] (Https://www.youtube.com/watch?v = gocwRvLhDf8) (Я не тот парень в этом видео, и я ни в чем не связан с ним, я просто думаю, что это интересно смотреть) – mmgross

ответ

6

Просто говоря, я думаю, что это может сводиться к двум основным причинам: безопасности и кэш:

Security - Добавление эти длинные непредсказуемые хэши предотвратить другие угадать фото адреса и делает это довольно трудно загрузить фотографии, которые вы не предположил.

Рассмотрите, что произойдет, если я сможем легко угадать URL вашего профиля и загрузить его, даже если вы явно решили поделиться им только с друзьями.

Кэш - добавив «случайные» параметры запроса к каждой фотографии, убедитесь, что каждый экземпляр фотографии получает свой собственный URL. Таким образом, вы можете хранить фотографию в кеше браузера в течение длительного времени, зная, что всякий раз, когда вы заменяете ее новым, новая фотография будет иметь новый URL-адрес, и браузер не будет показывать вам старую фотографию.

Если вы сохранить тот же URL для каждого пользователя фото профиля (например https://scontent-lhr3-1.xx.fbcdn.net/{{ profile_id }}/50x50.png), а затем загрузить новую фотографию, либо один из них может произойти:

  • Если вы сохранили фотографию в кэше браузера в течение долгого времени браузер покажет вам кешированную версию (пока URL-адрес будет одинаковым, а кеш не истек, нет необходимости повторно загружать изображение).
  • Если вместо этого вы сохраняете изображение в кеше в течение короткого периода времени, вы в конечном итоге нанесете на свой сервер гораздо больше, чем нужно, увеличивая нагрузку и ухудшая производительность.


Надеюсь, это прояснит это.

+0

+1 для перебора кеша. Безопасность не так много ... безопасность через неясность слаба, но это тоже не повредит. – swestner

+2

10x :) Что касается безопасности - речь идет не о безвестности, а о необходимости знать секрет, чтобы получить доступ к ресурсу (который является прочной концепцией безопасности и как работает jsession или oauth). По сравнению с постоянным URL-адресом для каждого пользователя, как предположил @PSidhu, гораздо труднее получить доступ к фотографии профиля, если только я не знаю полный URL-адрес с «случайным» токеном. –

3

С вашей схемой маршрута, как бы вы избежали незнакомцев, чтобы получить доступ к фотографиям частного аккаунта? Хэш также предотвращает загрузку всех изображений.

7

Такие компании, как Facebook, имеют достаточно интенсивные CDN. Они могут выглядеть как произвольно сгенерированные URL-адреса, но это не так, каждый индивидуальный маршрут предназначен специально и запрограммирован для обработки таким образом.

Они не после простоты хранения, как если бы вы использовали FTP для подключения к базовому серверу веб-сайта маркетинга. Хотя вы можете поместить все свои изображения в папку/images, Facebook слишком сложен для этого. Десятки различных типов приложений получают доступ к сотням, если не тысячам CDN и серверам по всему миру.

Если вы когда-либо создавали веб-приложение, такое как приложение Ruby on Rails, и вы работаете с такими сервисами, как AWS (Amazon Web Services), вы также столкнетесь с тем, что кажется бессмысленным URL-адресами. Но все это часть сети быстрой доставки, предоставляемой в рамках архитектуры. Каждый раз, когда вы «нажимаете» свое приложение на сервер, для каждого уникального ресурса автоматически генерируются новые URL-адреса, файлы css, файлы JavaScript, файлы изображений и т. Д. Все динамически создаются. Вам не нужно вводить каждый из этих уникальных URL-адресов каждый раз, когда вы публикуете приложение, код просто знает, где искать их как часть процесса публикации.

Пример: вы говорите веб-приложение, чтобы искать

//= require jquery 

и возвращает вам http://example.com/assets/jquery-eb3e278249152b5b5d5170b73d9dbf52.js?body=1 в вашем заголовке.

Не имеет значения, что URL-адрес более сложный, чем он должен быть, приложение распознает его, и это все, что имеет значение.

2

Я получаю вашу боль :-) Я, возможно, не останусь с описанием того, как эта проблема может появиться больше, но позвольте мне говорить о решении. Ну, это нормально, что в общем случае код, имея дело с хэшированной стоимостью или даже базовым значением, кажется, кажется, что беспорядок приходится иметь дело, но с идентификатором для объяснения, он не остается много!

Я использую для работы в компании, где мы используем для сопоставления публикации в Facebook, используя Graph API, чтобы получить свой объект Insights и извлечь информацию из него для удобства прохождения в пользовательском интерфейсе и отправки обратно в наш хранилище кеша Redis; и как только мы определили структуры данных в TaffyDB как объект организация будет выглядеть, все просто имеет смысл с его способностью запрашивать полезные конечны из длинного мусорного ищут поток уменьшенной потоки Javascript Приведи: http://www.taffydb.com/

0

Дополнительные значения в URL полезны:

  • доступа Track. Это похоже на то, что газета добавляет « homepage» против «& email» в URL-адрес статьи, поэтому их система знает, как читатель нашел эту страницу.

  • Избегать злоупотребления и контролировать доступ. Представьте себе, что пользователь загрузит маленькое, популярное порнографическое изображение в изображение профиля. Они могли бы захватить CDN быть свободным веб-хостинга для их порносайт. Но этот код используется внутри CDN для ограничения количества просмотров.

Смежные вопросы