HTTP Hypertext Transfer Protocol суббота, 7 мая 2016 г. Сетевые модели Объединены в TCP/IP Сетевая модель OSI 7 Прикладной HTTP, SMTP, SNMP, FTP, Telnet, NFS, RTSP, BGP 6 Представительный XML, XDR, ASN.1, SMB, AFP 5 Сеансовый TLS, SSL, ISO 8327 / CCITT X.225, RPC, NetBIOS, ASP 4 Транспортный TCP, UDP, RTP, SCTP, SPX, ATP, DCCP, GRE 3 Сетевой IP, ICMP, IGMP, CLNP, ARP, RARP, OSPF, RIP, IPX, DDP 2 Канальный Ethernet, Token ring, PPP, HDLC, X.25, Frame relay, ISDN, ATM, Wi-Fi 1 Физический электричество, радио, лазер Сетевая модель TCP/IP Прикладной HTTP, FTP, DNS (RIP, работающий поверх UDP, и BGP, работающий поверх TCP, являются частью сетевого уровня) 4 Транспортный напр. TCP, UDP, RTP, SCTP, DCCP (OSPF, работающий поверх IP, является частью сетевого уровня) 3 Межсетевой IP (вспомогательные протоколы, например ICMP и IGMP работают поверх IP, но являются частью сетевого уровня; ARP не работает поверх IP) 2 Канальный Ethernet, Token ring и др. 1 Физический T1, E1, UTP HTTP: достоинства и недостатки +Простота +Расширяемость +Распространённость Размер сообщений Отсутствие «навигации» Нет поддержки распределённости Протокол без поддержки состояния Структура сообщений HTTP Starting line определяет тип сообщения Headers характеризуют тело сообщения и параметры передачи Message Body данные сообщения Тело сообщения обязательно должно отделяться от заголовков пустой строкой Стартовая строка Запрос: Метод URI HTTP/Версия GET /path/resource HTTP/1.1 Ответ: HTTP/Версия КодСостояния Пояснение HTTP/1.1 200 Ok Методы HTTP GET POST HEAD OPTIONS PUT PATCH DELETE TRACE CONNECT LINK UNLINK Метод GET Передача параметров GET /path/resource?param1=value1&param2=value2 HTTP/1.1 Условный GET If-Modified-Since If-Match If-Range Частичный GET Range Коды состояния 1xx 2xx Informational Success 3xx 4xx 5xx Redirection Client Error Server Error Заголовки HTTP General Headers Request Headers Response Headers Entity Headers Каждый заголовок – разделённая двоеточием пара «параметр-значение» Пример HTTP-запроса GET /path/resource HTTP/1.1 Host: www.mysite.ru User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) Accept: text/html Connection: close Пример HTTP-ответа HTTP/1.1 200 OK Date: Wed, 24 Feb 2010 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 24 Feb 2010 11:20:59 GMT Content-Language: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close Пример с несколькими сущностями POST /path/resource HTTP/1.1 Host: www.mysite.ru Referer: http://www.mysite.ru/path/resource User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) Content-Type: multipart/form-data; boundary=“separator” Content-Length: (суммарный объём включая дочерние заголовки) Connection: keep-alive Keep-Alive: timeout=300 (пустая строка) Продолжение примера (пустая преамбула) --separator Content-Disposition: form-data; name=“Description” (пустая строка) Описание картинки --separator Content-Disposition: form-data; name=“AttachedFile”; filename=“photo.jpg” Content-Type: image/jpeg (пустая строка) (двоичное содержимое первой фотографии) --separator (отсутствующий эпилог) HTTPS SSL - Secure Sockets Layer TLS - Transport Layer Security Рукопожатие – “Handshake” клиент предоставляет список поддерживаемых алгоритмов шифрования и хеш-функций; сервер выбирает из этого списка наиболее устойчивые алгоритмы и сообщает о своем выборе клиенту; сервер отправляет клиенту цифровой сертификат и открытый ключ для собственной идентификации; клиент шифрует случайно сгенерированную цифровую последовательность (ключ сессии) открытым ключом сервера и посылает результат на сервер; только сервер может расшифровать полученную последовательность, используя свой закрытый ключ. Встраивание слоя SSL/TLS cookie GET /index.html HTTP/1.1 Host: www.mysite.ru HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value GET /about.html HTTP/1.1 Host: www.mysite.ru Cookie: name=value Set-Cookie: name=value; expires=date; path=/; domain=.mysite.ru Set-Cookie: RMID=732423sdfs73242; expires=Fri, 31-Dec-2010 23:59:59 GMT; path=/; domain=.mysite.ru