Все большее число веб-приложений (в основном, Basecamp 37Signals) присваивают поддомен каждому пользователю/учетной записи. Мне было интересно, какие плюсы и минусы имеют такой подход. Есть ли конкретная причина для этого или это просто косметическая функция? Это, например, позволяет повысить/упростить масштабируемость и повысить безопасность?
Плюсы/минусы субдоменов в веб-приложениях
Ответ 1
Я думаю, что это может быть связано с той же политикой происхождения. Если две страницы пользователей находятся на разных поддоменах, браузеры предотвратят доступ к сценариям из одного поддомена для доступа к документам в другом подобласте. Поэтому, если Мэллори регистрирует сайт (mallory.example.org) и помещает в него вредоносную script, то script не сможет изменить DOM сайта Alice (alice.example.org). Если бы они использовали пути (example.org/mallory и example.org/alice), SOP не работал бы, и Мэллори script мог делать всевозможные плохие вещи на странице Алисы, например, поддельный экран входа и сообщение пароли вернулись к Мэллори.
Эта защита SOP работает даже тогда, когда оба поддомена разрешают один и тот же IP-адрес, если хост-часть URL-адреса отличается, современные браузеры будут блокировать попытки междоменного скриптинга (и несколько других потенциально опасных вещей).
Ответ 2
Использование субдомена для каждого приложения решает основную проблему знания того, какое приложение использовать. Это позволяет пользователю открывать сразу несколько приложений в одном браузере.
Дополнительным преимуществом является то, что, связывая логин с субдоменом, пользователь может быть зарегистрирован как другой пользователь в разных приложениях. Вам не нужно выходить из приложения A для входа в приложение B. Он может быть зарегистрирован в обоих с другим именем входа.
Преимущество масштабируемости зависит от вашей архитектуры. Чем больше общих ресурсов (одной базы данных) имеет приложение, тем сложнее отделить приложение. С другой стороны, если у вас есть база данных для каждого приложения, то управление версиями баз данных становится гораздо более сложной задачей. Я думаю, что большинство приложений используют единую базу данных и виртуальные поддомены. Единственное основание легче поддерживать (но более сложно масштабировать).
Отрицательная точка использования субдоменов заключается в том, что для SSL вам нужен сертификат подстановки, который стоит больше, чем однодоменный сертификат.
Ответ 3
Мы делаем это только по той причине, что людям нравится видеть их бренд. Поддержка конверсий клиенты могут выбрать субдомен для брендинга своей панели управления, а затем настроить его с их логотипом и цветами.
Безопасность не является фактором, так как никто не может создавать сценарии. Это скорее эстетическая особенность.
Я хочу упомянуть, что два субдомена могут связываться, если обе страницы имеют свойство JavaScript document.domain, установленное в домене. Например:
document.domain = 'example.com';
Это означает, что одна и та же политика происхождения отключена для a.example.com и b.example.com до n.example.com, если все поддомены имеют свойство.