Слайд 1Web-программирование
Лекция 7. HTTP. Django.
асист. каф. 308 Трутнева Надежда Владимировна
тел: 8-926-880-12-76
почта:
ntrutn@gmail.com
Слайд 2Модели сетевого взаимодействия
Данные
Заголовок + данные HTTP
Заголовок + данные + адресат TCP
(деление на
фрагменты)
Заголовок + данные + адресат IP
(адрес устройства)
(деление на фрагменты)
Преобразование к формату
среды передачи данных (сигналы)
Wi-fi/Ethernet/FastEthernet
Слайд 3URI, URL, URN
URI (Uniform Resource Identifier) — унифицированный (единообразный) идентификатор
ресурса.
URI — последовательность символов, идентифицирующая абстрактный или физический ресурс. Ранее
назывался Universal Resource Identifier — универсальный идентификатор ресурса.
URI — символьная строка, позволяющая идентифицировать какой-либо ресурс:
документ,
изображение,
файл,
службу,
ящик электронной почты и т. д.
Слайд 4URI, URL, URN
URL — это URI, который, помимо идентификации ресурса,
предоставляет ещё и информацию о местонахождении этого ресурса.
URN —
это URI, который только идентифицирует ресурс в определённом пространстве имён (и, соответственно, в определённом контексте), но не указывает его местонахождения.
urn:ISBN:0-395-36341-1 — это URN, который указывает на ресурс (книгу) 0-395-36341-1 в пространстве имён ISBN, но, в отличие от URL, URN не указывает на местонахождение этого ресурса: в нём не сказано, в каком магазине её можно купить или на каком сайте скачать
Слайд 5структура URI
URI = [ схема ":" ] иерархическая-часть [ "?"
запрос ] [ "#" фрагмент ]
схема
схема обращения к ресурсу (часто
указывает на сетевой протокол), например http, ftp, file, ldap, mailto, urn
иерархическая-часть
содержит данные, обычно организованные в иерархической форме, которые, совместно с данными в неиерархическом компоненте запрос, служат для идентификации ресурса в пределах видимости URI-схемы. Обычно иер-часть содержит путь к ресурсу (и, возможно, перед ним, адрес сервера, на котором тот располагается) или идентификатор ресурса (в случае URN).
запрос
этот необязательный компонент URI описан выше.
фрагмент
(тоже необязательный компонент)
Слайд 6РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
Регулярные выражения (англ. regular expressions) — формальный язык поиска
и осуществления манипуляций с подстроками в тексте, основанный на использовании
метасимволов. Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.
Слайд 7Структура регулярного выражения
Как правило, регулярное выражение состоит из трёх основных
частей:
1. Якорь – определяет позицию шаблона в строке текста:
^ –
якорь, определяющий начало строки;
$ – якорь, определяющий конец строки.
2. Набор (последовательность) символов – для поиска соответствий в заданных позициях строки текста:
символ "точка" (.) соответствует любому произвольному символу;
алфавитно-цифровые символы и пробел представляют сами себя;
прочие символы – интерпретация зависит от диалекта.
3. Модификатор – задаёт количество повторов предыдущего символа или набора символов (в зависимости от диалекта):
* – любое количество повторов символа/набора, в том числе и нулевое;
? – соответствует нулю или одному экземпляру символа/набора;
+ – соответствует одному или большему количеству экземпляров символа/набора.
Слайд 8Структура регулярного выражения
Пример:
необходимо найти все директивы определения макроконстант в
исходном коде на языке С.
grep '^ *#define.*' *.c *.h
Здесь учтено,
что в начале строки макроопределения может быть вставлено любое количество пробелов или же пробелы отсутствуют. Часть шаблона #define является литеральной, т.е. каждый символ интерпретируется "как есть". Заключительная часть шаблона означает "любые символы в любых количествах".
Слайд 9Определение диапазонов символов
Если возникает необходимость задать символ из определённой группы,
например, только цифровой символ, или только гласную букву нижнего регистра,
или только символы пунктуации, то используются квадратные скобки, внутри которых определяются требуемые символы.
[012345789] – соответствует одному цифровому символу из заданного набора;
[аеёиоуыэюя] – соответствует одной из перечисленных гласных букв;
[,.:;] – соответствует одному из символов пунктуации.
Слайд 10Определение диапазонов символов
Непрерывные диапазоны символов можно записывать в сокращённой форме
с использованием дефиса: первый пример удобнее записать в виде [0–9].
Допускаются любые сочетания диапазонов и конкретных символов.
Имеется также возможность исключать заданные наборы символов из поиска:
[^0-9] – соответствует любому символу, кроме цифрового;
[^аеёиоуыэюя] – соответствует любой НЕ гласной букве.
Слайд 11Модификаторы количества повторений символов
Поиска IP-адреса:
[0-9]*\.[0-9]*\.[0-9]*\.[0-9]
Это приведёт к выводу строк,
содержащих элементы типа 2344.5657.11.00000, не являющихся IP-адресами.
Для уточнения количества
повторений наборов символов применяется модификатор \{min,max\}.
В каждой части IP-адреса может содержаться от одной до трёх цифр, следует учесть, что значение 0 не используется в качестве первого байта обычных IP-адресов. В итоге получим следующий шаблон поиска:
grep '[1-9][0-9]\{0,2\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' *.txt
Слайд 12Запоминание и повторное использование элемента шаблона
В простых регулярных выражениях части
шаблона, заключённые внутри конструкции \( \), запоминаются и нумеруются, после
чего их можно использовать повторно.
Всего можно запомнить до девяти пронумерованных шаблонов.
Пример. Поиск палиндромов (слов, которые одинаково читаются как слева направо, так и справа налево):
\([a-z]\)\([a-z]\)[a-z]\2\1 – для пятибуквенных палиндромов (например, level, rotor, madam и т.д.)
\([a-z]\)\([a-z]\)\([a-z]\)\3\2\1 – для шестибуквенных палиндромов (например, redder, succus, terret и т.д.)
Слайд 13Полезные регулярные выражения
Поиска денежной суммы, записываемой в формате "10000 руб.
00 коп."
[0-9]\{1,\} руб\. [0-9]\{2\} коп\.
Необходимое пояснение: если в модификаторе типа
\{min,max\} отсутствует и запятая, и максимальное значение, то такая конструкция задаёт точное количество ожидаемых повторов элемента шаблона. В нашем примере определяются ровно два цифровых символа для обозначения копеек.
Слайд 14Полезные регулярные выражения
Поиск URL-строки, соответствующей Web-ресурсу в Интернете:
http://[a-zA-Z0-9]\{1,\}\.[-a-zA-Z0-9_]\{1,\}/*
Необходимое пояснение: дефис
теряет своё специальное значение, если он указан в самой первой
позиции сразу после открывающей квадратной скобки в диапазоне. По данному шаблону могут быть найдены и такие "экзотические" URL-строки, как, например, http://my.home-server/
В формате расширенных регулярных выражений этот шаблон можно было бы записать более компактно:
http://[a-zA-Z0-9]+\.[-a-zA-Z0-9_]+/*
Такую запись понимают, например, утилиты egrep и awk.
Слайд 15Полезные регулярные выражения
Поиск любого HTML-тэга:
]+>
Совпадает с любой последовательностью символов за
исключением > в количестве от одного и более, заключённой в
угловые скобки. Иными словами, будет найден и односимвольный тэг
, и более "многословные" тэги, подобные
.
Слайд 16Полезные регулярные выражения
Вариант шаблона для поиска дат
Расширенные регулярные выражения позволяют
написать несколько громоздкий, но тем не менее корректно работающий шаблон
для поиска дат, имеющих вид "13 ноября 2009 г.":
[12]?[0-9] (янв|фев|мар|апр|мая|июн|июл|авг|сен|окт|ноя|дек).* [0-9][0-9][0-9][0-9] г\.
Недостаток этого шаблона заключается в том, что с его помощью невозможно найти даты из древней истории, например, "13 ноября 245 г." или 1 января 88 г.", но для работы с современными документами он вполне годится (учитываем контекст поиска!).
Слайд 17Полезные регулярные выражения
Поиск палиндромов в любых языков
\(.\)\(.\)\(.\)\3\2\1
С помощью такого шаблона
можно находить шестисимвольные палиндромы не только на английском, но и
на русском и на любых других языках, а также последовательности символов, не относящихся к алфавитным, например /*!!*/
Слайд 18Полезные регулярные выражения
Поиск ошибок в текстах, как "для для".
\
\
Здесь применяются ещё два элемента регулярных выражений: \< для обозначения
начальной границы слова и \> для обозначения конечной границы слова. Таким образом, мы запоминаем только отдельные слова, а не любые последовательности символов. Выражение ..* соответствует любому слову, состоящему по крайней мере из одного символа. В результате мы сможем найти такие опечатки-повторения, как "и и", "не не", "для для" и т.п.
Слайд 19Ограничение размера совподающей части шаблона
"Петров" "охранник"
"Иванов" "отдел снабжения" "экспедитор"
"Сидоров" "администрация"
"директор"
".*"
".*" ".*"
”[^”]*”
Здесь после открывающей кавычки должно следовать любое количество символов,
не являющихся кавычками, до тех пор, пока не встретится завершающая эту последовательность кавычка.
Слайд 20Python. Регулярные выражения.
Регулярные выражения компилируются в объекты шаблонов, имеющие методы
для различных операций, таких как поиск вхождения шаблона или выполнение
замены строки.
Слайд 21Python. Регулярные выражения.
Объекты шаблонов имеют несколько методов и атрибутов.
http://docs.python.org/howto/regex.html
Слайд 22НТТP-протокол
HyperText Transfer Protocol (HTTP) - это протокол высокого уровня, обеспечивающий
необходимую скорость передачи данных, требующуюся для распределенных информационных систем гипермедиа.
HTTP используется проектом World Wide Web с 1990 года.
HTTP основывается на парадигме запросов/ответов. Запрашивающая программа (обычно она называется клиент) устанавливает связь с обслуживающей программой-получателем (обычно называется сервер) и посылает запрос серверу в следующей форме: метод запроса, URI, версия протокола, за которой следует MIME-подобное сообщение (MIME-Многоцелевое Расширение Почты Internet), содержащее управляющую информацию запроса, информацию о клиенте и, может быть, тело сообщения. Сервер отвечает сообщением, содержащим строку статуса (включая версию протокола и код статуса - успех или ошибка), за которой следует MIME-подобное сообщение, включающее в себя информацию о сервере, метаинформацию о содержании ответа, и, вероятно, само тело ответа.
Слайд 23НТТP-протокол
Каждое HTTP-сообщение состоит из трёх частей, которые передаются в указанном
порядке:
Стартовая строка (Starting line) - определяет тип сообщения;
Заголовки (Headers) -
разная полезная информация, которая характеризует тело сообщения, параметры передачи и прочие сведения;
Тело сообщения (Message Body) - это сгенерированный html-код, который браузер потом будет отображать. Обязательно должно отделяться от заголовков пустой строкой.
Слайд 26НТТP-протокол. Методы.
Метод HTTP (англ. HTTP Method) — последовательность из любых
символов, кроме управляющих и разделителей, указывающая на основную операцию над
ресурсом. Обычно метод представляет собой короткое английское слово, записанное заглавными буквами. Названия метода чувствительны к регистру.
Слайд 32НТТP-протокол. Код состояния.
Код состояния информирует клиента о результатах выполнения запроса
и определяет его дальнейшее поведение. Набор кодов состояния является стандартом,
и все они описаны в соответствующих документах.
Каждый код представляется целым трехзначным числом. Первая цифра указывает на класс состояния, последующие - порядковый номер состояния. За кодом ответа обычно следует краткое описание на английском языке.
Слайд 38НТТP-протокол. Заголовки.
Заголовок HTTP (HTTP Header) — это строка в HTTP-сообщении,
содержащая разделённую двоеточием пару вида «параметр-значение». Как правило, браузер и
веб-сервер включают в сообщения более чем по одному заголовку. Заголовки должны отправляться раньше тела сообщения и отделяться от него хотя бы одной пустой строкой (CRLF).
Слайд 39НТТP-протокол. Заголовки.
Все HTTP-заголовки разделяются на четыре основных группы:
General Headers (Основные
заголовки) — должны включаться в любое сообщение клиента и сервера.
Request
Headers (Заголовки запроса) — используются только в запросах клиента.
Response Headers (Заголовки ответа) — присутствуют только в ответах сервера.
Entity Headers (Заголовки сущности) — сопровождают каждую сущность сообщения.
Сущности (entity, в переводах также встречается название "объект") — это полезная информация, передаваемая в запросе или ответе. Сущность состоит из метаинформации (заголовки) и непосредственно содержания (тело сообщения).