Serwery www
Budowa, zasada działania
Podstawowe operacje
serwera www
" Odwzorowywanie adresu
" Uwierzytelnianie
" ZarzÄ…dzanie wirtualnymi hostami
" Dostarczanie statycznej zawartości
pliku
" Dostarczanie zawartości dynamicznej
Budowa Apache
Warstwa serwera
" Mapowanie MIME
" RozwiÄ…zywanie adresu
1. http://www.neurozen.com/test?a=1&b2
2. http://www.neurozen.com/images/news.gif

ServerAdmin webmaster@neurozen.com
Alias /test /servlet/test
Alias /images /static/images
DocumentRoot /www/docs/neurozen
ServerName www.neurozen.com
ErrorLog logs/neurozen-error-log
CustomLog logs/neurozen-access-log common

Warstwa serwera
Warstwa serwera - przetwarzanie danych:
żð w typowych serwisach realizuje wiÄ™kszość zadaÅ„
funkcjonalnych
żð punkt centralny systemu rozproszonego - wrażliwość na
przeciążenia => ataki typu DoS (Denial of Service)
żð odpowiedzialna za synchronizacjÄ™ pracy klientów i,
częściowo, zachowanie spójności w warstwie danych
Oprogramowanie serwisu w ramach warstwy serwera:
żð integruje siÄ™ z wÅ‚aÅ›ciwym serwerem WWW, faktycznie
komunikujÄ…cym siÄ™ z klientem
żð jest uruchamiane prze serwer WWW w reakcji na żądanie
klienta, serwer WWW przekazuje klientowi wynik działania
oprogramowania
Warstwa serwera
żð Przetwarzanie typu wejÅ›cie/wyjÅ›cie - serwer WWW
przekazuje do modułu oprogramowania żądanie klienta i
traktuje wynik działania modułu jako pełną odpowiedz
przekazywanÄ… klientowi
żð Przetwarzanie wsadowe - serwer WWW przekazuje
klientowi statyczny zasób (np. kod HTML), przetwarzając
tylko niektóre, specjalnie oznaczone fragmenty; wynik
przetwarzania umieszczany jest w ramach zasobu zamiast
danego fragmentu
Serwery www (zródło: wikipedia)
Podział rynku
Technologie po stronie
serwera
" CGI podstawowy interfejs wymiany danych pomiędzy
serwerem WWW i oprogramowaniem; potocznie - moduły w
języku Perl, C lub skrypty systemu operacyjnego działające w
ramach przetwarzania typu wejście/wyjście
" Serwlety j. Java - poza implementacją CGI - większość
możliwości środowiska Java i kilka specyficznych udoskonaleń
obecnie część większego standardu J2EE
" ASP pierwsza poważna technologia przetwarzania wsadowego w
zasadzie tylko serwery WWW Microsoft (IIS)
" PHP najpopularniejsza i najbardziej dynamicznie rozwijajÄ…ca
siÄ™ technologia przetwarzania wsadowego pod wieloma
względami lepsze od ASP, ale część możliwości zależna od
systemu operacyjnego i zewnętrznych bibliotek
" JSP "odpowiedz" j. Java na PHP razem z serwletami tworzÄ…
środowisko łatwe do projektowania i "podziału kompetencji"
CGI
CGI - Common Gateway Interface:
" Pierwszy mechanizm oferowania dynamicznej
zawartości
" Mechanizm CGI zakłada, że podczas odbioru żądania
jest uruchamiany nowy proces (exec  w unix ach), do
którego zostanie przekazany określony zbiór
parametrów
" Typowy scenariusz działania:
1. odczytanie parametrów żądania (ze standardowego
wejścia albo ze zmiennych środowiskowych);
2. przetworzenie danych;
3. wyprowadzenie komunikatu http (na standardowe wyjście).
CGI  zmienne środowiskowe
Dwie grupy:
Związane z serwerem i żądaniem
" REMOTE_ADDR, REMOTE_HOST, REMOTE_USER
" QUERY_STRING
" SERVER_SOFTWARE, SERVER_NAME, SERVER_PORT
" SERVER_PROTOCOL, GATEWAY_INTERFACE
" REQUEST_METHOD (np. POST lub GET)
" PATH_INFO (virtual) PATH_TRANSLATED, SCRIPT_NAME
Związane z nagłówkami protokołu HTTP
" HTTP_AUTH_TYPE (zastosowana metoda uwierzytelniania)
" HTTP_CONTENT_TYPE, HTTP_CONTENT_LENGTH
" HTTP_ACCEPT_LANGUGE, HTTP_ACCEPT,
HTTP_USER_AGENT
" HTTP_COOKIE
Przykład CGI

Simple Form

Simple Form



Zip Code:
Name:




Przykład CGI
POST http://serwer.pl/cgi-bin/zip.cgi HTTP/1.1
Host: mysite.org
User-Agent: Mozilla/4.75 [pl] (WinNT; U)
Content-Length: 29
Content-Type: application/x-www-form-urlencoded
Remote-Address: 127.0.0.1
Remote-Host: demo
zip=84240&name=Kubus+Puchatek
Przykład CGI
#!/usr/local/bin/perl
sub ReadFormFields { ... }
sub PrintFormFields {
my $fieldsRef = shift;
my $key, $value;
print "Content-Type: text/html\n\n";
print "\nhello\n";
print "\n";
foreach $key (keys(%$fieldsRef)) {
$value = $$fieldsRef{$key};
print "

$key: $value

\n";
}
print "\n\n";
}
&ReadFormFields(\%fields);
&PrintFormFields(\%fields);
exit 0;
sub ReadFormFields
{
# ustawienie parametrów przekazanych do ReadFormFields
my $fieldsRef = shift;
my($key, $val, $buftmp, @buf parm);
#odczyt żądania
$buftmp = " ";
read(STDIN,$buftmp,$ENV{ CONTENT LENGTH });
$buftmp = $ENV{QUERY STRING} if (!$buf tmp);
@bufparm = split(/&/,$buf tmp);
#podział parametrów żądania na pary klucz - wartość
foreach $parm (@bufparm) {
($key, $val) = split(/=/,$parm);
# zamiana plusów i znaków specjalnych %XX
$val =~ s/\+/ /g;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/
pack("C",hex($1))/ge;
# użycie \0 do odseperowania pół
$$fieldsRef{$key} .=  \0 if (defined($$fieldsRef {$key}));
$$fieldsRef{$key} .= $val;
}
return($fieldsRef);
}
CGI  wady
" Ograniczona sprawność działania: konieczność
załadowania procesu przy obsłudze każdego
żądania stanowi znaczne obciążenie
" Problem współdzielenia zasobów
" Możliwość wywoływania poleceń po stronie
serwera tworzy istotne zagrożenie dla
bezpieczeństwa
" Przeplatanie kodu programu i znaczników HTML
" Zależny od serwera (nph  no-parse header)
Server Side Includes (SSI)
" Jak sugeruje nazwa, w tym wypadku kod jest wstawiany w
strukturÄ™ dokumentu HTML.
" Odpowiednie fragmenty dokumentu sÄ… ponownie generowane
przy każdym odwołaniu.
" Dynamika dokumentu bez konieczności stosowania CGI;
generowane sÄ… tylko wymagane fragmenty dokumentu.
" Możliwe zastosowania:
 Licznik odwołań;
 Data i czas; data ostatniej modyfikacji dokumentu;
 Wkomponowywanie innego pliku lub rezultatu wywołania programu
CGI.
" Rozszerzenia specyfikacji obejmujÄ… m. in.:
 Instrukcje warunkowe (if & else);
 Wysyłanie poczty.
SSI - składnia
" Pliki wymagające takiego przetwarzania wyróżniane zwykle
specjalnym rozszerzeniem: .sht .shtm lub .shtml.
" Elementy interpretowane umieszczone sÄ… w specjalnych
znacznikach wewnątrz kodu HTML. Przed wysłaniem
zawartość jest przeglądana i osadzone znaczniki są
interpretowane. Format znacznika (token) SSI jest
następujący:
czyli :
 obowiÄ…zkowy identyfiaktor zamykajÄ…cy.
SSI  dostępne polecenia
" config - Określa sposoby parsowania plików:
 errmsg  postać komunikatu o błędzie.
 timefmt  format wyświetlania czasu.
 sizefmt  Sposób wyświetlania rozmiaru plików (bytes lub abbrev).
" include  wstawienie do bieżącego dokumentu innej wersji:
 virtual  ścieżka wirtualna na serwerze.
 file  ścieżka względna w głąb bieżącego katalogu.
" echo  wyświetlenie wartości podanej zmiennej.
" fsize  wyświetla rozmiar pliku.
" flastmod  data ostatniej modyfikacji.
" exec  wykonanie zadanej komendy systemowej lub skryptu
CGI:
 cmd  uruchomienie podanego łańcucha jako komendy.
 cgi  uruchomienie zadanego skryptu CGI.
SSI  przykład

hello




SSI  przykład
#!/usr/local/bin/perl
sub ReadFormFields { . . . }
sub PrintFormFields
{
my $fieldsRef = shift;
my $key, $value;
foreach $key (keys(%$fieldsRef)) {
$value = $$fieldsRef{$key};
print "

$key: $value

\n";
}
}
&ReadFormFields(\%fields);
&PrintFormFields(\%fields);
exit 0;
Internet Server Application
Programming Interface (ISAPI)
" Technologia wprowadzona przez firmÄ™ Microsoft
(inny rodzaj NSAPI). Definiuje tzw. rozszerzenia
(extensions) i filtry (filters). Zapewnia równie dużą
elastyczność jak CGI.
" W przeciwieństwie do CGI proces obsługi rezyduje
w pamięci, a nie jest każdorazowo ładowany.
" Tak jak CGI, ISAPI daje możliwość wywoływania
funkcji systemowych (API) i innych dostarczonych
przez wybrany język programowania.
" Brak przenośność kodu (zależny od API
konkretnego dostawcy)  określanej jako
proprietary API
Internet Server Application
Programming Interface (ISAPI)
" Przykład -> plik isapi.cpp
PHP
" PHP  dziÅ› jedna z najpowszechniej stosowanych i
najprężniej rozwijających się technologii
internetowych
" PoczÄ…tki: rok 1995 i Rasmus Lerdorf
"  Obiektowość a cel projektu PHP
" Kolejne wersje  obiektowe :
- 3. z połowy roku 1998
- 4. z połowy roku 2000
- 5. z lutego 2003  milowy krok w historii OO PHP
czerwiec 2013- wersja 5.5
" PHP językiem hybrydowym
" Przyszłość: wersja 6. oferująca silne wsparcie OO
PHP - PHP Hypertext Preprocessor
" Jest językiem skryptowym z elementami
obiektowości
" Osadzanym w HTML u
" Interpreter języka znajduje się na serwerze
" Użytkownik nie widzi kodu PHP, gdyż wykonuje się
on po stronie serwera !!!!
" Posiada wysoką funkcjonalność, porównywalną z
innymi językami programowania
" Bardzo łatwy do opanowania
" W pełni obsługuje bazy danych
" Szybki i oszczędza zasoby serwera
" Dostępny dla wielu serwerów www,
" Rozwijany na zasadach Open Source
Popularność języków prog.
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Konfiguracja
" Motor Zend  kod bajtowy
" Komunikacja z serwerem www
" CGI - (Common Gateway Interface). oferuje
administratorowi zmiany wielu ustawień dotyczących
bezpieczeństwa wykonywanych skryptów.
" Moduł serwera - do najpopularniejszych serwerów
można podłączyć PHP jako moduł. Znacząco zwiększa
wydajność, lecz utrudnia zachowanie odpowiedniego
poziomu bezpieczeństwa na serwerze.
" FastCGI - rozwiązanie łączące w sobie zalety CGI oraz
wydajność modułów  słabo udokumentowane, wymaga
niestandardowych dodatków, utrudniona administracja
" Konkurencja:
 ASP.NET
 JSP/servlety
" RozwiÄ…zania te z biegiem czasu
bardzo się do siebie zbliżają
(interpretacja/JIT/maszyna
wirtualna)
Sesja HTTP
" Potrzebna, gdy serwer chce śledzić
poczynania użytkownika (tzn. jego kolejne
żądania)
 Utrzymywanie koszyka zakupów użytkownika
 Zapisywanie informacji o autoryzacji dostępu
" Sesje są problemem dla serwerów HTTP
 Brak  natywnego mechanizmu sesji HTTP
(bezstanowość)
 Rozszerzenie serwera (np. PHP/ASP.NET/JSP)
musi dostarczać zarządzanie sesją oraz API
sesji dla programisty
 Współdzielenie sesji przez wszystkie
przeglÄ…darki (jednego typu)
 RFC 2965 lub 6265
Sesja
Dwie podstawowe funkcje
" Åšledzenie
" Utrzymanie
Pracownicy
Site2.php
Site1.php
Żądanie
Session
Åšledzenie i zarzÄ…dzanie sesjÄ…
Identyfikator sesji powinien być
przechowywany po stronie serwera i stronie
klienta
Identyfikatory sesji po stronie serwera
przechowywane są w pamięci, pliku lub bazie
danych
Istnieją 3 sposoby na śledzenie sesji u klienta
1. Cookies
2. Ukryte pola formularza
3. Przepisywanie URL a
Przykład
Jak serwer śledzi sesję?
" Klient wysyła pierwsze żądanie.
" Serwer generuje identyfikator sesji
(PHPSESSID)
" Zapamiętanie id w bazie danych i np.
cookies
" Każde następne  podzapytanie musi
przesyłać ID (przez cookies lub URL)
" Serwer weryfikuje poprawność id
sesji