использования, и авторы браузера Mosaic основали компанию Netscape, чтобы
писать коммерческие веб-приложения. Компания Netscape стала достоянием обще-
ственности как часть возникшего в то время интернет-безумия, и взрывной рост
Всемирной паутины не остановился до сих пор.
Практически каждый язык программирования был использован для написания
веб-клиентов и веб-серверов. Динамические языки Perl, PHP и Ruby стали особен-
но популярными. В этой главе я покажу вам, почему Python является особенно
хорошим языком для работы в Интернете на любом из следующих уровней:
клиенты для удаленного доступа;
серверы, предоставляющие данные для сайтов и веб-API;
веб-API и сервисы, позволяющие обмениваться данными другими способами,
отличающимися от просматриваемых веб-страниц.
Выполняя упражнения в конце главы, мы создадим настоящий интерактивный
сайт.
Веб-клиенты
Низкоуровневая система проводящих путей Интернета называется Transmission
Control Protocol/Internet Protocol (протокол управления передачей/интернет-
протокол), или просто TCP/IP (в подразделе «TCP/IP» раздела «Сети» главы 11
этот протокол рассматривается более подробно). Он перемещает байты между ком-
пьютерами, но не обращает внимания на то, что они значат. Это работа высокоуров-
невых протоколов — определений синтаксиса для некоторых целей. HTTP — это
стандартный протокол для обмена данными в Сети.
Всемирная паутина — это клиент-серверная система. Клиент делает запрос
серверу: он открывает соединение TCP/IP, отправляет URL и другую информацию
с помощью HTTP и получает ответ.
Формат ответа также определяется протоколом HTTP. Он включает в себя
статус запроса и (в том случае, если запрос выполнен успешно) данные и формат
ответа.
Самый известный веб-клиент — это браузер. Он может создавать HTTP-запросы
несколькими способами. Вы можете инициировать запрос вручную, написав URL
в адресной строке или щелкнув на ссылке на веб-странице. Очень часто для ото-
бражения сайта используются возвращаемые данные: HTML-документы, файлы
JavaScript, файлы CSS и изображения, — но данные могут быть любого типа, в том
числе и не предназначенные для отображения.
Важный аспект HTTP — этот протокол не имеет состояния. Каждое создаваемое
вами соединение HTTP не зависит от других. Это упрощает базовые операции, но
усложняет другие. Рассмотрим несколько примеров таких усложнений.
Кэширование. Удаленный контент, который не меняется, должен быть сохранен
веб-клиентом и использован для того, чтобы не загружать его с сервера снова.
Веб-клиенты
259
Сессии. Интернет-магазин должен запоминать содержимое вашей корзины.
Аутентификация. Сайты, которые требуют ваши имя пользователя и пароль,
должны запоминать их, пока вы авторизованы.
Решения для этих усложнений включают в себя cookie, в которых сервер от-
правляет клиенту довольно специфическую информацию, позволяющую их рас-
познать, когда клиент отправляет cookie назад.
Тестируем с telnet
HTTP — это протокол, основанный на тексте, поэтому вы можете вручную вводить