Ключевые аспекты разработки на Python
Теория: HTTP
Популярный вопрос на собеседовании веб-разработчиков часто звучит так: «Что происходит после того, как в браузер ввели адрес сайта?». Подробный ответ на этот вопрос можно найти здесь. Главное, что хочет услышать собеседующий — ваш уровень понимания HTTP (Hyper-Text Transferring Protocol).
Протокол — это набор соглашений, правил, по которым разные программы могут обмениваться информацией. HTTP — это набор правил, который известен и вашему компьютеру и физически отдаленному компьютеру. С помощью него общаются браузер и веб-сервер:
Веб-сервер — программа, установленная на сервере и обслуживающая входящие соединения, например, от браузеров. В рамках такого соединения от браузера передается информация о том, какую страницу и какого сайта мы хотим загрузить, а веб-сервер возвращает браузеру содержимое страницы этого сайта.
Пример HTTP-сессии «запрос-ответ» через программу curl:
Технологию http нужно не просто знать. Важно еще и уметь делать сырые http-запросы — не косвенно через браузер, а самостоятельно, эмулируя поведение браузера. Для этой задачи используют программу telnet. На Хекслете есть соответствующий курс — там вы всему и научитесь.
Для чего требуется знание http?
Протокол http применяется для множества различных задач:
- В работе с формами, при загрузке файлов и при перенаправлении
- Для аутентификации (она целиком зависит от http)
- Для извлечения информации о запросе (например, определения браузера, из которого был выполнен запрос)
- Для увеличения производительности и кеширования
https
Помимо http, в сети все большее распространение получает https. Каждый пользователь сети должен знать, что нельзя выполнять действия, связанные с любыми секретными данными (например, кредитками), на страницах, работающих по протоколу http. В таком случае любой человек, имеющий доступ к оборудованию, которое лежит между вами и сервером, обслуживающим сайт, сможет прочитать эти данные. Обратите внимание, что на популярных сайтах страницы оплаты всегда отдаются по https. В свою очередь, умение работать с https сразу добавляет новые понятия:
- Шифрование, асимметричное шифрование
- Сертификаты
- Цифровая подпись
TCP/IP
Но одним http обойтись не получится. Дело в том, что http существует не сам по себе, а поверх стека протоколов TCP/IP. Базовое знание сетей важно по следующим причинам:
- Для безопасности. Без базовых знаний легко совершить ошибку и быть взломанным
- Для отладки. Даже с малейшими проблемами в работе сайтов сложно справиться без базовых знаний о сетях. Так происходит потому, что немалая часть вопросов запуска и конфигурирования сайтов связана с сетевыми сокетами
DNS
Еще один столп веба — DNS, служба доменных имен. Представьте, что мы вбиваем адрес в браузер. В этот момент браузер выполняет DNS-запросы к соответствующим серверам и пытается выяснить, к какому ip-адресу принадлежит сайт. Дело в том, что соединение с сервером идет не по HTTP, а по tcp/ip. HTTP начинает работать уже после того, как было установлено tcp соединение. Знание DNS помогут:
- Привязать домен к серверу
- Настраивать почту для домена
- Верифицировать проект различными сервисами
- Быстрее и эффективнее проводить отладку, ведь нередко проблемы загрузки связаны с DNS
Как учить
Тема сетей достаточно подробно раскрыта в книгах по операционным системам. В списке рекомендуемых книг Хекслета есть как минимум одна такая.