Internet stał się przełomem technologicznym i społecznym ostatniego ćwierćwiecza. Dzisiejsze wykłady zaczniemy zatem od definicji Internetu. Medium, które zwie się internetem jest złożeniem takich trzech elementów. Po pierwsze są to sieci, które są ze sobą połączone protokołem TCP/IP (wymóg technologiczny). Po drugie mamy element społecznościowy, czyli społeczność, która uzywa i rozwija ta sieć. I każdy oprócz tego, że może przeglądać zasoby sieci, może ingerować, modyfikować zawartość elementów tej sieci. I trzeci element to oczywiście zbiór zasobów znajdujacych się w tej sieci (aspekt informacyjny). Użytkowanie internetu jest to nic innego, jak działanie społeczności przy pomocy sieci mające na celu odnalezienie i wykorzystanie znajdujacej się w niej zasobów informacyjnych. W ramach wytworzonego internetu powstało wiele typów sieci począwszy od LAN do WAN (technologii najszybciej rozwijającej się mającej największe zapotrzebowanie). Jeśli chodzi o LAN, czyli te sieci o małych rozmiarach, to warto powiedzieć, że zostały one rozbudowane o wykorzystanie sieci bezprzewodowych (Bluetooth). Zwykle jest tak, że jak mamy sieć WAN i LAN, to obydwie te sieci są rozgraniczone routerem. Sieć LAN składa się od kilku do kilkudziesięciu komputerów, natomiast WAN ze znacznie większej liczby. I ten WAN dzieli się na takie dwie specjalne podsieci - MAN (Metropolitan Area Network) i CAN (Campus Area Network). One się nie różnią niczym od sieci WAN jeśli chodzi o infrastrukturę, natomiast sa one wyodrębnione w taki sposób ze względu na swoją funkcjonalność i ze względu na główne zastosowanie. Sieć CAN jest dedykowana zawężonemu gronu użytkowników w ramach pewnego obszaru geograficznie spójnego i udostępniają one bardzo szybkie łącza dedykowane. Sieci WAN Zostały oparte w pełni o połączenia modemowe (o łącza telefoniczne) i między innymi o ISDN. Są to najnowsze technologie, które w ramach tej sieci zostały wyszególnione i własnie dziś ISDN jest rozwijany w celu zapewnienia jeszcze szybszych połączeń internetowych. Teraz powiedzmy sobie o pojęciu protokołu internetowego. Co to są te protokoły. Protokoły internetowe to podzbiór protokołów komunikacyjnych, mający zastosowanie w środowisku internetu. Protokoły internetowe to zbiór ścisłych reguł i kroków postępowania, które są automatycznie wykonywane przez urządzenia w celu nawiązania łączności i wymiany danych. Należy pamiętać, że wszystkie protokoły internetowe jako ogół definiują takie dwa podstawowe elementy - nagłówek i wiadomość. Wiemy, że podstawą komunikacji w sieci WAN, czyli sieci internet jest protokół TCP/IP. Protokół TCP/IP dzieli się na dwa odrębne protokoły: IP - służący do adresowania i wymiany danych pomiędzy podsieciami (stąd się wzięło adresowanie) i TCP, który jest protokołem sterującym poprawnością danych. Jeśli chodzi o protokół IP, to obecnie wykorzystuje się protokół IP w wersji czwartej dzielącego się na 6 klas. Klasy służą do wyodrębnienia rodzaju sieci (czy jest to LAN - dla klasy A - 10.x.x.x., a dla klasy C - 192.168.x.x, czy WAN). Jednak w trakcie wdrażania jest wersja szósta tego protokołu, do którego stworzenia przyczynił się w głównej mierze problem małej, kończącej się ilości adresów IP w wersji czwartej. W wersji szóstej mamy znacznie więcej możliwości adresowania i na pewno na długo rozwiązany byłby problem przydzielenia adresów (choćby taki telefon komórkowy mógłby mieć własny adres IP, bo do tej pory był wyszukiwany pierwszy wolny i przydzielany). Drugim protokołem w sieci internet prócz TCP/IP jest UDP. Jest on bardzo szybki, nie zapewnia on jednak w pełni połączenia z portem. Natomiast jeżeli pakiet nie dotarł, to zawsze jest możliwość retransmisji tego pakietu. Kolejny protokół to HTTP - jest on najważniejszy spośród tych wszystkich tutaj podanych do tej pory. Po pierwsze jest najpowszechniejszym protokołem widocznym w sieci WWW. Stanowi podstawę kominikacyjną jeżeli chodzi o publikację danych w sieci WWW. http udostepnia znormalizowany sposób komunikowania się komputerów z sobą, okresla formę urzadzeń klienta, oraz formę odpowiedzi. Prócz tego jest zaliczany do protokołów nezstanowych z racji tego, że nie zachowuje żadnych informacji o poprzednich transakcjach z klientem (po zakończeniu transakcji wszystko przepada). Pozwala to znacznie zmniejszyć obciążenie serwera, jednak jest kłopotliwe w sytuacji, gdy trzeba zapamiętać konkretny stan dla użytkownika, który wcześniej łączył się już z serwerem. Najczęstszym rozwiązaniem tego problemu jest wprowadzenie mechanizmu cookies. FTP to kolejny protokół. Służy on do wymiany plików, ale schodzi on już na dalszy plan choćby ze względu na torrenty. Standardowo protokół ten działa w dwóch trybach - pasywnym (działa na porcie 21 dla poleceń i na porcie większym niż 1024 do przesyłania danych) i aktywnym (działa na porcie 21 dla poleceń i na porcie 20 dla danych - połączenie jest nawiązywane tu przez serwer). Kolejne protokoły to protokoły związane z przesyłaniem wiadomości pocztą elektroniczną - SMTP, POP3 I IMAP. Wszystkie te protokoły sa protokołami tekstowymi (czytelnymi dla człowieka). SMTP jest protokołem zawodnym, gdyż nie pozwala on na pobieranie wiadomości ze zdalnego serwera. POP3 służy do odbioru poczty elektronicznej, jednakże:
Połączenie trwa tylko, jeżeli użytkownik pobiera pocztę i nie może pozostać uśpione.
Do jednej skrzynki może podłączyć się tylko jeden klient równocześnie.
Każdy list musi być pobierany razem z załącznikami i żadnej jego części nie można w łatwy sposób pominąć.
Wszystkie odbierane listy trafiają do jednej skrzynki, nie da się utworzyć ich kilku.
Serwer POP3 nie potrafi sam przeszukiwać czekających w kolejce listów.
Istnieje jednak bardziej zaawansowany protokół IMAP. W przeciwieństwie do POP3, który umożliwia jedynie pobieranie i kasowanie poczty, IMAP pozwala na zarządzanie wieloma folderami pocztowymi oraz pobieranie i operowanie na listach znajdujących się na zdalnym serwerze. IMAP pozwala na ściągnięcie nagłówków wiadomości i wybranie, które z wiadomości chcemy ściągnąć na komputer lokalny. Pozwala na wykonywanie wielu operacji, zarządzanie folderami i wiadomościami. I tak powiedzieliśmy sobie o podstawowych protokołach internetowych. Teraz natomiast skupimy się na anatomiii protokołu HTTP. Pamiętamy, że jest bezstanowy i nastepuje taka pojedyncza transakcja - wysyłamy wiadomość HTTP, dostajemy odpowiedź i koniec. I teraz mamy kilka takich metod HTTP, które obsługują operacje na serwerze. Jest ich dość sporo, natmiast my powiemy o dwóch najważniejszych - GET I POST. Obydwie te metody służą do komunikacji z serwerem i do interaktywnego pobierania danych. Metoda GET to nic innego, jak pobranie zasobu wskazanego przez URL. może mieć postać warunkową jeśli w nagłówku występują pola warunkowe takie jak If Modified Since. Z kolei metoda POST odpowiada za przyjęcie danych przesyłanych od klienta do serwera (przykładowo - wysyłanie zawartości formularzy). Można jeszcze ewentualnie powiedzieć o HEAD. Ta metoda pobiera informacje o zasobie i jest stosowana do sprawdzania dostępności zasobu. W przypadku formularzy na stronie WWW można wymiannie stosować metodę GET i POST. Różnica pomiędzy nimi jest taka, że w GET wszystkie parametry wywołania formularza idą otwartym kanałem (idą w URL) i jest tworzone wywołanie do serwera o postaci:
http://81.113.23.98:80/myapp/usluga?query_string
HTTP:// oznacza tu specyfikację protokołu. Nastepnie podajemy adres domenowy lub IP sewera. Później możemy podac port. Domyślny dla http jest port 80 i jeśli jest port 80, to :80 możemy pominąć. Następnie jest ścieżka, która mówi, że odwołujemy się do zasobu w ramach pewnej aplikacji WEB. I od znaku zapytania włącznie będzie widoczna deklaracja parametrów. Przy metodzie POST nie ma czegoś takiego. Będzie widoczny adres, ale już bez widocznej deklaracji parametrów, ponieważ parametry sa przesyłane kanałem ukrytym. Wracając jednak do tego adresu URL należy podkreslic dwie rzeczy - ma on ograniczoną długość, a ponadto nie możemy użyć spacji w adresie. Spacja bowiem rozdziela adres. Jeśli chcielibyśmy użyć spacji, to spację zastepuje bowiem znaczek %20 (to odnosi się do parametrów rzecz jasna). Jednak w większości przeglądarek już wprowadzono taki dekoder, który to rozwiązuje zamieniając automatycznie znak spacji na %20. Stąd dla formularzy bezpieczniejasza jest metoda GET. Teraz jak wygląda taka podstawowa sesja związana z protokołem HTTP. Na początek popatrzmy, jak wygląda zapytanie http, które przesyłane jest od klienta do serwera:
GET / HTTP/1.1 (prośba o zwrócenie dokumentu o URL / zgodnie z protokołem HTTP 1.1)
Keep-Alive: 300 (czas, jaki klient chce zarezerwować do następnego zapytania w przypadku połączenia Keep-Alive)
No i teraz jak wygląda odpowiedź serwera WWW na takie zapytanie:
znak powrotu karetki i nowej linii (CRLF)
tutaj zawartość dokumentu
HTTP/1.1 dopuszcza wysłanie kilku żądań naraz (pipelining). HTTP/1.0 zakłada jedno żądanie i jedną odpowiedź. HTTP do obsługi połączeń Keep-Alive wymaga aby odpowiedź od serwera miała znaną długość (przez podanie Content-Length lub użycie Transfer-Encoding: chunked). W przeciwnym wypadku koniec odpowiedzi sygnalizuje zerwanie połączenia i Keep-Alive nie może działać. Nagłówek Keep-Alive jest rozszerzeniem HTTP/1.0. W HTTP/1.1 ten nagłówek nie jest potrzebny, gdyż połączenia Keep-Alive są domyślne (zachowanie zmienia Connection: close). Jeśli wpisujemy adres strony, lub piszemy jakąś stronę i próbujemy ją wywołać, to jeśli cos jest nie tak, to informują nas o tym kody informacyjne. Kod odpowiedzi HTTP to numeryczna dana wysyłana przez serwer HTTP do aplikacji klienta. Informuje o sposobie realizacji (bądź jej braku) zapytania klienckiego. Znajduje się na początku odpowiedzi, tuż za wersją protokołu HTTP i przed słownym opisem kodu odpowiedzi przykładowo: HTTP/1.1 400 Bad Request. Oto, jakimi kodami może odpowiedzieć przeglądarka i co one oznaczają:
Kody informacyjne
kod |
opis słowny |
znaczenie/zwrócony zasób |
100 |
Continue |
Kontynuuj - prośba o dalsze wysyłanie zapytania |
101 |
Switching Protocols |
Zmiana protokołu |
Kody powodzenia
kod |
opis słowny |
znaczenie/zwrócony zasób |
200 |
OK |
Zawartość żądanego dokumentu. |
201 |
Created |
Utworzono - wysłany dokument został zapisany na serwerze |
202 |
Accepted |
Przyjęto - zapytanie zostało przyjęte do obsłużenia, lecz jego zrealizowanie jeszcze się nie skończyło |
203 |
Non-Authoritative Information |
Informacja nieautorytatywna - zwrócona informacja nie odpowiada dokładnie odpowiedzi pierwotnego serwera, lecz została utworzona z lokalnych bądź zewnętrznych kopii |
204 |
No content |
Brak zawartości - serwer zrealizował zapytanie klienta i nie potrzebuje zwracać żadnej treści |
205 |
Reset Content |
Przywróć zawartość - serwer zrealizował zapytanie i klient powinien przywrócić pierwotny wygląd dokumentu |
206 |
Partial Content |
Część zawartości - serwer zrealizował tylko część zapytania typu GET, odpowiedź musi zawierać nagłówek Range informujący o zakresie bajtowym zwróconego elementu |
Kody przekierowania
kod |
opis słowny |
znaczenie/zwrócony zasób |
300 |
Multiple Choices |
Wiele możliwości - istnieje więcej niż jeden sposób obsłużenia danego zapytania, serwer może podać adres zasobu, który pozwala na wybór jednoznacznego zapytania spośród możliwych |
301 |
Moved Permanently |
|
302 |
Found |
Znaleziono - żądany zasób jest chwilowo dostępny pod innym adresem a przyszłe odwołania do zasobu powinny być kierowane pod adres pierwotny |
303 |
See Other |
Zobacz inne - odpowiedź na żądanie znajduje się pod innym URI i tam klient powinien się skierować. To jest właściwy sposób przekierowywania w odpowiedzi na żądanie metodą POST. |
304 |
Not Modified |
|
305 |
Use Proxy |
|
306 |
|
Kod nieużywany, aczkolwiek zastrzeżony dla starszych wersji protokołu |
307 |
Temporary Redirect |
Tymczasowe przekierowanie - żądany zasób znajduje się chwilowo pod innym adresem URI, odpowiedź powinna zawierać zmieniony adres zasobu, na który klient zobowiązany jest się przenieść |
Kody błędu aplikacji klienta
kod |
opis słowny |
znaczenie/zwrócony zasób |
400 |
Bad Request |
Nieprawidłowe zapytanie - żądanie nie może być obsłużone przez serwer z powodu błędnej składni zapytania |
401 |
Unauthorized |
|
402 |
Payment Required |
Wymagana opłata - odpowiedź zarezerwowana na przyszłość |
403 |
Forbidden |
Zabroniony - serwer zrozumiał zapytanie lecz konfiguracja bezpieczeństwa zabrania mu zwrócić żądany zasób |
Nie znaleziono - serwer nie odnalazł zasobu według podanego URI ani niczego co by wskazywało na istnienie takiego zasobu w przeszłości |
||
405 |
Method Not Allowed |
Niedozwolona metoda - metoda zawarta w żądaniu nie jest dozwolona dla wskazanego zasobu, odpowiedź zawiera też listę dozwolonych metod |
406 |
Not Acceptable |
Niedozwolone - zażądany zasób nie jest w stanie zwrócić odpowiedzi mogącej być obsłużonej przez klienta według informacji podanych w zapytaniu |
407 |
Proxy Authentication |
|
408 |
Request Timeout |
Koniec czasu oczekiwania na żądanie - klient nie przesłał zapytania do serwera w określonym czasie |
409 |
Conflict |
Konflikt - żądanie nie może być zrealizowane, ponieważ występuje konflikt z obecnym statusem zasobu, ten kod odpowiedzi jest zwracany tylko w przypadku podejrzewania przez serwer, że klient może nie znaleźć przyczyny błędu i przesłać prawidłowego zapytania |
410 |
Gone |
Zniknął (usunięto) - zażądany zasób nie jest dłużej dostępny i nie znany jest jego ewentualny nowy adres URI; klient powinien już więcej nie odwoływać się do tego zasobu |
411 |
Length required |
Wymagana długość - serwer odmawia zrealizowania zapytania ze względu na brak nagłówka Content-Length w zapytaniu; klient może powtórzyć zapytanie dodając doń poprawny nagłówek długości |
412 |
Precondition Failed |
Warunek wstępny nie może być spełniony - serwer nie może spełnić przynajmniej jednego z warunków zawartych w zapytaniu |
413 |
Request Entity Too Large |
Encja zapytania zbyt długa - całkowita długość zapytania jest zbyt długa dla serwera |
414 |
Request-URI Too Long |
Adres URI zapytania zbyt długi - długość zażądanego URI jest większa niż maksymalna oczekiwana przez serwer |
415 |
Unsupported Media Type |
Nieznany sposób żądania - serwer odmawia przyjęcia zapytania, ponieważ jego składnia jest niezrozumiała dla serwera |
416 |
Requested Range Not Satisfiable |
Zakres bajtowy podany w zapytaniu nie do obsłużenia - klient podał w zapytaniu zakres, który nie może być zastosowany do wskazanego zasobu |
417 |
Expectation Failed |
Oczekiwana wartość nie do zwrócenia - oczekiwanie podane w nagłówku Expect żądania nie może być spełnione przez serwer lub - jeśli zapytanie realizuje serwer proxy - serwer ma dowód, że oczekiwanie nie będzie spełnione przez następny w łańcuchu serwer realizujący zapytanie |
kod |
opis słowny |
znaczenie/zwrócony zasób |
500 |
Internal Server Error |
Wewnętrzny błąd serwera - serwer napotkał niespodziewane trudności, które uniemożliwiły zrealizowanie żądania |
501 |
Not Implemented |
Nie zaimplementowano - serwer nie dysponuje funkcjonalnością wymaganą w zapytaniu; ten kod jest zwracany gdy serwer otrzymał nieznany typ zapytania |
502 |
Bad Gateway |
Błąd bramy - serwer - spełniający rolę bramy lub proxy - otrzymał niepoprawną odpowiedź od serwera nadrzędnego i nie jest w stanie zrealizować żądania klienta |
503 |
Service Unavailable |
Usługa niedostępna - serwer nie jest w stanie w danej chwili zrealizować zapytania klienta ze względu na przeciążenie |
504 |
Gateway Timeout |
|
505 |
HTTP Version Not Supported |
Wersja HTTP nie obsługiwana - serwer nie obsługuje bądź odmawia obsługi wskazanej przez klienta wersji http. |