Protokół HTTP 1.1
*)Wprowadzenie
Jarek Durak
* rfc2616 źródło www.w3.org 1999
HTTP
Hypertext Transfer Protocol
Protokół transmisji hipertekstu
został zaprojektowany do komunikacji serwera WW z klientem (przeglądarką)
używany od 1990 roku do obsługi WWW
jest protokołem warstwy aplikacyjnej dla rozproszonych hipermedialnych systemów
może być używany do innych zadań niż WWW
umożliwia negocjację rodzaju i typu danych
Historia HTTP
Pierwsza wersja protokołu 0.9 z 1990r była bardzo prosta
Wersja 1.0 wprowadzała:
formaty podobne do typu MIME zawierające meta- informacje o danych
zmodyfikowane żądania i odpowiedzi
Wersja 1.1
obsługa hierarchicznych serwerów proxy (pośredników)
stałych połączeń i hostów wirtualnych
Pojęcia
Serwer proxy (pośrednik)
pośredniczy w przesyłaniu żądań między
przeglądarką WWW i serwerem WWW, działa jak klient i serwer
Przechowuje raz ściągnięte strony
Serwer wirtualny
wywoływany adres URL (http://www.wp.pl) jest obsługiwany przez serwer, którego podstawowy adres jest zupełnie inny.
Jeden serwer fizyczny obsługuje zwykle wiele serwerów wirtualnych
Pojęcia
MIME (Multipurpose Internet Mail Extensions)
format pozwalający na szczegółowy opis przesyłanych danych
Hipertekst
tekst zawierający znaczniki i odwołania do innych dokumentów lub innego fragmentu tekstu
Protokół
Język komunikacji
Protokół HTTP
Używa najczęściej protokołu TCP/IP do przesyłania żądań i odpowiedzi
port 80 dla serwerów WWW
8080 dla serwerów proxy
wersja 1.0 wymaga oddzielnych połączeń dla każdego elementu strony - żądania (tekst,
grafika ...)
wersja 1.1 pozwala na przesyłanie wielu
żądań/odpowiedzi w jednym połączeniu
HTTP URI i URL
identyfikują żądany zasób
protokół://serwer:port/ścieżka?parametry
parametr: zmienna1=wartość1&zmienna2=wartość2&...
minimalnie http://serwer/
znaki specjalne zastępowane są ich wartością szesnastkową poprzedzoną „%”
następujące URI są równoważne
http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.com:/%7esmith/home.html
HTTP URI i URL
? - oddziela nazwę zasobu na serwerze od listy parametrów
& - oddziela poszczególne pary parametr=wartość
Znaki specjalne (spacja,?,&,%...) oraz niektóre znaki narodowe muszą być
zakodowane za pomocą znaku % i kodu hex ASCII znaku np:
<spacja> - %20
HTTP URI i URL
HTTP URI i URL
http://www.google.com/search?hl=pl&ie=UTF-8&oe=UTF-8&q=agh&
btnG=Szukaj&lr=lang_pl
http:// - użycie protokołu HTTP
www.google.com - nazwa serwera
search – nazwa pliku na serwerze
lista parametrów:
hl=pl – host location – Polska
q=agh – question – agh
ie=UTF-8 – kodowanie znaków UTF-8
btnG=Szukaj – pytanie wysłane przyciskiem Szukaj
lr=lang_pl – language requested – język polski
HTTP format czasu
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, zmodyfikowane przez RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, przestarzałe RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C asctime() format
HTTP aplikacje
User-Agent:
określa zgodność przeglądarki ze standardem konkretną wersje np.:
Mozilla/4 MSIE /4.0b2
Server:
określa nazwę i wersję serwera WWW np.:
Apache/2.0.45
IIS/5.0
HTTP waga
przyjmuje wartości od 0 do 1
np.: q=0.7
język
umożliwia negocjację języka między serwerem i przeglądarką
Accept-Language jest ustawione przez klienta
Content-Language jest ustawione przez serwer
Przykładowe wartości:
pl, en, en-US, en-cockney, i-cherokee, x- pig-latin,
HTTP wiadomość
Typ widomości
Request - żądanie
Response - odpowiedź
Nagłówek wiadomości
składa się z par nazwa:wartość
Treść wiadomości (Message Body)
Długość wiadomości (Message Length)
określana za pomocą Content-Length
określa długość treści wiadomości
HTTP żądanie
Metoda <pojedynczy odstęp> żądany-URI
<pojedynczy odstęp> Wersja-HTTP <znak nowej linii> Treść-wiadomości
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
Metody
określa sposób żądania informacji np. GET
żądany-URI
pełny adres, ścieżka lub „*” co oznacza odwołanie do samego serwera np. OPTIONS * HTTP/1.1
HTTP żądanie
GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org
jest równoważne
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
HTTP żądanie - metody
OPTIONS
żądanie informacji o połączeniu
dotyczy najczęściej serwera a nie konkretnego zasobu np. OPTIONS * HTTP/1.1
GET
żądanie zasobów zasobów przekazywane
poprzez URI : GET http://www.wp.pl/szukaj.html?szukaj=www HTTP/1.1
odmiany: warunkowy lub częściowy
HTTP żądanie - metody
HEAD
jak GET, w odpowiedzi nie może być treści
POST
żądanie nie jest widoczne w URL
używany jest do przesyłania większych porcji informacji (np. plików).
czas ważności żądania jest ograniczony
PUT
stosowany jest do umieszczania określonej informacji na serwerze (np. pliku)
HTTP żądanie - metody
DELETE
usuwanie zasobów z serwera (plików)
TRACE
pozwala klientowi sprawdzić informację otrzymywaną przez serwer
Odpowiedź nie zawiera treści
nie jest wysyłane przez serwer proxy
CONNECT
używane przez serwery proxy
HTTP Odpowiedź
Wersja-HTTP <pojedyncza spacja> Kod-Stanu
<pojedyncza spacja> Opis-Kodu <Nowa Linia>
Treść-Wiadomości
Kod-Stanu jest liczbą trzycyfrową określającą
powodzenie, niepowodzenie operacji i jego rodzaj
1xx - żądanie odebrane, operacja w toku
2xx - żądanie odebrane, zaakceptowane
3xx - przekierowanie żądania
4xx - błąd w żądaniu, zła składnia, brak dostępu, brak autoryzacji ...
5xx - błąd serwera
HTTP nagłówek
Nagłówek ogólny
Nagłówek żądania
Nagłówek odpowiedzi
HTTP nagłówek
Accept
w nagłówku żądania określa jakie typy informacji są akceptowane w odpowiedzi
Accept: text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c
Accept-Charset
określa jaki/jakie strony kodowe znaków narodowych są akceptowane w odpowiedzi
Accept-Charset: iso-8859-2, unicode-1-1;q=0.8
Accept-Encoding
określa jakie kodowanie jest akceptowane
HTTP nagłówek
Accept-Encoding
Accept-Encoding: compress, gzip
Accept-Language
określa akceptowane w odpowiedzi języki narodowe
Accept-Language: da, en-gb;q=0.8, en;q=0.7
Accept-Ranges
określa zakresy danych akceptowane przez serwer
HTTP nagłówek
Age
czas w jakim oczekiwana jest odpowiedź
Age: 20 (w sekundach)
Allow
określa akceptowane przez serwer metody
Allow: GET, HEAD, PUT
Authorisation
wysyłany jest przez klienta, który chce się
uwierzytelnić (np. nazwa użytkownika i hasło)
wysyłany jest w odpowiedzi na ko
HTTP nagłówek
Authorisation
wysyłany jest w odpowiedzi na kod-stanu 401 (brak autoryzacji)
Cache-Control
nagłówek ogólny określający przechowywanie danych w łańcuchu żądań/odpowiedzi
Cache-Control: dyrektywy
w żądaniu używane są dyrektywy:
no-cache, no-store, max-age=delta-sek., max- stale=delta-sek., min-fresh=d-sek., no-transform
HTTP nagłówek
Cache-Control
w odpowiedzi używane są dyrektywy:
public, private, no-cache, no-store, no-transform, must-revalidate, proxy-revalidate
Connection
określa parametry dotyczące połączenia (bez pośrednictwa proxy)
Content-Encoding
określa sposób kodowania treści informacji
Content-Encoding: zip
HTTP nagłówek
Content-Language
określa język narodowy treści informacji
Content-Encoding: pl, en
Content-Length
określa wielkość treści informacji w bajtach
Content-Length: 3495
Content-Location
może służyć do określenia zasobów znajdujących się w innym miejscu niż przesyłana treść
HTTP nagłówek
Content-MD5
pozwala na umieszczenie skrótu
kryptograficznego wiadomości służącego sprawdzeniu integralności informacji.
Content-MD5: md5-digest
Content-Rage
określa jaka część informacji będzie przesłana w treści informacji w połączeniu z nagłówkiem
„Partial content”
Content-Rage: bytes 500-999/1234
HTTP nagłówek
Content-Type
pozwala określić typ przesyłanych w treści danych.
Content-Type: text/html
Content-Type: text/html; charset=iso-8859-2
Date
określa datę utworzenia wiadomości
Date: Tue, 15 Nov 1994 08:12:31 GMT
HTTP nagłówek
Expect
Określa zachowanie serwera wymagane przez klienta
Expires
określa wygaśnięcia ważności wiadomości
Expires: Thu, 01 Dec 1994 16:00:00 GMT
From
określa adres e-mail osoby używającej przeglądarki
From: webmaster@w3.org
HTTP nagłówek
Host
określa adres serwera i port do którego wysyłamy żądanie
Host: www.w3.org:80
odwołując się do http://www.w3.org/pub/WWW/
otrzymamy np.:
GET /pub/WWW/ HTTP/1.1 Host: www.w3.org
Dyrektywy warunkowe:
if-Match, If-Modified-Since, If-None-Match, If-Range,
HTTP nagłówek
Last-Modified
Określa datę ostatnie modyfikacji dokumentu
Location
określa URL używany do przekierowania klienta
Location: http://www.w3.org/pub/WWW/People.html
Max-Forwards
pozwala ograniczyć ilość pośrednich serwerów proxy
HTTP nagłówek
Pragma
Określa sposób traktowania informacji przez systemy cache/proxy
Pragma: no-cache
Proxy-Authenticate, Proxy-Authorization
pierwszy jest odpowiedzią serwera proxy na
próbę połączenia, drugi odpowiedzią klienta na konieczność autoryzacji przez serwer proxy
Rage
określa zakres fragmentu przesyłanej treści
HTTP nagłówek
Referer
wysyłane przez klienta pozwala na określenie przez serwer adresu z którego klient się odwołał
Retry-After
Określa w razie statusu serwera (usługa czasowo niedostępna) 503 czas po którym powinno
nastąpić ponowienie próby
Server
określa nazwę i wersję serwera oraz komentarz
Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1
HTTP nagłówek
User-Agent
Określa wersję oprogramowania klienta (przeglądarki)
User-Agent: Mozilla/4.76 [en] (WinNT; U)
Via
Określa pośredników (proxy)