remix (1119427), страница 3

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

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

Поэтому браузер имеет возможность сохранить ресурс локально при первом обращении к нему и при последующих обращениях использовать эту копию без настоящей закачки в случае, если ресурс не изменился. А выяснить неизменность ресурса и помогает метод HEAD.3.3. HTTP-ответОтвет веб-сервера имеет следующую структуру:<заголовок ответа> <конец строки><HTTP-заголовок> <конец строки>...<HTTP-заголовок> <конец строки><конец строки><тело ответа>Заголовок ответа выглядит так:HTTP/‹версия протокола› ‹код состояния› ‹пояснение›‹версия протокола› — то же самое, что и в HTTP-запросе. Модельныйсервер для простоты поддерживает версию 1.0.‹код состояния› — десятичное число (три арабских цифры), характеризующее дальнейшее сообщение и определяющее реакцию клиента.‹пояснение› — короткая необязательная строка, содержащая пояснениек коду состояния.

Нужна только для облегчения анализа ответа человеком.11Основные понятияВеб-сервер генерирует ответ на любой запрос веб-клиента.В случае, если метод в запросе не поддерживается сервером, то последний должен вернуть код состояния 501 (пояснение — Not implemented).При этом в ответ должен включаться HTTP-заголовок Allow, содержащийсписок допустимых методов (описание заголовков, поддерживаемых модельным сервером см. ниже).Если же метод поддерживается сервером (т.е.

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

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

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

Также, как и в случае четвертой группы, в теле ответасодержится гипертекстовое сообщение об ошибке.В нижеследующей таблице перечислен минимальный набор кодов состояния, возвращаемых модельным веб-сервером.12Основные понятияТаблица 1. Некоторые коды состояния модельного веб-сервераКод состоянияи пояснениеСмыслHTTP-заголовки200 OKЗапрос ресурса успешенDate, Server,Content-type-дляGET, Contentlength — для GET,Last-modified,тело — для GET400 Bad requestСинтаксическая ошибка взапросеDate, Server, Content-type,Content-length,тело403 ForbiddenЗапрос ресурса, которыйнедоступен клиентуDate, Server,Content-type,Content-length,тело404 Not FoundЗапрос несуществующегоресурсаDate, Server,Content-type,Content-length,тело500 Internal Server ErrorЛюбая ошибка сервера,которая не входитв список ошибок 5 классаDate, Server,Content-type,Content-length,тело501 Not ImplementedСервер не имеет возможности обработать запрос(например, не поддерживает метод)Date, Server, Allow,Content-type,Content-length,тело503 Service UnavailableСервер временно не имеетвозможности обработатьзапрос (например, из-занехватки системных ресурсов, перегрузки и т.п.)Date, Server,Content-type,Content-length,тело3.4.

HTTP-заголовокКаждый HTTP-заголовок представляет собой строку вида:‹имя заголовка› : ‹значение›Двоеточие должно следовать сразу за именем заголовка. Значение может содержать произвольные символы, кроме «\n» (перевод строки) и «\r»(возврат каретки).Заголовки делятся на 4 группы:— Основные заголовки — должны входить в любой запрос и ответ;— Заголовки запроса — входят только в запрос от клиента;13Основные понятия— Заголовки ответа — входят только в ответ сервера;— Заголовки сущности — сопровождают каждую сущность запросаили ответаМодельный сервер поддерживает следующие заголовки:— Основные — Date— Запрос— Host, Referer, User-agent— Ответ— Server— Сущности — Content-length, Content-type, Allow, Last-modified3.4.3 Заголовок DateЗаголовок Date содержит дату генерации сообщения.

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

MIME-формат возвращаемого ресурса. MIME-формат записывается в виде: ‹тип›/‹подтип›.Модельный сервер поддерживает следующие форматы: text/plain,text/html,image/jpeg.Пример:Content-Type: text/html3.4.10 Заголовок AllowСодержит список методов, поддерживаемых сервером.15Основные понятияПример:Allow: GET, HEAD3.4.11 Заголовок Last-modifiedСодержит дату последней модификации запрошенного ресурса. Форматаналогичен формату даты в заголовке Date.Пример:Date: Wed, 01 Apr 2009 21:32:12 GMT16Методические указания по выполнению первого этапа задания4. Методические указанияпо выполнению первогоэтапа заданияЦелью первого этапа задания является реализация статического веб-сервера,поддерживающего подмножество HTTP-протокола, описанное выше.Рекомендуется начать реализацию с двух простых программ, которыепригодятся при тестировании.Первая программа — «псевдо-сервер», цель которого — запись реальных запросов, посылаемых веб-клиентами (например, различнымивеб-браузерами).

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

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

Должна включатьв себя корректный разрыв связи (shutdown — close) */ProcessClientRequest ( clSocket, &ClientAddress );}// ...Приведенная схема имеет одно (и, пожалуй, единственное) достоинство — простоту. Например, псевдо-сервер (см. выше) целесообразно реализовать именно так. Однако никакой реальный сервер не использует эту схемупо причине её крайней неэффективности. Проблема в том, что обработкакорректного клиентского GET-запроса требует копирования файла (указанного в URI запроса) в клиентский сокет.

Эта операция может занять многовремени. Особенно нетерпимо то, что сервер в течение этого времени будетпростаивать, ожидая завершения обмена с файлом и сокетом. Ведь в это жевремя можно обрабатывать запросы других клиентов! Поэтому более эффективная (и более сложная в реализации) схема использует асинхронныйввод/вывод.

Главную роль в этой схеме играет системный вызов select().Прочитать о том, как select() используется для асинхронного ввода/выводаможно в [4, гл.6]. Здесь отметим, что для достижения максимальной эффективности асинхронным должен быть не только обмен с сокетами, но и обменс файлами-ресурсами. Для этого дескриптор открытого файла ресурса должен быть переведен в режим неблокирующего ввода с помощью системноговызова ioctl(). Заметим, что особенность реализации механизма сокетов в ОСUNIX такова, что открытые файловые дескрипторы не отличаются от открытых сокетов с точки зрения системного вызова select(), поэтому select()реагирует не только на «сокетные» события, но и на «файловые» события, чтосущественно упрощает реализацию асинхронного ввода/вывода.18Методические указания по выполнению первого этапа задания4.2.

Общий интерфейс шлюза —основные понятияОбщий интерфейс шлюза (или общий шлюзовой интерфейс —по-английски — Common Gateway Interface, CGI) — это стандартизованныйпротокол, позволяющий подключить к веб-серверу внешние программы длягенерации содержимого запрашиваемых ресурсов. Такие программы называются «шлюзами», но мы будем использовать более распространенныйтермин «CGI-программа».

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

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

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