PSI Protokół HTTP + wstęp do przedmiotu Kraków, 10 październik 2014 mgr Piotr Rytko Wydział Matematyki i Informatyki UJ
Co będzie na zajęciach Całość ćwiczeń podzielona została na trzy główne bloki: Blok 1 - o protokole HTML, sposób działania, kody odpowiedzi HTML i nagłówki, trochę o HTML 5 i CSS 3 oraz narzędziach javaskryptowych - jquery; Blok 2 - python DJango lub PHP, praca na języku skryptowym; Blok 3 - java webowa: servlety i JSP, wzorce projektowe DAO i MVC na serwletach i java beanach. Każdy z bloków kończy się projektem zaliczeniowym. Projekty są punktowane po 10 pt., każdy projekt ma swój deadline, po przekroczeniu którego max ilość punktów do zdobycia za niego spada co tydzień o 50% i jest zaokrąglana w dół (int, z obcięciem po przecinku), czyli odpowiednio 5, 2, 1, 0 pt. Oddanie projektu, nawet za 0 pt. jest warunkiem koniecznym do uzyskania zaliczenia. Podczas ćwiczeń możemy zrobić jedno kolokwium. Obecność na zajęciach jest obowiązkowa, dopuszczalne są max 2 nieobecności.
Co będzie dziś Protokół HTTP, sekwencja połączenia HTTP, typy żądań HTTP, kody statusów zwracanych przez protokół HTTP, nagłówki HTTP, lista kilku nagłówków przesyłanych do serwera, lista kilku nagłówków przesyłanych do klienta.
Protokół HTTP Komunikacja w sieci WWW odbywa się za pośrednictwem internetu i jego protokołów komunikacyjnych. Protokół jest zbiorem reguł, które ustalają formaty przesyłanych danych i normują ich transmisję. Opisują także jak ma się zachować komputer gdy wystąpią błędy w transmisji danych. Protokół HTTP umożliwia przekazanie informacji zarówno o wynikach poszukiwania obiektu jak i jego transmisji. Zaraz po zakończeniu transmisji, połączenie jest zamykane. Jeśli w zapytaniu niema podanego portu, domyślnie przyjmowany jest port nr 80. Protokół HTTP działa zwyczajowo na protokole TCP/IP, ale może równie dobrze działać na dowolnym innym protokole strumieniowym.
Sekwencja połączenia protokołu HTTP Utworzenie połączenia - tworzone jest połączenie TCP/IP (np na porcie nr 80) z serwerem WWW, wysłanie żądania - żądanie pobrania pliku, lub wysłanie plików na serwer, odpowiedź serwera - serwer zwraca komunikat z odpowiedzią, zawierający kod statusu oraz ewentualne dane, zakończenie połączenia - serwer zamyka połączenie TCP/IP.
Typy żądań HTTP GET - dane przesyłane są w adresie URI, POST - dane przesyłane w ciele zapytania (niejawnie), z reguły do przesyłania danych z formularza na serwer, DELETE - przesyła żądanie usunięcia wskazanego zasobu, OPTIONS - zwraca metody obsługiwane przez serwer dla wskazanego zasobu, HEAD - pytanie o informacje na temat zasobu, bez pobierania danych, TRACE - działa jak echo zwracając otrzymane zapytanie wysłane przez klienta (umożliwia sprawdzenie czy zapytanie nie zostało zmodyfikowane przez serwery pośrednie), PUT - uaktualnia wskazane zasoby, PATCH - podobnie jak PUT uaktualnia wskazane zasoby, ale nie koniecznie w całości, CONNECT - zamienia połączenie na tunel TCP/IP (stosowane np. do tunelowania połączenia SSL (HTTPS) przez niezabezpieczone serwery proxy).
Kody statusów zwracane przez protokół HTTP 1xx - kody informacyjne, 100 - Continue 101 - Switching Protocol 102 - Processing 110 - Connection Timeout 111 - Conection Refused 2xx - kody powodzenia, 200 - Ok 201 - Created 202 - Accepted 203 - Non-Authoriative Information 204 - No content 205 - Reset Content 206 - Partial Content 207 - Multi-Status 208 - Already Reported 3xx - kody przekierowania, 300 - Multiple Choices 301 - Moved Permanently 302 - Found 303 - See Other 304 - Not Modified 305 - Use Proxy 306 - Switch proxy (no longer used) 307 - Temporary Redirect 308 - Permanent Redirect 4xx - kody błędu klienta, 400 - Bad Request 401 - Unauthorized 402 - Payment Required 403 - Forbiden 404 - Not Found 405 - Method Not Allowed 406 - Not Acceptable 407 - Proxy Authentication Required 408 - Request Timeout 409 - Conflict 410 - Gone 411 - Length Required 412 - Precondition Failed 413 - Request Entity Too Large 414 - Request URI too Long 415 - Unsuported Media Type 416 - Requested Range Not Satisfable417 - Exception Failed 418 - I m a teapot 420 - Enchance Your Calm 5xx - kody błędu serwera. 500 - Internal Server Error 501 - Not Implemented 502 - Bad Gateway 503 - Server Unavaliable 504 - Gateway Timeout 505 - HTTP Version Not Supported 506 - Variant Also Negotiates 507 - Insufficient Storage 508 - Loop Detected 509 - Bandwidth Limit Exceeded 510 - Not Extended 511 - Network Authentication Required 598 - Network read timeout error 599 - Network connect timeout error
Nagłówki HTTP Nagłówki znajdują się na początku komunikacji, zaraz po linii zapytania/odpowiedzi. Nagłówki składają się z par rozdzielonych znakiem : identyfikator: wartość Każdy kolejny nagłówek jest oddzielony od poprzedniego znakiem końca linii. Można jednak kontynuować wypisywanie wartości nagłówka w nowej linii poprzez zaznaczenie tego za pomocą spacji lub tabulatora na pierwszym miejscu nowej linii, gdyż nowe nagłówki zaczynają się identyfikatorem zawierającym na pierwszym miejscu nowej linii inny znak różny od whitespace. Każdy nagłówek może mieć wiele wartości, są one wtedy oddzielana przecinkami. Koniec sekcji nagłówków jest oznaczony poprzez pustą linię (pierwszym znakiem w linii jest znak końca linii). Przydatnym hackiem na wyłuskanie sekcji nagłówków z odpowiedzi jest wpisanie poniższego kodu do konsoli inspektora. var url = $.ajax({type:'get',url:window.location.pathname,success: function() { alert (url.getallresponseheaders());}});
Lista kilku nagłówków przesyłanych do serwera Accept akceptowalny typ danych, Accept-Charset akceptowalny typ kodowania znaków, Accept-Encoding akceptowalne kodowanie (gzip, deflate, etc.), Authorization autoryzuje kwalifikacje dla autentykacji HTTP, Chache-Control określa mechanizm trzymania Chache dla tej transmisji, Connection określa jaki rodzaj połączenia preferuje użytkownik (np. keep-alive), Cookie ciasteczka ;D, Content-Type określa typ MIME dla ciała transmisji (w przypadku POST i PUT), Date data i czas wysłania zapytania, Host adres i port na którym nasłuchuje serwer, Max-Forwards określa maksymalną ilość przesłań dalej przez serwery proxy, Upgrade prosi serwer o upgrade do innego protokołu, User-Agent przesyła informacje o programie tworzącym zapytanie do serwera, Warning informacja o możliwości wystąpienia błędów w ciele zapytania.
Lista kilku nagłówków przesyłanych do serwera Allow dozwolone metody połączenia, Chache-Control określa politykę trzymania Chache (max-age=x [x - sekundy]), Connection opcje połączenia, Content-Encoding kodowanie używane w odpowiedzi, Content-Length długość odpowiedzi w oktetach (8-bit), Content-Location alternatywny adres zwracanych danych, Content-Disposition daje możliwość wywołania okna dialogowego dla pobrania pliku, Content-Type typ MIME dla zwracanych danych, Date data i czas wysłania odpowiedzi, Expires data i czas kiedy wysłana odpowiedź zostanie uznana za przeterminowaną, Location używane do przekierowania lub gdy jest tworzony nowy zasób, Server nazwa serwera wysyłającego odpowiedź, Set-Cookie ustawia ciasteczka na stronie klienta, Transfer-Encoding typ kodowania transferu aby zachować bezpieczeństwo danych, WWW-Authenticate określa typ autentykacji wymagany dla odbioru danych.
Dziękuję za uwagę.