Alex P
Подскажите, на собеседованиях пару раз спрашивали рассказать - как сервер (рубишный) отвечает на запрос браузера.
На уточнение - насколько детально рассказывать? сошлись, что TCP не надо, а вот HTTP, DNS и т.д. - просили.
В целом механизм понимаю, но что-бы все по полочкам разложить - хочется почитать что-то на эту тему, а по каким терминам гуглить - не представляю. Знаете какую нибудь статью хорошую, или слова ключевые?
#хороший_вопрос
Сначала браузер резолвит URL в IP адрес сервера, получая эту информацию от службы DNS провайдера (или третьей стороны типа Google). Запрос отправляется на полученный адрес. Там его встречает web-server — это программа (nginx самый известный пакет такого типа), которая висит на 80 порту (443, если используется шифрование) и принимает входящие запросы. Далее эта программа перекидывает входящие запросы по заранее сконфигурированным правилам, в нашем случае на требуемый application-server (здесь обычно используется puma, раньше был популярен unicorn). Это уже часть Rails. В рельсах сырой запрос сначала обрабатывается гемом rack, он из входящего запроса создает сложную структуру и передает ее для дальнейшей обработки. Здесь rack является middleware. Далее запрос обрабатывается маршрутизатором по правилам из файла routes.rb. Здесь rails определяет, в какой контроллер и какой action нужно направить запрос. Контроллер определяется из запрашиваемого URL, action на основании комбинации HTTP метода и URL. После управление переходит в выбранный контроллер, в соответствующий метод (action), который в свою очередь рендерит ответ (JSON или HTML, например) и отдает его клиенту (обратно через application-server и web-server).