SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Веб-сервер
Основы Веб-программирования
Кафедра Интеллектуальных Информационных Технологий, ИнФО, УрФУ
1
Ресурсы
https://ru.wikipedia.org/wiki/Веб-сервер
http:
//lectureswww.readthedocs.org/5.web.server/index.html
2
Называют
• Железо, на котором запущенны сервисы и есть
подключение с сети.
• Программу, которая слушает 80 порт и отвечает на
HTTP запросы
3
Типы HTTP серверов
• Статический веб-сервер, или стек, посылает
размещенные на нем файлы в браузер “как есть”.
(nginx, Apache)
• Динамических веб-сервер состоит из статического
веб-сервера плюс дополнительного программного
обеспечения, наиболее часто сервером приложений
и базы данных. (Gunicorn, Waitress, Tornado)
4
Типы сайтов
• Статические Веб-сайты проще всего установить. К ним
относятся HTML страницы, картинки, шрифты, CSS
стили и прочее…
• Динамический Веб-сайт означает, что сервер
обрабатывает данные или даже генерирует их на лету
из базы данных. Это обеспечивает больше гибкости,
но технически сложнее в обслуживании, что делает
его более сложным в разработке.
5
Связь Веб-приложения с HTTP-сервером
• CGI
• FastCGI
• Встроенный сервер
• WSGI
6
CGI
7
CGI
CGI — это не язык программирования!
Это простой протокол, позволяющий Веб-серверу
передавать данные через stdin и читать их из stdout.
Поэтому, в качестве CGI-обработчика может
использоваться программа на любом языке, способном
работать со стандартными потоками ввода-вывода.
8
CGI. Самый простой сервер.
python3 -m http.server –cgi 8000
9
CGI. Hello World!
Код 1: Си
#include <stdio.h>
int main(void) {
printf("Content−Type:␣text/plainnn");
printf("Hello ,␣world !nn");
return 0;
}
Код 2: Python
#!/usr/bin/python
print("Content−Type:␣text/plainnnHello ,␣world!")
10
CGI. Переменные окружения
Код 3: Python
#!/usr/bin/python
import os
print("Content−type:␣text/htmlrnrn")
print("<font␣size =+10> Environment </font ><br >")
for param in os.environ.keys ():
print("<b>%20s</b>:␣%s<br >" %
(param , os.environ[param ]))
11
CGI. Переменные окружения
12
CGI. Преимущества
• Процесс CGI скрипта не зависит от Веб-сервера и в
случае падения ни как не отразится на работе
последнего.
• Может быть написан на любом языке
программирования.
• Поддерживается большинством Веб-серверов.
13
CGI. Недостатки
Потребление ресурсов
Дело в том, что каждое обращение к CGI-приложению
вызывает порождение нового процесса, со всеми
вытекающими отсюда накладными расходами.
14
FastCGI
15
FastCGI
• В отличие от CGI, FastCGI использует постоянно
запущенные процессы для обработки множества
запросов.
• FastCGI-процессы используют для связи с сервером
Unix Domain Sockets или TCP/IP.
16
FastCGI. Приложение
Сборка: gсс -o hello.fcgi hello.cpp -lfcgi
Запуск: spawn-fcgi -p 5000 -n hello.fcgi
Код 4: Си
#include "fcgi_stdio.h"
#include <stdlib.h>
int main(void)
{
while(FCGI_Accept () >= 0)
{
printf("Content−type:␣text/htmlrn"
"Status:␣200␣OKrnrnHello␣World!");
}
return 0;
} 17
Встроенный сервер
В некоторых языках, например Go, уже существует
встроенный Веб-сервер.
18
Встроенный сервер. FastCGI
В этом случае не нужно запускать отдельно fcgi сервер,
например spawn-fcgi.
Код 5: Go
package main
import (
"fmt"
"net"
"net/http"
"net/http/fcgi"
)
func handler(res http.ResponseWriter ,
req *http.Request) {
fmt.Fprint(res , "Hello␣World!")
} 19
Встроенный сервер. FastCGI
go run hello.go
Код 6: Go
func main() {
// For local machine
// l, _ := net.Listen ("unix",
// "/var/run/go−fcgi.sock")
// TCP 5000 listen
l, err := net.Listen("tcp", "0.0.0.0:5000")
if err != nil {
return
}
http.HandleFunc("/", handler)
fcgi.Serve(l, nil)
} 20
Встроенный сервер. HTTP
Может запускаться самостоятельно без дополнительных
программ и настроек.
Код 7: Go
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter ,
r *http.Request) {
fmt.Fprintln(w, "Hello␣World!")
}
21
Встроенный сервер. HTTP
go run hello.go
Код 8: Go
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8000", nil)
}
22
WSGI. PEP-333. PEP-3333
WSGI предоставляет простой и универсальный интерфейс
для соединения веб-серверов, веб-приложений и
прослоек между ними.
• Application
• Server
• Middleware
Все Python фреймворки поддерживают WSGI.
Даже Django!
23

Contenu connexe

Tendances

07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервераRoman Brovko
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3Technopark
 
17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщенияRoman Brovko
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1rit2011
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Tanya Denisyuk
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Kristina Pomozova
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3Technopark
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_rumcroitor
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backendRoman Brovko
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...KazHackStan
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_rumcroitor
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими рукамиStanislavMalkin
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
Продвинутая web-отладка с Fiddler
Продвинутая web-отладка с FiddlerПродвинутая web-отладка с Fiddler
Продвинутая web-отладка с FiddlerAlexander Feschenko
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Tanya Denisyuk
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 

Tendances (20)

07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Web весна 2013 лекция 3
Web весна 2013 лекция 3Web весна 2013 лекция 3
Web весна 2013 лекция 3
 
17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения17 - Web-технологии. Real Time сообщения
17 - Web-технологии. Real Time сообщения
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1мои модули и патчи для Nginx. максим дунин. зал 1
мои модули и патчи для Nginx. максим дунин. зал 1
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend08 - Web-технологии. Архитектура frontend-backend
08 - Web-технологии. Архитектура frontend-backend
 
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
Шамбулов У. К. (Казахстан), ГТС. Анализ и исследование инцидентов информацион...
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
Видеохостинг своими руками
Видеохостинг своими рукамиВидеохостинг своими руками
Видеохостинг своими руками
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Продвинутая web-отладка с Fiddler
Продвинутая web-отладка с FiddlerПродвинутая web-отладка с Fiddler
Продвинутая web-отладка с Fiddler
 
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
Юрий Насретдинов-«Сбор логов в «облаке» в Badoo»
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 

Similaire à Веб-сервер

DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоАлександр Ежов
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волковkarina krew
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSYandex
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Alexey Bokov
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Middleware
MiddlewareMiddleware
Middlewaremegakott
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP7bits
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusCisco Russia
 

Similaire à Веб-сервер (20)

Web servers
Web servers Web servers
Web servers
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
PHP
PHPPHP
PHP
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
Async Python
Async PythonAsync Python
Async Python
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
11 лекция, петр волков
11 лекция, петр волков11 лекция, петр волков
11 лекция, петр волков
 
Вячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPSВячеслав Бирюков - HTTP и HTTPS
Вячеслав Бирюков - HTTP и HTTPS
 
Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014Open source technologies in Microsoft cloud - MS SWIT 2014
Open source technologies in Microsoft cloud - MS SWIT 2014
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Middleware
MiddlewareMiddleware
Middleware
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 

Веб-сервер

  • 3. Называют • Железо, на котором запущенны сервисы и есть подключение с сети. • Программу, которая слушает 80 порт и отвечает на HTTP запросы 3
  • 4. Типы HTTP серверов • Статический веб-сервер, или стек, посылает размещенные на нем файлы в браузер “как есть”. (nginx, Apache) • Динамических веб-сервер состоит из статического веб-сервера плюс дополнительного программного обеспечения, наиболее часто сервером приложений и базы данных. (Gunicorn, Waitress, Tornado) 4
  • 5. Типы сайтов • Статические Веб-сайты проще всего установить. К ним относятся HTML страницы, картинки, шрифты, CSS стили и прочее… • Динамический Веб-сайт означает, что сервер обрабатывает данные или даже генерирует их на лету из базы данных. Это обеспечивает больше гибкости, но технически сложнее в обслуживании, что делает его более сложным в разработке. 5
  • 6. Связь Веб-приложения с HTTP-сервером • CGI • FastCGI • Встроенный сервер • WSGI 6
  • 8. CGI CGI — это не язык программирования! Это простой протокол, позволяющий Веб-серверу передавать данные через stdin и читать их из stdout. Поэтому, в качестве CGI-обработчика может использоваться программа на любом языке, способном работать со стандартными потоками ввода-вывода. 8
  • 9. CGI. Самый простой сервер. python3 -m http.server –cgi 8000 9
  • 10. CGI. Hello World! Код 1: Си #include <stdio.h> int main(void) { printf("Content−Type:␣text/plainnn"); printf("Hello ,␣world !nn"); return 0; } Код 2: Python #!/usr/bin/python print("Content−Type:␣text/plainnnHello ,␣world!") 10
  • 11. CGI. Переменные окружения Код 3: Python #!/usr/bin/python import os print("Content−type:␣text/htmlrnrn") print("<font␣size =+10> Environment </font ><br >") for param in os.environ.keys (): print("<b>%20s</b>:␣%s<br >" % (param , os.environ[param ])) 11
  • 13. CGI. Преимущества • Процесс CGI скрипта не зависит от Веб-сервера и в случае падения ни как не отразится на работе последнего. • Может быть написан на любом языке программирования. • Поддерживается большинством Веб-серверов. 13
  • 14. CGI. Недостатки Потребление ресурсов Дело в том, что каждое обращение к CGI-приложению вызывает порождение нового процесса, со всеми вытекающими отсюда накладными расходами. 14
  • 16. FastCGI • В отличие от CGI, FastCGI использует постоянно запущенные процессы для обработки множества запросов. • FastCGI-процессы используют для связи с сервером Unix Domain Sockets или TCP/IP. 16
  • 17. FastCGI. Приложение Сборка: gсс -o hello.fcgi hello.cpp -lfcgi Запуск: spawn-fcgi -p 5000 -n hello.fcgi Код 4: Си #include "fcgi_stdio.h" #include <stdlib.h> int main(void) { while(FCGI_Accept () >= 0) { printf("Content−type:␣text/htmlrn" "Status:␣200␣OKrnrnHello␣World!"); } return 0; } 17
  • 18. Встроенный сервер В некоторых языках, например Go, уже существует встроенный Веб-сервер. 18
  • 19. Встроенный сервер. FastCGI В этом случае не нужно запускать отдельно fcgi сервер, например spawn-fcgi. Код 5: Go package main import ( "fmt" "net" "net/http" "net/http/fcgi" ) func handler(res http.ResponseWriter , req *http.Request) { fmt.Fprint(res , "Hello␣World!") } 19
  • 20. Встроенный сервер. FastCGI go run hello.go Код 6: Go func main() { // For local machine // l, _ := net.Listen ("unix", // "/var/run/go−fcgi.sock") // TCP 5000 listen l, err := net.Listen("tcp", "0.0.0.0:5000") if err != nil { return } http.HandleFunc("/", handler) fcgi.Serve(l, nil) } 20
  • 21. Встроенный сервер. HTTP Может запускаться самостоятельно без дополнительных программ и настроек. Код 7: Go package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter , r *http.Request) { fmt.Fprintln(w, "Hello␣World!") } 21
  • 22. Встроенный сервер. HTTP go run hello.go Код 8: Go func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8000", nil) } 22
  • 23. WSGI. PEP-333. PEP-3333 WSGI предоставляет простой и универсальный интерфейс для соединения веб-серверов, веб-приложений и прослоек между ними. • Application • Server • Middleware Все Python фреймворки поддерживают WSGI. Даже Django! 23