фронтэнд - это приложение (html+css+javascript) для веб-браузера, запускается у пользователя, оно должно быть создано таковым, что бы делать запросы к бакэнду
бакэнд - это приложение (другое), запускаемое на сервере, которое обеспечивает функцианирование всей системы (но бывает оно не единственное). Обычно бакэнд состоит из готового веб сервера (например nginx/apache или майкрософтовский IIS , который выполняет большую часть рутинных операций, включая отдачу статичных файлов, те самые html, css, javascript, точнее те что не меняются в процессе работы приложения) и приложения/модуля (php или к примеру майкрософтовский asp.net), который отдает динамический контент - файлов, содержимое которых меняется в зависимости от запроса фронтэнда.
В этой схеме могут присутствовать другие компоненты, но это уже частности реализации, например база данных, инструменты поддержания кластера (например бакэнд запускается сразу на нескольких серверах), администрирования и управления и т.п.
Разделяют два подхода к реализации всего веб-приложения (обычно это не тригер а нестрогий выбор, типа 'немного первого подхода и в основном второго'):
1. на каждое действие пользователя (клик по разным страницам сайта и элементам интерфейса типа меню) бакэнд заново формирует html (и по необходимости все остальное) а веб браузер это отображает.
В этом подходе javascript не требуется, браузер практически не тратит ресурсы, но тратятся ресурсы сервера и нагружается сеть между ними.
2. все что касается интерфейса реализуется на javascript в браузере, html формируется на javascript, но данные и операции, отсылаются на сервер к бакэнду в виде относительно небольших (по сравнению с html интерфейса) файлов-запросов (формат и структуру этих запросов часто приходится разрабатывать самостоятельно, но есть хелперы).
Исторически сложилось, что данные от бакэнда удобнее передавать в текстовом виде в формате .json, а вот от фронтэнда к бакэнду исторически отправляют в виде multipart/form-data (то что отправляет на сервер html конструкция из тегов form, input, textarea и т.п.). Но это естественно не обязательные требование, и ничто не мешает и с клиента отправлять запросы в виде json, а так же вместо json использовать свой формат, например в браузер (и его javascript) встроено куча инструментов для отправки бинарных данных (например XMLHttpRequest).
Очень много ограничений и требований накладывает выбор среды разработки, например при использовании visual studio asp.net, все будет завязано на майкрософтовскую инфраструктуру, начиная с деплоя и кончая собственно работы бакэнда.. Но как бонус, я отчетливо помню (при использовании WinForms) приложение для веб разрабатывалось точно так же как для десктопа, с очень небольшими отличиями, и при этом это работало в браузере (если честно отвратительно, но кто сейчас смотрит на качество реализации).
p.s. есть еще старый но все еще рабочий способ, формирования страницы на клиенте с помощью xslt (это язык шаблонизатор для получения html), а сервер отправляет xml файл с данными. Можно упороться и реализовать все на таких шаблонах, что они не будут требовать javascript но работать все будет на стороне клиента с очень эффективной тратой ресурсов как сервера так и сети.