Transcript
Page 1: Web осень 2013 лекция 1

Web технологи

Дмитрий Смаль

Page 2: Web осень 2013 лекция 1

О чем этот курс ?

2

Page 3: Web осень 2013 лекция 1

3

Как программировать на PHP / Java?

Как сверстать красивую страничку?

Как сделать сайт?

Page 4: Web осень 2013 лекция 1

Это курс о..

4

О том, как работают web приложения

О “Best practise” web разработки

О современных web технологиях

Page 5: Web осень 2013 лекция 1

Зачем это все ?

5

Page 6: Web осень 2013 лекция 1

Архитектор должен быть в курсе

Неплохой способ заработать $

Или.. что бы вовремя остановиться )

6

Page 7: Web осень 2013 лекция 1

Немного истории..

7

Page 8: Web осень 2013 лекция 1

1969 ― сеанс связи ARPANET

1971 ― отправка первого Email

1983 ― ARPANET переходит на TCP/IP

1984 ― запущена система DNS

1989 ― появление WWW, HTTP, HTML

1993 ― первый браузер – NCSA Mosaic

1995 ― Yahoo, Hotmail, Amazon.com

1998 ― Mail.Ru

История сети Internet

8

Page 9: Web осень 2013 лекция 1

Число хостов в Internet

9

Page 10: Web осень 2013 лекция 1

Браузерные войны

10

Page 11: Web осень 2013 лекция 1

Web 1.0 ― до .com bubble. Статичное содержание страниц, аскетичный дизайн, чаты, форумы, гостевые книги.

Web 2.0 ― новое поколение сайтов (после 2001) User-generated content. Предоставление и потребление API. RSS. Обновлениестраниц “на лету” (ajax).

Web 3.0 ― ??? Community-generated content. Семантическаяпаутина. Уникальные идентификаторы и микроформаты. Аскетичный дизайн

Эволюция web сайтов

11

Page 12: Web осень 2013 лекция 1

Ситуацияна сегодняшний день

12

Page 13: Web осень 2013 лекция 1

Клиент-серверная архитектура. Тонкие клиенты.

Глобальные приложения: социальные сети, поиск, почта – big data

Мобильные приложения

Software as a Service

Облачные сервисы

Тенденции развития ПО

13

Page 14: Web осень 2013 лекция 1

Традиционные сайты: новости, блоги, wiki, базы знаний, визитки

Глобальные приложения: почтовые сервисы, поиск, социальные сети

E-commerce: магазины, бронирование, цифровая дистрибуция

Замена desktop приложениям: банк-клиенты, CRM, корпоративный софт

SAAS ― то же cамое, но онлайн

Web приложения

14

Page 15: Web осень 2013 лекция 1

Front-end разработка

Back-end разработка

Разработка под мобильные платформы

Инфраструктура

Архитектура

Системное программирование

Прочее (seo, security, management)

Чем можно заняться ?

15

Page 16: Web осень 2013 лекция 1

Как работает сеть ?

16

Page 17: Web осень 2013 лекция 1

ISO - OSI

17

Page 18: Web осень 2013 лекция 1

Физический: управление средой, сигналом, кодирование потокабитов

Канальный: физическая адресация, передача между двумяинтерфейсами

Сетевой: логическая адресация, передача между двумяхостами, передача в гетерогенных сетях

Транспортный: надежная доставка, передача между двумяприложениями, управление потоком байтов

Назначение уровней

18

Page 19: Web осень 2013 лекция 1

Internet Protocol

IP

19

Page 20: Web осень 2013 лекция 1

Глобальная адресация

Передача в гетерогенной сети (сегментация)

Маршрутизация пакетов

Задачи IP протокола

20

Page 21: Web осень 2013 лекция 1

Схема IP сети

21

Page 22: Web осень 2013 лекция 1

94.100.191.201 ― один из адресов Mail.Ru

127.0.0.1 ― всегда адрес лок. компьютера

192.168.12.14 ― private ip (не уникален)

192.168.0.0/16 ― адрес подсети

12.0xbad ― тоже валидный адрес

2001:0db8:11a3:09d7:1f34:8a2e:07a0:765d

IP адресация

22

Page 23: Web осень 2013 лекция 1

Иерархия IP адресов

23

Page 24: Web осень 2013 лекция 1

Получение дейтограммы, определение ip получателя

Поиск в таблице маршрутизации

Не найдено → отбрасываем пакет

Выбор наиболее приоритетного маршрута(по префиксу, по дистанции, по ширине канала)

Передача дейтограммы через нужный интерфес

Алгоритм роутера

24

Page 25: Web осень 2013 лекция 1

Domain Name System

DNS

25

Page 26: Web осень 2013 лекция 1

DNS

26

Page 27: Web осень 2013 лекция 1

DNS ― domain vs zone

27

Page 28: Web осень 2013 лекция 1

DNS ― domain vs zone

28

Page 29: Web осень 2013 лекция 1

Отличие домена и зоны DNS

Что возвращает DNS? Виды записей

Рекурсивные и итеративные запросы

Обратные зоны

CDN – content delivery network

Google public DNS – 8.8.8.8 8.8.4.4

DNS

29

Page 30: Web осень 2013 лекция 1

Transmission Control Protocol

TCP

30

Page 31: Web осень 2013 лекция 1

Адресация приложения в пределах хоста

Последовательное двустороннее соединение

Надежная доставка

Управление потоком

Задачи протокола TCP

31

Page 32: Web осень 2013 лекция 1

Порты

Well-known: SSH=20, FTP=21,22, HTTP=80, SMTP=25,

POP3=110

Привилегированные (<1024)

Остальные (>=1024)

Сокеты (sockets)

Серверные (bind, listen, accept)

Клиентские (connect, send, recv)

TCP

32

Page 33: Web осень 2013 лекция 1

TCP сегмент

33

Page 34: Web осень 2013 лекция 1

Round Trip Time (0.5ms / 150ms)

TCP handshake

34

Page 35: Web осень 2013 лекция 1

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind(('127.0.0.1', 8080))

s.listen(10)

while True:

conn, addr = s.accept()

data = conn.recv(1024)

conn.send(data)

conn.close()

TCP сервер

35

Page 36: Web осень 2013 лекция 1

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(('127.0.0.1', 8080))

s.send('Hello world')

print s.recv(1024)

s.close()

TCP клиент

36

Page 37: Web осень 2013 лекция 1

def myreceive(sock, msglen):

msg = ''

while len(msg) < msglen:

chunk = sock.recv(msglen-len(msg))

if chunk == '':

raise RuntimeError("broken")

msg = msg + chunk

return msg

http://docs.python.org/2/howto/sockets.html

Вопрос: откуда получить msglen ?

Как правильно читать данные из сокета

37

Page 38: Web осень 2013 лекция 1

def mysend(sock, msg):

totalsent = 0

while totalsent < len(msg):

sent = sock.send(msg[totalsent:])

if sent == 0:

raise RuntimeError("broken")

totalsent = totalsent + sent

http://docs.python.org/2/howto/sockets.html

Как правильно писать данные в сокет

38

Page 39: Web осень 2013 лекция 1

HyperText Transfer Protocol

HTTP

39

Page 40: Web осень 2013 лекция 1

GET /wiki/страница HTTP/1.1

Host: ru.wikipedia.org

Accept: text/html

Connection: close

(пустая строка)

HTTP/1.1 200 OK

Server: Apache

Content-Language: ru

Content-Type: text/html; charset=utf-8

Content-Length: 1234

Connection: close

(пустая строка)

(HTML)

HTTP ― передача гипертекста

40

Page 41: Web осень 2013 лекция 1

URI ― идентификатор (mailto:[email protected], tel:02, urn:isbn:0-395-36341-1)

URL ― определяет положение ресурса(http://tom:[email protected]/h/1.html?a=b)

http ― протокол

tom:abc ― логин / пароль

host.com ― адрес сервера

/h/1.html ― путь к ресурсу

a=b ― параметры (query string)

URI vs URL

41

Page 42: Web осень 2013 лекция 1

OPTIONS ― запрос методов сервера (Allow)

GET ― запрос документа (Условный GET)

HEAD ― аналог GET, но без тела запроса

POST ― передача данных клиент

PUT ― размещение файла по URI

DELETE ― удаление файла по URI

TRACE, LINK, UNLINK, CONNECT ― редко

Методы HTTP

42

Page 43: Web осень 2013 лекция 1

1xx ― Информационные

2xx ― Успешное выполнение

200 ― OK

204 ― NoContent (только заголовки)

206 ― PartitialContent (часть ответа)

3xx ― Перенаправления

301 ― Moved Pemanently (SEO, кеширование)

302 ― Found (логика работы сайта)

304 ― Not Modified (при условном GET)

Коды состояния HTTP

43

Page 44: Web осень 2013 лекция 1

4xx ― Ошибка клиента

400 ― Bad Request (размер, формат..)

401 ― Unauthorized (запрос авторизации)

403 ― Forbidden (allow, deny)

404 ― Not Found

408 ― Request Timeout (на чтение)

418 ― I'm teapot

Коды состояния HTTP

44

Page 45: Web осень 2013 лекция 1

5xx ― Ошибка сервера

500 ― Internal Server Error

502 ― Bad Gateway (проксирование)

503 ― Service Unavailable

504 ― Gateway Timeout

505 ― HTTP version not supported

507 ― Insufficient Storage

Коды состояния HTTP

45

Page 46: Web осень 2013 лекция 1

Host ― указание домена, вирт. Хостинг

User-Agent ― описание клиента

Accept-* ― поддержка MIME типов, кодировок, языков и т.п.

Cookie ― куки для данной страницы

Referer ― текущая страница

If-Modified-Since ― условный GET

Connection ― управление соединением

Заголовки HTTP запросов

46

Page 47: Web осень 2013 лекция 1

Content-Type ― MIME тип документа

Content-Length ― размер документа

Content-Encoding ― кодирование документа

Date ― текущее время сервера

Expires ― время актуальности документа

Last-Modified ― время изменения файла

Set-Cookie ― установка кук для данного URI

Connection ― управление соединением

Заголовки HTTP ответов

47

Page 48: Web осень 2013 лекция 1

GET /wiki/страница HTTP/1.1

Host: ru.wikipedia.org

Accept: text/html

Connection: close

(пустая строка)

HTTP/1.1 200 OK

Server: Apache

Content-Language: ru

Content-Type: text/html; charset=utf-8

Content-Length: 1234

Connection: close

(HTML)

HTTP

48

Page 49: Web осень 2013 лекция 1

FTP ― передача файлов

SMTP ― передача почты

POP3, IMAP ― получение почты

SSH ― удаленный доступ к серверу

SFTP ― FTP через SSH

XMPP ― Jabber, мгновенные сообщения

BitTorrent ― Передача легального контента

Какие еще есть протоколы ?

49

Page 50: Web осень 2013 лекция 1

RFC822 - Internet Text Message format

XML

JSON, JSONP

CSV

MIME

JPEG / PNG / GIF

PDF

А еще есть «форматы»

50

Page 51: Web осень 2013 лекция 1

Как работает web сайт ?

51

Page 52: Web осень 2013 лекция 1

Клиент-серверное приложение

Ресурсы и адресация

Запрос – ответ (альтернативы ?)

Архитектура

52

Page 53: Web осень 2013 лекция 1

URI ― идентификатор (mailto:[email protected], tel:02, urn:isbn:0-395-36341-1)

URL ― определяет положение ресурса(http://tom:[email protected]/h/1.html?a=b)

http ― протокол

tom:abc ― логин / пароль

host.com ― адрес сервера

/h/1.html ― путь к ресурсу

a=b ― параметры (query string)

URI vs URL

53

Page 54: Web осень 2013 лекция 1

Загрузка с диска

Загрузка с сервера

1.html → /home/user/ht/1.htmlimg/1.jpg → /home/user/ht/img/1.jpg

DocumentRoot = /htdocshttp://www.ru/ → /htdocs/index.htmlhttp://www.ru/img/1.jpg → /htdocs/img/1.jpg

HTTP – загрузка файлов

54

Page 55: Web осень 2013 лекция 1

<ul id="tab_main">

<li>

<a href="/content">

<img src="/img/content.png" alt="Статьи">

Статьи

</a>

</li>

<li>

<a href="/blog">

<img src="/img/blog.png" alt="Блог">

<b>Блог</b>

</a>

</li>

</ul>

HTML

55

Page 56: Web осень 2013 лекция 1

HTML тэги

HTML аттрибуты

Парные: <b></b>(bold), <i></i>(italic), <a></a> (anchor), <quote></quote>

Одиночные: <img>, <link>

Структурые: <body>, <ul>, <div>,<span>

Стандартные: id, style, class, title, ..

Специфичные: href, src, rowspan,

Пользовательские: data-myattr

HTML

56

Page 57: Web осень 2013 лекция 1

<a href=”/search/?q=bob&site=mail.ru”>Найти</a>

<a name=”chapter1”></a>

<a href=”#chapter1”>Глава 1</a>

<form method=”GET” action=”/search/”>

<input type=”text” name=”q” value=””/>

<input type=”text” name=”site” value=””/>

<input type=”submit”/>

</form>

Формы и ссылки

57

Page 58: Web осень 2013 лекция 1

#!/usr/bin/python2.7

print "Content-Type: text/html"

print ""

print "<html><body>"

print "<h1>hello, world!</h1>"

import os

for k, v in os.environ.items():

print "%s = %s<br>" % (k, v)

print "</html></body>"

Ошибочка ?

CGI - скрипт

58

Page 59: Web осень 2013 лекция 1

REQUEST_METHOD ― метод (GET, POST, …)

REQUEST_URI ― строка запроса

QUERY_STRING ― строка параметров

REMOTE_ADDR ― ip адрес клиента

SCRIPT_NAME ― имя текущего скрипта

HTTP_COOKIE ― заголовок Cookie:

HTTP_REFERER ― заголовок Referer:

Переменные окружения

CGI

59

Page 60: Web осень 2013 лекция 1

Скриптовый язык общего назначений

Синтаксис основан на отступах

Минимализм

Динамическая (но строгая) типизация

http://www.codecademy.com/tracks/python

Python

60

Page 61: Web осень 2013 лекция 1

animals = ['dog', 'tux', 'caterpillar']

for a in animals:

print(a)

if len(a) > 3:

print('%s_%s' % (a[0:2], ' for short'))

def reply(msg, user='author'):

return '<blockquote>' + user + ' says:<br>' \

+ msg + '</blockquote>'

import datetime

td = datetime.date.today()

from datetime import date

td = date.today()

Python (примеры)

61

Page 62: Web осень 2013 лекция 1

<ul>

[% IF say_hello %]

<h1>Hello, world!</h1>

[% END %]

[% FOR e IN environ %]

<li>[% e.name %] = [% e.value %]</li>

[% END %]

</ul>

Шаблон sample.tpl

Скрипт do.cgireturn render_to_response('sample.tpl', {

'say_hello' : True,

'environ': os.environ

})

Шаблонизация

62

Page 63: Web осень 2013 лекция 1

<!--# include file=”/header.html” –->

<div class=”user-email”>

<!--# set var=”Email” value=”[email protected]” -->

<!--# echo var=”Email” -->

</div>

<!--# if expr=”$Email” →

Авторизован

<!--# else -->

Вам нужно авторизоваться

<!--# endif -->

<!--# config -->

SSI

63

Page 64: Web осень 2013 лекция 1

Язык программирования браузера

Java / C подобный синтаксис

DOM – дерево, DHTML

События и обработчики

XHR и Ajax

JQuery, Prototype, Backbone, YUI, …

http://www.codecademy.com/tracks/javascript

JavaScript

64

Page 65: Web осень 2013 лекция 1

FireBug - F12

65

Page 66: Web осень 2013 лекция 1

Спасибо за внимание

Дмитрий Смаль, [email protected]