Step 5 (S-44770)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14826/step/5

Step 5 (S-44770) 1.png

[00:00 - 00:14] итак протокол с жаль возник очень давно где была следующее у нас есть сервер который умеет отдавать именно отдавать файлы с диска то есть возвращает клиенту мы хотим а


[00:14 - 00:31] легкий и простой способ получить динамическую генерацию веб страниц а что нужно сделать нужно вместо того чтобы эти файлы отдавать их запускать то есть файлы должны быть программ а мы запускает эту программу


[00:31 - 00:50] программа сама решает что нужно вернуть использовать а здесь перечислено соглашения протоколы то есть для того чтобы запустить программу запустить любую программу то не проблема а проблема в том


Step 5 (S-44770) 2.png

[00:50 - 01:08] как передать информацию текущий запрос он разобрал запрос у него есть информация о текущем запрос ее нужно как то передать в программ а потом из программы получить от тебя ответ а себя используют следующие соглашения


[01:08 - 01:25] не этот запрос query string то есть аргументы которые идут в руле а сам путь к файлу все заголовки которые есть в запросе передаются через переменные окружения


[01:25 - 01:44] переменная окружения это механизм операционной системы когда программа запускается ей можно передать а произвольный набор строк которое называют с переменными окружения


[01:44 - 02:02] вот через эти переменные окружения в программу и передается вся информация по запросу а тело запроса может быть очень большим поэтому его нельзя передавать через переменную его нужно передавать через file handle


[02:02 - 02:21] то есть через файл тело запроса программу передаются через файловый дескриптор то есть для программы cgi скрипта а тело запроса это то что находится в стандартном потоки воды а оттуда можно читать кусочками либо все сразу


[02:21 - 02:39] зависимости от лодки теперь как ася javascript возвращает данные заголовки и тело ответа возвращается через 100 да вот это да стандартный поток вывода у программы то есть программа грубо говоря просто печатает на вывод


[02:39 - 02:56] а все заголовки и тело ответа а причем заголовок от ответа то есть 200 oc либо а там 404 not found передается через специальный заголовок статус


[02:56 - 03:11] этот заголовок не уходит клиент он образуется а вот ответ и соответственно все что программа выведет в поток ошибок то есть


[03:11 - 03:29] если мы говорим про какие то и динамические языки программирования любой exception которой будет выброшен он попадет в дарах и весь вывод программы которые было направляет в лог ошибок сервера то сидиром а все


[03:29 - 03:45] соглашение себя исчерпывается это позволяет программу а используют в качестве веб приложения главное чтобы эта программа анализировала входящая


[03:45 - 04:04] а переменной окружения и выводила пострадал от код страниц как мы видим соглашение очень простое а потому оно было популярно некоторое время назад но у данного протокола протокол все же есть существенный недостаток


Step 5 (S-44770) 3.png

[04:04 - 04:23] а давайте рассмотрим что происходит на схеме а у нас есть клиент который отправляет запрос серверу но мы будем считать что он проксируется через фронтэнд серы в конце концов выпадают аппликейшен серверов


[04:23 - 04:39] сервер а понимает что данный запрос должен быть обработан каким то конкретным скриптом возможно что он запускает всегда 1 и тот же скрипт и он пишет сервер запускает программу


[04:39 - 04:59] программа запустилась а данные передаются через 100 дней в зависимости от того что это была за программа нужно предпринять а для запуска программ вот понимаешь разные действия как минимум программ нужно прочитать диск


[04:59 - 05:18] если это была программа если это исполняемый файл то есть бинарный то в принципе он запускается все хорошо если это скрипт каком нибудь экзотическом языке например напали то запуск программы происходит долго может происходить секунду пока запускается интерпретатор python


[05:18 - 05:37] пока он читает код самого cgi скрипта самой программы а пока о происходит загрузка всех связанных библиотек это могут быть десятки и сотни файлов пока cgi скрипт устанавливает какие то подключения к базе данных


[05:37 - 05:52] на это уходит время а скрипт возвращает ответ и останавливается то есть программа завершается в результате в чем проблема в том что на каждую что тебе запрос происходит запуск


[05:52 - 06:09] программы полное ее инициализация и установка установка всех необходимых соедини это долго то есть во 1 это работает долго а во 2 при большом количестве запросов очень сильно повышает нагрузку на сердце это общем то


[06:09 - 06:26] пьес на такая критическая проблема которую нужно как то решать но тем не менее само соглашение очень простой позволяет вам писать приложения практически на любом языке а давайте посмотрим какие переменные окружения


Step 5 (S-44770) 4.png

[06:26 - 06:44] передаются программе переменной важны потому что они сохраняются и в протоколах которые произошли то есть наследник протокол а переменной окружения с именем request метод


[06:44 - 07:01] в не передается метод запроса например или post а переменной окружения передает сэ часть фрагмента которой является путем


[07:01 - 07:18] то есть после имени сервера а до имя файла например там где нибудь документ 10 вот это post for a


[07:18 - 07:35] в принципе может либо для разных путей вызывать разные скрипты либо всегда вызывать 1 и тот же скрипт вот если всегда вызывается 1 и тот же скрипт как точку входа точка входа в программу тогда этот скрипт должен анализировать инфу


[07:35 - 07:50] и а дальше смотреть какой обработчик вызывать код и стринг содержатся то что написано после знака вопрос а равняется 1


[07:50 - 08:07] б равняется 2 а это основной способ передачи передача параметров привет запросит способ передачи параметров scripts поэтому эта переменная так же важна стремянный ремонта содержится адрес пользователя


[08:07 - 08:22] переменные content length длина тела запроса а чтобы скрипт знал сколько данных нужно читать из ступеней а для каждого степи заголовка создается своя переменная окружения


[08:22 - 08:39] примеру заголовок называется куки переменная окружения называется что теперь таки а в верхнем регистре если у вас есть какой то заголовок тени северный то переменной окружения будет называться что теперь это щедрой


[08:39 - 08:51] это позволяет передавать все заголовки внутрь а внутрь себя скрипта вот общем то в этом заключается протокол