1 (1119426), страница 2

Файл №1119426 1 (И.Г. Головин - Практикум на ЭВМ. Модельный веб-сервер) 2 страница1 (1119426) страница 22019-05-09СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Сейчас используются версии HTTP-протокола 1.0 и1.1.Структура URI описана выше.HTTP-метод определяет семантику запроса к серверу. Веб-серверобязан поддерживать только два метода: GET и HEAD. Для простотымодельный сервер будет поддерживать только их.Метод GETЭтот метод используется для запроса содержимого ресурса ссервера. Файл ресурса определяется URI из запроса. Если URI корректен,то сервер обязан вернуть содержимое запрашиваемого файла, если этофайл данных.

Если же файл – это CGI-программа, то она запускается, ейпередаются параметры запроса из URI (они отделяются знаком вопроса), исервер возвращает клиенту сгенерированный программой текст.Тело запроса для метода GET пусто.Недостатком метода GET является то, что параметры запроса явнопередаются в адресной строке браузера и могут быть видны пользователю.Если параметры запросы включают приватную или конфиденциальнуюинформацию (пароли, коды доступа и т.п.), то это может бытьнеприемлемо.

Поэтому часто вместо метода GET используется методPOST, в заголовке которого URI не содержит параметров. Вместо этогопараметры запроса передаются в теле сообщения. В модельном вебсервере поддержка метода POST не обязательна.Примеры заголовков запроса GET:GET /index.html HTTP/1.1По этому запросу сервер возвращает текст файла index.html издомашней директории сервера.7GETHTTP/1.1/cgi-bin/testcgi?name=igor&surname=golovin&mail=igolovinПо этому запросу сервер запускает программу cgi-bin/testcgi, передавей параметры запроса через переменную окружения.

Сгенерированныйпрограммой текст включается сервером в ответ клиенту (подробнее обэтом см. ниже в разделе «Общий шлюзовой интерфейс»).Особым случаем запроса GET является случай, когда URI несодержит пути к ресурсу (а только адрес сайта). Например, пользовательможет набрать в адресной строке браузера:http://www.mysite.ru(заметим, что это типичный случай начала веб-серфинга).Браузер сгенерирует следующий заголовок запроса:GET / HTTP/1.1Веб-сервер по этому запросу должен показать т.н.

главную страницусайта – страницу по умолчанию. Будем считать, что модельный серверпокажет в этом случае страницу с именем index.html из домашнейдиректории сервера.Метод HEADМетод HEAD аналогичен методу GET с той разницей, чтоактуальное содержимое ресурса не передается клиенту. Сервер генерируетответ, содержащий только заголовок ответа и HTTP-заголовки (тело ответаотсутствует). Метод HEAD используется веб-клиентами (браузерами) дляпроверки существования ресурса, извлечения метаданных (через HTTPзаголовки) и т.д.

Кроме того метод позволяет выяснить, не изменился лиресурс со времени последнего обращения к нему. Это очень важно, так какпозволяет обеспечить кэширование ресурсов.Дело в том, что по стандарту HTTP-протокола метод GET считается«идемпотентным», то есть выдающим одинаковые результаты наодинаковые запросы (при условии неизменности ресурса). Дата и времяобновления ресурса указываются в ответе сервера на методы GET/HEAD(в HTTP-заголовке Last-modified).

Поэтому браузер имеет возможностьсохранить ресурс локально при первом обращении к нему и припоследующих обращениях использовать эту копию без настоящей закачкив случае, если ресурс не изменился. А выяснить неизменность ресурса ипомогает метод HEAD.8HTTP-ответОтвет веб-сервера имеет следующую структуру:<заголовок ответа> <конец строки><HTTP- заголовок > <конец строки>…<HTTP- заголовок > <конец строки>< конец строки ><тело ответа>Заголовок ответа выглядит так:HTTP/<версия протокола> <код состояния> <пояснение>Версия протокола – то же самое, что и в HTTP-запросе.

Модельныйсервер для простоты поддерживает версию 1.0.Код состояния – десятичное число (три арабских цифры),характеризующее дальнейшее сообщение и определяющее реакциюклиента.Пояснение – короткая необязательная строка, содержащая пояснениек коду состояния. Нужна только для облегчения анализа ответа человеком.Веб-сервер генерирует ответ на любой запрос веб-клиента.В случае, если метод в запросе не поддерживается сервером, топоследний должен вернуть код состояния 501 (пояснение – Notimplemented). При этом в ответ должен включаться HTTP-заголовок Allow,содержащий список допустимых методов (описание заголовков,поддерживаемых модельным сервером см. ниже).Если же метод поддерживается сервером (т.е.

это GET или HEADдля модельного сервера), и файл, идентифицируемый URI, допустим идоступен, то сервер выдает ответ с кодом состояния 200 (Ok). Текст файларесурса включается в ответ как тело ответа, при этом в ответ должнывключаться заголовки Content-type, определяющий тип содержимогоресурса (см. ниже), и Content-length, содержащий длину тела в байтах.Вообще говоря эти заголовки должны включаться в ответ всегда, когда онсодержит тело (а не только заголовки).И, наконец, возможен случай (весьма частый!), когда указанный взапросе ресурс не найден. В этом случае выдается ответ с кодом статуса404 (Not found).

При этом сервер должен вернуть более развернутое, чемNot found, гипертекстовое пояснение в теле ответа (правда, в случаеметода HEAD этого делать не надо).Ниже приводится информация о всех кодах состояния,возвращаемых модельным веб-сервером, и соответствующий списокзаголовков (о самих заголовках – см. ниже).9Коды состояния, возвращаемые модельным серверомКоды состояния разбиваются на пять групп (номер группы – перваяцифра кода).•100–199- Информация. Модельный сервер их неподдерживает.•200–299- Успех.

Сервер возвращает такие ответы в случаеуспешной и безошибочной обработки запроса.•300-399- Перенаправление. Модельный сервер их неподдерживает.•400-499- Ошибка клиента. Ответы информируют обошибках в запросе. Для всех методов кроме HEAD сервер долженвернуть в теле ответа развернутое гипертекстовое сообщение обошибке, которое клиент-браузер должен показать пользователю.• 500-599- Ошибка сервера. Ответы информируют об ошибках повине сервера.

Также, как и в случае четвертой группы, в теле ответасодержится гипертекстовое сообщение об ошибке.В нижеследующей таблице перечислен минимальный набор кодовсостояния, возвращаемых модельным веб-сервером.Код состояния Смысли пояснение200 OKЗапрос ресурса успешен400 BadrequestСинтаксическая ошибка в запросе403 ForbiddenЗапрос ресурса, который недоступенклиенту404 Not FoundЗапрос несуществующего ресурса500 InternalServer ErrorЛюбая ошибка сервера, которая невходит в список ошибок 5 класса10HTTP-заголовкиDate, Server,Content-type-дляGET, Contentlength – для GET,Last-modified,тело – для GETDate, Server,Content-type,Content-length,телоDate, Server,Content-type,Content-length,телоDate, Server,Content-type,Content-length,телоDate, Server,Content-type,Content-length,тело501 NotImplementedСервер не имеет возможностиобработать запрос (например, неподдерживает метод)503 ServiceUnavailableСервер временно не имеетвозможности обработать запрос(например, из-за нехваткисистемных ресурсов, перегрузки ит.п.)Date, Server, Allow,Content-type,Content-length,телоDate, Server,Content-type,Content-length,телоHTTP-заголовокКаждый HTTP-заголовок представляет собой строку вида:<имя заголовка> : <значение>Двоеточие должно следовать сразу за именем заголовка.

Значениеможет содержать произвольные символы, кроме \n (перевод строки) и \r(возврат каретки).Заголовки делятся на 4 группы:••••Основные заголовки – должны входить в любой запрос и ответ;Заголовки запроса – входят только в запрос от клиента;Заголовки ответа – входят только в ответ сервера;Заголовки сущности – сопровождают каждую сущность запроса илиответаМодельный сервер поддерживает следующие заголовки:Основные – DateЗапрос – Host, Referer, User-agentОтвет – ServerСущности – Content-length, Content-type, Allow, Last-modifiedЗаголовок DateЗаголовок Date содержит дату генерации сообщения.

Формат даты,поддерживаемый модельным веб-сервером:Www, dd Mmm YYYY hh:mm:ss GMTОбратите внимание, что время указывается по Гринвичу(GMT).Здесь:Www – первые три буквы дня недели (по-английски), например,Wed;11dd - день (две цифры);Mmm – первые три буквы названия месяца (по-английски),например, Apr;YYYY – год (четыре цифры);hh:mm:ss – часы, минуты, секунды, соответственно (две цифры).Пример:Date: Wed, 01 Apr 2009 21:00:05 GMTЗаголовок HostЗаголовок Host содержит доменное имя хоста и порт сервера длязапрашиваемого ресурса.Пример:Host: al.cs.msu.ru:8080Заголовок RefererСодержит URI ресурса, с которого клиент сделал текущий запрос.Пример:Referer: http://127.0.0.1/testpage.htmlЗаголовок User-agentСодержит название программы-клиента и его характеристики.Пример:User-Agent: SomeStrangeBrowser/0.2Заголовок ServerСодержит название веб-сервера и его характеристики.Пример:Server: Model HTTP Server/0.1Заголовок Content-lengthСодержит (в десятичном виде) число байтов в теле сообщения.Пример:Content-Length: 95Заголовок Content-typeСодержит т.н.

MIME-формат возвращаемого ресурса.MIME-формат записывается в виде: тип/подтип.Модельный сервер поддерживает следующие форматы: text/plain,text/html,image/jpegПример:Content-Type: text/html12Заголовок AllowСодержит список методов, поддерживаемых сервером.Пример:Allow: GET, HEADЗаголовок Last-modifiedСодержит дату последней модификации запрошенного ресурса.Формат аналогичен формату даты в заголовке Date.Пример:Date: Wed, 01 Apr 2009 21:32:12 GMT13МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПОВЫПОЛНЕНИЮ ПЕРВОГО ЭТАПА ЗАДАНИЯЦелью первого этапа задания является реализация статического вебсервера, поддерживающего подмножество HTTP-протокола, описанноевыше.Рекомендуется начать реализацию с двух простых программ,которые пригодятся при тестировании.Первая программа – «псевдо-сервер», цель которого – записьреальных запросов, посылаемых веб-клиентами (например, различнымивеб-браузерами).

Такой сервер должен принять запрос, записать его в логфайл, выдать ответ с кодом 501 «Not Implemented» и немедленно закрытьсоединение. Ответ можно заготовить заранее как текстовый файл ивыдавать его в сокет по мере надобности. Сохраненные запросы можноиспользовать для отладки сервера.Для того, чтобы посылать эти запросы к серверу, понадобится ещеодно простое приложение – «псевдо-браузер». Это консольноеприложение, которое устанавливает связь с сервером, посылает емузаранее заготовленный запрос (тут-то пригодится «псевдо-сервер», хотятестовые запросы можно приготовить и «вручную») и записывает ответсервера.Внутренняя организация сервераРассмотрим вначале самую простую схему организации сервера,назовем ее «монопольной». В этой схеме сервер принимает запрос отклиента, обрабатывает его, формирует ответ, отсылает его клиенту изакрывает соединение.

Схема монопольна, потому что сервер не можетпринимать других запросов, пока не обработает текущий запрос.Псевдокод для такой схемы может выглядеть так:// обычная подготовка TCP/IP сервераint serverSocket = socket (AF_INET, SOCK_STREAM, 0);...struct sockaddr_in ServerAddress;// заполнить ServerAddress// ...if (bind(serverSocket, &ServerAddress, sizeof(ServerAddress)) < 0)...// фатальная ошибкаif (listen(serverSocket, BACK_LOG) < 0) ...// фатальная ошибка// главный циклfor (;;) {struct sockaddr_in ClientAddress;size_t ClAddrLen = sizeof(ClientAddress);14// ждем очередного клиентаint clSocket = accept((serverSocket, &ClientAddress, &ClAddrLen);if (clSocket < 0) ...// ошибка - если будет повторяться, тофатальна// собственно обработка запроса. Должна включать в себя корректныйразрыв// связи (shutdown - close)ProcessClientRequest(clSocket, &ClientAddress);}...Приведенная схема имеет одно (и, пожалуй, единственное)достоинство – простоту.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6480
Авторов
на СтудИзбе
303
Средний доход
с одного платного файла
Обучение Подробнее