Простой Python. Современный стиль программирования (Любанович) - страница 149

• Сессии. Интернет-магазин должен запоминать содержимое вашей корзины.

• Аутентификация. Сайты, которые требуют ваши имя пользователя и пароль, должны запоминать их, пока вы авторизованы.

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

Тестируем с telnet

HTTP — это протокол, основанный на тексте, поэтому вы можете вручную вводить его код во время тестирования. Древняя программа telnet позволяет вам подключиться к любому серверу и порту и вводить команды.

Запросим у любимого многими тестового сайта Google базовую информацию о его домашней странице. Введем следующее:

>$ telnet www.google.com 80

Если на порте 80 по адресу google.com существует веб-сервер (я думаю, что это беспроигрышный вариант), telnet выведет на экран подтверждающую информацию, а затем отобразит пустую строку, которая является приглашением ввести что-то еще:

>Trying 74.125.225.177…

>Connected to www.google.com.

>Escape character is '^]'.

Теперь введем настоящую команду HTTP для telnet, которую он отправит на веб-сервер Google. Самая распространенная команда HTTP (ее использует ваш браузер каждый раз, когда вы вводите URL в адресной строке) — это GET. Она позволяет получить содержимое заданного ресурса вроде HTML-файла и возвращает его клиенту. Для первой проверки мы используем команду HTTP HEAD, которая просто получает некую базовую информацию о ресурсе:

>HEAD / HTTP/1.1

Конструкция HEAD / отправляет запрос HTTP HEAD глагол (команда), чтобы получить информацию о домашней странице (/). Добавьте дополнительный символ возврата каретки, чтобы отправить пустую строку, тогда удаленный сервер будет знать, что вы закончили и ждете ответа. Вы получите ответ вроде следующего (мы обрезали некоторые длинные строки с помощью многоточий, чтобы они не вываливались за пределы страницы):

>HTTP/1.1 200 OK

>Date: Sat, 26 Oct 2013 17:05:17 GMT

>Expires: -1

>Cache-Control: private, max-age=0

>Content-Type: text/html; charset=ISO-8859-1

>Set-Cookie: PREF=ID=962a70e9eb3db9d9:FF=0:TM=1382807117:LM=1382807117:S=y…

>··expires=Mon, 26-Oct-2015 17:05:17 GMT;

>··path=/;

>··domain=.google.com

>Set-Cookie: NID=67=hTvtVC7dZJmZzGktimbwVbNZxPQnaDijCz716B1L56GM9qvsqqeIGb…

>··expires=Sun, 27-Apr-2014 17:05:17 GMT

>Web Clients··|··219··path=/;

>··domain=.google.com;

>··HttpOnly

>P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts

>Server: gws

>X–XSS-Protection: 1; mode=block

>X-Frame-Options: SAMEORIGIN

>Alternate-Protocol: 80:quic