Как сервер передает страницы?
Да, по протоколу HTTP/HTTPS, и, как правило, в виде HTML. Бройзер делает GET-запрос и получает данные.
Так же передаются по тому же HTML вспомогательные файлы - CSS, JS-скрипты, картиночки.
Рональд Макдональд все верно написал, дополню:

Страницы, а точнее данные можно передавать по другим протоколам, например ftp, а в локальной сети  можно даже открывать по протоколу smb (только windows) или даже локальные файлы (file:///путь_к_html)), но на сколько я знаю для вопросов безопасности, по умолчанию миксить разные режимы, включая https и http запрещается (если стартовая страница http то наверное можно, но скоро все браузеры начнут громко предупреждать что это плохо, пока только сверху намекают)

Данные можно передавать не только штатным http но и с помощью его расширения websocket, в этом случае можно так же слать сообщения наоборот, от клиента к серверу.

Так же есть протокол webrtc, который позволяет вспомогательные данные загружать/передавать не с/на сервер, а с другими пользователями веб сайта p2p, режим не простой (не все одинаково поддерживают по стандарту), блокируется некоторыми неадекватными (к сожалению многими, например мобильными) провайдерами, но он есть и позволяет неплохо экономить на сетевом трафике для тяжелого медиаконтента.

И в догонку, браузеры позволяют приложениям регистрировать свои протоколы, но работает это фактически либо как обычный http с подменой либо как запуск стороннего приложения, так же нельзя смешивать разные протоколы на одной странице.

p.s. еще есть интересный стандарт data uri, позволяет размещать контент элемента прямо в адресной строке
data:text/html;charset=utf-8;base64,SGVsbG8gPHNjcmlwdD5hbGVydCgnd29ybGQnKTs8L3NjcmlwdD4=
так же это работает для любых элементов на странице, можно даже картинки так вставлять, только не эффективно

p.p.s. совсем добавлю, еще есть протокол chrome:// или moz-extension:// для доступа к элементам расширений браузера, но тут нет стандарта