Plan wykładu 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX. 1
Protokół FTP Protokół FTP (File Transfer Protocol) [RFC 959] umożliwia przesyłanie plików tekstowych i binarnych. Serwer FTP działa na porcie 21. [serwer] 220 serwer.adres FTP server ready. [klient] [serwer] [klient] [serwer] [klient] USER użytkownik<crlf> 331 Password required for użytkowinik. PASS hasło<crlf> 230 User użytkownik logged in. SYST<CRLF> [serwer] 215 UNIX Type: L8 Version: Compaq Tru64 UNIX V5.0 2
Protokół FTP [klient] [serwer] [klient] PASV<CRLF> 227 Entering Passive Mode (ip1,ip2,ip3,ip4,port1,port2) LIST<CRLF> [serwer] 150 Opening ASCII mode for data connection for /bin/ls (0.0.0.0,0) dane są przesyłane na innym porcie. Port 21 będzie przeznaczony tylko dla komunikatów kontrolnych. W celu odebrania danych należy otworzyć nowe połączenie z adresem: ip1.ip2.ip3.ip4:port1*256+port2. [serwer] 226 Transfer complete. 3
Protokół FTP [klient] [serwer] [klient] [serwer] [serwer] [klient] [serwer] [serwer] PASV<CRLF> 227 Entering Passive Mode (ip1,ip2,ip3,ip4,port1,port2) RETR jakis.plik<crlf> 150 Opening BINARY mode data connection for jakis.plik (0.0.0.0,0)... 226 Transfer complete. QUIT<CRLF> Goodbye. Zakończenie połączenia. 4
Serwery FTP proftpd vsftpd (http://www.proftpd.org) (http://vsftpd.beasts.org) Serwer ftp może korzystać z lokalnej bazy użytkowników (konta na serwerze) lub też autoryzować użytkownika poprzez inny niezależny mechanizm. Dostęp do ftp bez powłoki: modyfikacja /etc/passwd: ciesla:x:1002:21::/var/ftp/ciesla:/bin/false Autoryzacja lokalna przez PAM, plik /etc/pam.d/ftp #%PAM-1.0 auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed auth required /lib/security/pam_unix.so shadow nullok #auth required /lib/security/pam_shells.so account required /lib/security/pam_unix.so session required /lib/security/pam_unix.so. 5
Usługi WWW WWW (World Wide Web) jest najpopularniejszym sposobem udostępniania informacji w sieci. Umożliwia umieszczenie w jednym dokumencie między innymi tekstu, grafiki, animacji oraz dźwięku. Standard WWW został opracowany w 1991 roku. Dwa lata później powstała pierwsza graficzna przeglądarka stron WWW Mosaic. Strony są zapisane w języku HTML (HyperText Markup Language), a do ich przesyłania służy protokół HTTP (HyperText Transfer Protocol). WWW opiera się na modelu klient serwer. Strony są identyfikowane za pomocą adresów URL. Domyślny port dla usługi HTTP to 80. 6
Protokół HTTP Protokół HTTP [RFC 2616] przykładowe połączenie: [klient] [serwer] HEAD / HTTP/1.1 <CRLF> Host: www.if.uj.edu.pl <CRLF> <CRLF> HTTP/1.1 200 OK Date: Sun, 10 Oct 2004 19:54:37 GMT Server: Apache/1.3.27 (Unix) mod_jk/1.2.0 PHP/4.3.2 Last-Modified: Thu, 23 Sep 2004 07:02:33 GMT ETag: "1357a3-294c-41527509" Accept-Ranges: bytes Content-Length: 10572 Content-Type: text/html [serwer]zamknięcie połączenia. Komenda HEAD zwraca ogólne informacje na temat wskazanego dokumentu. 7
Protokół HTTP W celu uzyskania treści wskazanego dokumentu należy użyć komendy GET lub POST. Za pomocą tych komend można również przekazać argumenty do serwera WWW. Schemat wywołania: [klient] GET /dokument?arg1=wart1&arg2=wart2 HTTP/1.1<CRLF> Host: www.if.uj.edu.pl<crlf><crlf> lub [klient] POST /dokument HTTP/1.1<CRLF> Host: www.if.uj.edu.pl<crlf> Content-Type: application/x-www-form-urlencoded<crlf> Content-Length: 21<CRLF><CRLF> arg1=wart1&arg2=wart2<crlf> 8
Protokół HTTP Pozostałe komendy: OPTIONS wykaz komend dostępnych dla wskazanego dokumentu (serwera), PUT wstawia dokument pod określony adres URL, DELETE kasuje dokument pod określonym adresem, TRACE zwraca informacje o poprawności zapytania. Nie zwraca, zawartości dokumentu, CONNECT zarezerwowana na potrzeby transmisji kodowanej (SSL). 9
Popularne serwery WWW Apache http://httpd.apache.org darmowy serwer z udostępnionym kodem źródłowym (licencja GPL). Posiada liczne moduły umożliwiające współpracę z innymi systemami (języki programowania, bazy danych). Może działać pod kontrolą różnych systemów operacyjnych, IIS (Internet Information Services) http://www.microsoft.com/iis komercyjny, wspiera technologię ASP (Active Server Pages). Współpracuje głównie z językami programowania firmy Microsoft. Działa w środowisku MS Windows, Tomcat http://jakarta.apache.org/tomcat darmowy serwer referencyjny dla technologii JSP (Java Server Pages), kontener servletów. Napisany w Javie. 10
Konfiguracja Apache'a Konfiguracja startowa programu serwera: /etc/conf.d/apache2: APACHE2_OPTS="-D DEFAULT_VHOST -D PHP5" Konfiguracja pracy serwera: /etc/apache2/httpd.conf: <VirtualHost *:80> ServerAdmin webmaster@adres.com DocumentRoot /var/www/docs/katalog.dla.adres.com ServerName adres.com ErrorLog /var/log/apache2/adres.com-error_log CustomLog /var/log/apache2/adres.com-access_log common </VirtualHost> 11
Serwer WWW model request-response przeglądarka WWW (JavaScript) żądanie danych strona HTML Oprogramowanie serwera WWW Moduły (np. CGI, PHP, Servlety, JSP, ASP, Perl, Python) Inne systemy System operacyjny Bazy danych 12
Przekazywanie argumentów <html> <body> Podaj proszę swoje imie: <form name="formularz" method="get" action="skrypt.php"> Imie: <input type="text" name="imie" /> <input type="submit" /> </form> </body> </html> http://empetrum.if.uj.edu.pl/skrypt.php?imie=ala 13
Przekazywanie argumentów Skrypt php po stronie serwera: <?php $s = $_GET['imie']?> <html> <body> Witaj <?php echo $s?> </body> <html> 14
Przekazywanie argumentów Przeglądarka i serwer mogą wymieniać się danymi: GET argumenty wywołania skryptu/strony. Dane z przeglądarki do serwera. Przykład: http://phpbb3.pl/viewtopic.php?f=5&t=1018 POST Analogiczne, z tym że argumenty nie są przesyłane poprzez adres URL. COOKIE argumenty przesłane od serwera do przeglądarki w celu późniejszej identyfikacji klienta. SESSION argumenty związane z klientem trzymane po stronie serwera oznaczone identyfikatorem sesji przekazywanym pomiędzy serwerem i klientem. 15
Cookies (ciasteczka) Serwer przeglądarka: HTTP/1.1 302 Found Date: Sat, 25 Oct 2008 07:48:15 GMT Server: Apache... Set-Cookie: imie=michal; expires=sat, 01 Nov 2008 07:48:15 GMT; path=/; domain=.uj.pl; HttpOnly Set-Cookie: nazwisko=ciesla; path=/; domain=.uj.pl; HttpOnly Location: http://www.uj.pl/index.php?st=0... Przeglądarka serwer: GET /index.php?st=0& HTTP/1.1... Cookie: imie=michal; nazwisko=ciesla;... 16
Sesje Przekazywanie sesji (identyfikatora sesji) jest możliwe na dwa sposoby: 1. Poprzez Cookie: HTTP/1.1 302 Found Date: Sat, 25 Oct 2008 07:48:15 GMT Server: Apache... Set-Cookie: s=94a576da1f8e5036a0c44fce6b1e1044; expires=sat, 01 Nov 2008 07:48:15 GMT; path=/; domain=.uj.pl; HttpOnly... 2. Poprzez dodatkowy argument GET dodanie do każdego możliwego linka wysyłanego przez przeglądarkę członu http://...&sid=94a576da1f8e5036a0c44fce6b1e1044. 17
Sesje i cookies w PHP Ustawianie cookies: bool setcookie (string $cookiename [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]] ) Odczyt cookies: $_COOKIE['cookiename'] lub $_REQUEST['cookiename']. Sesje: bool session_start() Przykład: session_start(); echo 'Witaj na stronie $_SESSION['strona']<br />'; $_SESSION['strona']; = 'inna strona'; 18
JavaScript <SCRIPT TYPE="text/javascript"> <!-- function Test(){ var s = document.formularz.imie.value; alert("witaj " + s + "!"); } // --> </SCRIPT> <html> <body> Podaj proszę swoje imie: <form name="formularz" onsubmit="test()"> Imie: <input type="text" name="imie" /> <input type="submit"/> </form> </body> </html> 19
AJAX AJAX (Asynchronous JavaScript and XML) jest techniką pozwalającą zapewnić ciągłą (asynchroniczną) komunikację pomiędzy przeglądarką internetową a serwerem www. AJAX nie stanowi odrębnej technologii a jedynie wykorzystuje już istniejące: HTTP, JavaScript, CSS, XML 20
AJAX - przykład <html> <body> <script type="text/javascript"> function ajaxfunction(){ var xmlhttp; try{ // Firefox, Opera 8.0+, Safari xmlhttp=new XMLHttpRequest(); }catch (e){ // Internet Explorer try{ xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); }catch (e){ try{ xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }catch (e){ alert("w Twojej przeglądarce nie można używać AJAXa!"); return false; } } } 21
AJAX - przykład xmlhttp.onreadystatechange=function(){ if(xmlhttp.readystate==4){ document.formularz.time.value=xmlhttp.responsetext; } } xmlhttp.open("get","time.php",true); xmlhttp.send(null); } </script> <form name="formularz"> Imie: <input type="text" onkeyup="ajaxfunction();" name="imie" /> Czas: <input type="text" name="time" disabled /> </form></body> </html> 22
AJAX shrypt time.php <?php header("expires: Sat, 1 Jan 2000 00:00:00 GMT"); header("last-modified: ".gmdate( "D, d M Y H:i:s")."GMT"); header("cache-control: no-cache, must-revalidate"); header("pragma: no-cache"); echo date("d M Y H:i:s");?> Czas będzie aktualizowany przy każdym wciśnięciu klawisza w polu Imie. Strona nie będzie przeładowywana. Przydatne linki: http://www.w3schools.com/ajax/default.asp http://www.php.net http://httpd.apache.org. 23
Podsumowanie 1. Protokół FTP jest wykorzystywany do przesyłania plików w sieci internet. Usługi www są udostępniane poprzez protokół HTTP działający w modelu request-response. Ze względu na postępujący rozwój i dużą ilość zastosowań opracowano metody asynchronicznej wymiany danych w ramach protokołu HTTP, pomiędzy przeglądarką internetową a serwerem www. 24