Нет, не все сайты работают так (с разделением на фронт/бэк) - некоторые по-старинке. И не всегда новый подход оправдан.
В основном имеет смысл там, где много интерактива - при старом подходе все равно приходится делать апи для всяких lazy-load/поиска/фильтрации, решать где/как будут хранится шаблоны, в каком формате передавать и пр. При новом подходе за все это отвечает фронт, бэк предоставляет только данные.
- Чаще всего используется http+json для взаимодействия фронт-бэк, но есть варианты.
- С помощью React мы запрос не делаем. React это что-то вроде продвинутого шаблонизатора. Запрос мы делаем через js (browser api). Бэк только отдает json.
Преимущества:
- Можно разделить работу фронт и бэк команд
- Можно переписать фронт/бэк, используя интерфейс API как контракт взаимодействия
- Между фронтом и бэком бегают чисто данные, без шаблонов. Но см. п. 3 недостатков.
- Перенос нагрузки с бэка на фронт (редко это оправдано, но все же).
- Интерфейс становится более отзывчивым (если делать все хорошо)
- Проще протестировать поотдельности
Недостатки:
- Больше кода, больше компетенций, сложнее система
- Проблемы с индексацией, задейсвуются смешанные варианты (SSR)
- Размер кода на фронте, больше нагрузка на устройства
Наверняка не все перечислил - то, что быстро пришло на ум.