Programowanie Sieciowe 2 Protokoły komunikacyjne: HTTP



Podobne dokumenty
Technologie internetowe

Systemy internetowe. Wykład 5 Architektura WWW. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Programowanie w Internecie

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5


Protokół HTTP 1.1 *) Wprowadzenie. Jarek Durak. rfc2616 źródło

Wybrane działy Informatyki Stosowanej

HTTP W 5-CIU PYTANIACH MICHAŁ KOPACZ

I.Wojnicki, Tech.Inter.

Sieci komputerowe. Wykład 8: Warstwa zastosowań: FTP i HTTP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Kierunek: Automatyka i Robotyka Studia stacjonarne I stopnia: rok I, semestr II

Języki programowania wysokiego poziomu WWW

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Technologie Internetu. Protokół HTTP. Aleksander Denisiuk.

XML-RPC: Zdalne wykonywanie procedur

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

1. Model klient-serwer

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

I.Wojnicki, Tech.Inter.

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4

Obsługa incydentów bezpieczeństwa: część I, z punktu widzenia menadżera. OWASP The OWASP Foundation

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Sprawozdanie nr 4. Ewa Wojtanowska

Hosting WWW Bezpieczeństwo hostingu WWW. Dr Michał Tanaś (

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 2 Seria: Teleinformatyka 2013

Bezpieczeństwo WWW. Plan prezentacji. WWW a protokoły TCP/IP; URL. Czym jest WWW?

I.Wojnicki, JiTW. Języki i Technologie Webowe. Protokół HTTP, Przegladarki. Igor Wojnicki

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Programowanie w Internecie

TCP/IP. Warstwa aplikacji. mgr inż. Krzysztof Szałajko

Specyfikacja techniczna. mprofi Interfejs API

Sieciowe systemy informacyjne

HTTP. literatura:

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4 Wojciech Kaczmarski

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Architektura aplikacji sieciowych. Architektura klient-serwer

Programowanie współbieżne i rozproszone

FTP co to takiego? FTP File Transfer Protocol (Protokół Przesyłania Plików) RFC 114,959

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Protokół HTTP. Omówienie standardu z analizą ruchu sieciowego

Zadanie programistyczne nr 3 z Sieci komputerowych

Laboratorium nr 4 - Badanie protokołów WWW

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Problemy z uwierzytelnianiem HTTP

Zaawansowany kurs języka Python

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Uwierzytelnianie HTTP

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Wykład 5: Najważniejsze usługi sieciowe: DNS, SSH, HTTP, . A. Kisiel,Protokoły DNS, SSH, HTTP,

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

System operacyjny UNIX Internet. mgr Michał Popławski, WFAiIS

Problemy z bezpieczeństwem w sieci lokalnej

Języki i narzędzia programowania III. Łukasz Kamiński Wykład I

Programowanie Sieciowe 1

Programowanie Sieciowe 2 Protokoły komunikacyjne: FTP

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat protokołu http.

Plan całości wykładu. Warstwa łącza i sieci lokalne

Adres IP

PSI Protokół HTTP + wstęp do przedmiotu. Kraków, 10 październik 2014 mgr Piotr Rytko Wydział Matematyki i Informatyki UJ

Co w sieci piszczy? Programowanie aplikacji sieciowych w C#

Bazy Danych i Usługi Sieciowe

Sieci komputerowe Warstwa aplikacji

Tomasz Greszata - Koszalin

Programowanie Komponentowe WebAPI

Zadanie1: Odszukaj w serwisie internetowym Wikipedii informacje na temat usługi DHCP.

Sprawozdanie Laboratorium 4

Aplikacje WWW. Wykład 4. Protokół HTTP. wykład prowadzi: Maciej Zakrzewicz. Protokół HTTP

Protokoły Internetowe

Stos TCP/IP. Warstwa aplikacji cz.2

Aplikacje WWW Wprowadzenie

Lab5 - Badanie protokołów pocztowych

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Protokoły sieciowe - TCP/IP

Sieci komputerowe. Wykład 7: Warstwa zastosowań: DNS, FTP, HTTP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Wybrane działy Informatyki Stosowanej

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

pasja-informatyki.pl

mgr inż. Michał Paluch

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

DOKUMENTACJA TECHNICZNA SMS API MT

HTTP, CGI, Perl. HTTP HyperText Transfer Protocol. CGI Common Gateway Interface. Perl Practical Extraction and Report Language

Ogólnopolskie Repozytorium Prac Dyplomowych

Kurs WWW. Paweł Rajba

Sieci Komputerowe i Bazy Danych

Języki programowania wysokiego poziomu. PHP cz.3. Formularze

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

Sieci komputerowe. Wstęp

SIP: Session Initiation Protocol. Krzysztof Kryniecki 16 marca 2010

Przekierowanie portów w routerze TP-LINK na przykładzie kamery Kenik. Po co wykonujemy przekierowanie portów? Spójrzmy na rysunek poniżej:

Przekierowanie portów w routerze TP-LINK na przykładzie kamery Kenik. Po co wykonujemy przekierowanie portów? Spójrzmy na rysunek

Laboratorium 3.4.2: Zarządzanie serwerem WWW

KONFIGURACJA SIECIOWA SYSTEMU WINDOWS

Przesyłania danych przez protokół TCP/IP

Dokumentacja REST API v 3.0. Kraków, 7 marca FreshMail, ul. Fabryczna 20a, Kraków tel , freshmail.

Aplikacje internetowe - laboratorium

Transkrypt:

Programowanie Sieciowe 2 Protokoły komunikacyjne: HTTP mgr inż. Tomasz Jaworski tjaworski@kis.p.lodz.pl http://tjaworski.kis.p.lodz.pl/

Protokoły komunikacyjne HTTP HyperText Transport Protocol 2

Protokół HTTP Hypertext Transport Protocol Hipertekst tekst + odnośniki (linki). Najczęściej (po za DNS) wykorzystywany protokół w sieci Internet Do komunikacji między klientem a serwerem WWW 3

Informacje o protokole HTTP w sieci Internet RFC 1945: http://www.faqs.org/rfcs/rfc1945.html (HTTP 1.0) RFC 2616: http://www.faqs.org/rfcs/rfc2616.html (HTTP 1.1) W3C: http://www.w3.org/protocols/ (HTTP 1.1) http://www.tutorialspoint.com/http/index.htm HTTP Made Really Easy: Practical Guide to Writing Clients and Servers - http://www.jmarshall.com/easy/http/ Protokół HTTP: wszystko, co musisz wiedzieć o modyfikowaniu nagłówków: http://webhosting.pl/protokol.http.wszystko.co.musisz.wiedziec.o. modyfikowaniu.naglowkow Wikipedia EN i PL 4

Idea HTTP Adres URL Tekst HTML, Obrazy, pliki video Model komunikacji: Wielu klientów jeden serwer, Szablon komunikacji: żądanie (wysyła klient) odpowiedź (wysyła serwer) 5

Budowa adresu URL Uniform Resource Locator Ujednolicony format adresowania zasobów, stosowany w Internecie i sieciach lokalnych. protokół (http, ftp, news, gg) nazwa hosta (google.com) port (jeśli nie podany, to domyślny dla danego protokołu) ścieżka do zasobu nazwa zasobu http://tjaworski.kis.p.lodz.pl/ps1/zaliczenie.pdf http://tjaworski.kis.p.lodz.pl:80/ps1/zaliczenie.pdf 6

Protokół HTTP Protokół warstwy niższej to TCP HTTP wykorzystuje strumienie TCP do transmisji danych Domyślny port: 80 Protokół Tekstowy oparty na liniach, zakończonych bajtami \r\n (CR i LF) z elementami binarnymi (np. obrazy) Oparty na kodach, np. 404 Klient wysyła żądania (requests) Serwer odsyła odpowiedzi (responses) Po nawiązaniu połączenia klient rozpoczyna komunikację 7

HTTP a model OSI/TCP Aplikacja (przeglądarka, downloader) Warstwa aplikacji (np. moduł przeglądarki) Warstwa Transportowa HTTP, FTP, SMTP, POP3, GG TCP Warstwa Sieciowa Warstwa Fizyczna IP Ethernet, światłowód 8

Żądanie HTTP Typ metody żądania (np. GET) i jej parametrów 1 linia Nagłówek żądania n linii Nazwa hosta docelowego (wiele hostów, jeden IP) Typ i długość przesyłanych danych (dla POST) 2 linie Typ przeglądarki (User agent) 1 linia Ciasteczka 1 linia Poprzednia strona 1 linia Pusta linia 1 linia Ewentualna treść danych przesyłanych do serwera 9

Przykładowe żądanie (request) przesłane przez klienta do serwera GET / HTTP/1.1 Host: tjaworski.kis.p.lodz.pl User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.13) Firefox/3.6.13 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: pl,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Pusta linia! 10

Metody HTTP (klient -> serwer) GET, POST, HEAD, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH Najważniejsze: GET, POST GET Pobiera z serwera zasób opisany przez adres URL Pobranie obrazka Uruchomienie program CGI (np. PHP), który wygeneruje treść zasobu (plik HTML, obraz PNG, itp.) POST Wysłanie danych do zasobu opisanego przez adres URL, do dalszego przetwarzania. Najczęściej jest to formularz HTML Dane przesłane są w treści żądania Odbierane przez program CGI (np. PHP) Służy do wysyłania nowych lub aktualizacji istniejących zasobów HEAD Wysyła taki sam nagłówek jak GET, jednak serwer nie rozpoczyna transmisji ciała zasobu (przesyłane są jedynie informacje nagłówkowe) Przeglądarka sprawdza, czy w lokalnym cache jest aktualna wersja zasobu 11

Odpowiedź HTTP Wersja protokołu, np. HTTP/1.1 1 linia Kod błędu, np. 404 Opis kodu błędu, np. Not found Nagłówek odpowiedzi n linii Czas serwera 1 linia Informację o serwerze 1 linia Ciasteczka 1 linia Informacje o typie zasobu i jego długości 2 linie Pusta linia 1 linia Treść danych przesyłanych przez serwer 12

Przykładowa odpowiedź (response) przesłana przez serwer do klienta HTTP/1.1 200 OK Date: Mon, 28 Feb 2011 12:15:57 GMT Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.7e-p1 DAV/2 PHP/5.3.3 X-Powered-By: PHP/5.3.3 Content-Length: 7059 Keep-Alive: timeout=60, max=83 Connection: Keep-Alive Content-Type: text/html Linia statusu odpowiedzi Pusta linia! <html><head><meta http-equiv="content-type"content="text/html; charset=utf-8" /> <title>tytuł strony</title></head>. 13

Kody błędów w linii statusu odpowiedzi Tylko w komunikacji serwer -> klient HTTP/1.1 <kod> <opis> Kody: 1xx zarezerwowane na przyszły użytek 2xx powodzenie, polecenie poprawne, zostało zrealizowane 3xx przekierowania, konieczne dalsze polecenia 4xx błąd składni, błąd po stronie klienta 5xx błąd serwera 14

Kody błędów 200 OK + treść zasobu (np. plik zip), 301 Moved permanently, zasób został przeniesiony. Serwer może podać nowy adres URL, 400 Bad request, nieprawidłowe żądanie, błąd składni, 401 Unauthorized, brak dostępu, konieczna autoryzacji, 403 Forbidden, serwer nie może zwrócić danego zasobu ze względu na bezpieczeństwo, 404 Not found, zasób nie został znaleziony, 500 Internal server error, błąd wewnętrzny serwera, np. wyjątek podczas wykonywania 15

Przykład komunikacji Przeglądarka chce pobrać plik: http://tjaworski.kis.p.lodz.pl/ps1/zaliczenie.pdf http:// oznacza użycie protokołu HTTP Sprawdzenie tjaworski.kis.p.lodz.pl w DNS 212.191.89.60 Nawiązanie połączenia TCP na adres: 212.191.89.60, port 80 Wysłanie tekstu: GET /ps1/zaliczenie.pdf\r\n 16

A serwer na to HTTP/1.1 200 OK\r\n Date: Mon, 28 Feb 2011 15:18:05 GMT\r\n Server: Apache/2.2.11 (FreeBSD) mod_ssl/2.2.11 OpenSSL/0.9.7e-p1 DAV/2 PHP/5.3.3 with Suhosin-Patch\r\n Last-Modified: Tue, 19 Oct 2010 15:42:03 GMT\r\n Etag: "1373850-17421-492fa225f68c0 \r\n Accept-Ranges: bytes\r\n Content-Length: 95265\r\n Keep-Alive: timeout=60, max=98\r\n Connection: Keep-Alive\r\n Pusta linia! Content-Type: application/pdf\r\n \r\n %PDF-1.4%ÇěŹ 5 0 obj<</length 6 0 R/Filter /FlateDecode>>stre 95,265 bajtów 17

Drobna uwaga do implementacji Proszę pamiętać, że w protokole HTTP każda linia nagłówka kończy się dwoma bajtami końca linii CR i LF. CR ma kod 13, LF = 10 CR = "\r" LF = "\n" W C#: String nowa_lina = "\r\n"; Alternatywnie: Environment.NewLine Równie ważne: nagłówek oddzielony jest od treści odpowiedzi jedną pustą linią. Proszę pamiętać, że błędna implementacja każdego protokołu powoduje błędy klienta. Jeśli przeglądarka otrzyma odpowiedź, której nie zrozumie najprawdopodobniej przerwie komunikację nie wyświetlając żadnego błędu. 18

Przykład z wykorzystaniem narzędzia TELNET telnet> open google.pl 80 Trying 74.125.77.104... Connected to google.pl. Escape character is '^]'. GET / HTTP/1.0 302 Found Location: http://www.google.pl/ Cache-Control: private Content-Type: text/html; charset=utf-8 Set-Cookie: PREF=ID=b6046eaa.; expires=wed, 27-F Set-Cookie: NID=44=YgL5_...; domain=.google.com; HttpOnly Date: Mon, 28 Feb 2011 17:04:53 GMT Server: gws Content-Length: 218 X-XSS-Protection: 1; mode=block <HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"> <TITLE>302 Moved</TITLE></HEAD><BODY> <H1>302 Moved</H1> The document has moved <A HREF="http://www.google.pl/">here</A>. </BODY></HTML> Connection closed by foreign host. 19

Co serwer wie o kliencie? Adres IP klienta. Jeśli klient łączy się przez NAT, to IP jest adresem bramy. Jeśli klient łączy się przez serwer proxy, to serwer ten może informować o tym fakcie serwer WWW i podawać adres lokalny klienta. Typ przeglądarki (IE, FF, GCH, ) Adres aktualnej strony Serwer WWW wie, z jakiej strony nastąpiło wywołanie URL Ciasteczka (na stałe kojarzone z domeną) Odpowiedź serwera może zawierać instrukcje co do modyfikacji ciasteczek przechowywanych u klienta, Przeglądarka interpretuje nagłówek odpowiedzi i odpowiednio modyfikuje ciasteczka dla danej domeny Przy kolejnej komunikacji, przeglądarka przesyła zestaw ciasteczek do serwera 20

Ciasteczka Jedna z form monitorowania użytkownika Serwer wysyła prośbę(!) zapisania ciasteczka przez przeglądarkę: Set-Cookie: nazwa=wartosc; expires=data; path=sciezka; domain=domena; secure\r\n Klient (przeglądarka) może ciasteczko zapisać, lub nie. Jeśli ciasteczko jest zapisane, to przy następnej komunikacji z serwerem, klient wysyła je: Cookie: nazwa1=wartosc1; nazwa2=wartosc;...\r\n 21

Niedoskonałości HTTP Brak obsługi sesji z danym klientem Najczęściej stosuje się techniki pośrednie, np. Sesje w PHP Inne metody to: Rozbudowa adresu URL, Ukryte pola formularza, Ciasteczka (głównie strona klienta) Ubogi mechanizm autoryzacji 22

Optymalizacja ruchu Wykorzystanie pola Last-modified odpowiedzi przez klienta cache treści poszczególnych zasobów, Określenie przez serwer wielkości zasobu: Content-Length: 123456 Kompresja strumienia HTTP Accept-Encoding: gzip,deflate HTTP v1.1: Wielokrotna komunikacja na jednym połączeniu (keepalive): Connection: keep-alive (domyślnie: Connection: Close) Keep-Alive: 150, Możliwość pobierania tylko części treści zasobu np. wznawianie pobierania pliku o wielkości 600MB 23

Narzędzia przydatne przy implementacji i testowaniu serwera WWW Mozilla Firefox + Firebug 24

Narzędzia przydatne przy implementacji i testowaniu serwera WWW Mozilla Firefox + Firebug tcpdump, windump, CommView Źródło: http://www.tamos.com/products/commview/ 25

Uwagi odnośnie implementacji serwera WWW (1/3) Klasy sieciowe znajdują się w przestrzeniach System.Net.Sockets oraz System.Net Obsługa wątków oraz strumieni WE/WY: System.Threading System.IO Zamiast klasy Socket można korzystać z TcpListener (serwer) i TcpClient (cześć kliencka w serwerze), Do przyjęcia nowego połączenia w serwerze służy metoda AcceptTcpClient uruchamiana na rzecz obiektu klasy TcpClient, 26

Uwagi odnośnie implementacji serwera WWW (2/3) Zapis/odczyt danych gniazda wykonuje się za pomocą strumienia (obiektu) klasy NetworkStream, zwracanego przez obiekt klasy TcpClient; Można skorzystać z klas StreamReader i StreamWriter, pozwalających na formowanie strumienia bajtów w linie tekstu, np.: this.reader = new StreamReader(this.client.GetStream()); this.writer = new StreamWriter(this.client.GetStream()); 27

Uwagi odnośnie implementacji serwera WWW (3/3) Sensowne minimum serwera WWW powinno potrafić wygenerować 3 typy odpowiedzi: 200 OK, 404 brak zasobu (brak pliku do wysłania), 500 błąd wewnętrzny serwera (w sytuacji, gdy kod serwera generuje wyjątek). Serwer może pracować w trybie: Odbierz połączenie-przeczytaj nagłówek-wyślij danezamknij połączenie. Proszę pamiętać o znakach końca linii! 28

Serwer HTTP - Testowanie W przypadku testowania serwera na porcie 80 i systemie Windows Vista/7, należy wyłączyć usługę World Wide Web Publishing Service. 29

Dziękuję za uwagę!