HTTP, WWW servery

Roman Lacko <xlacko1@fi.muni.cz>

Obsah

Hyper-Text Transfer Protocol

HTTP (Hyper-Text Transfer Protocol) je protokol aplikačnej vrstvy TCP/IP sieťového modelu, štandardne počúva na porte 80 (443 HTTPS) nad TCP. Primárne slúži na prenos hypertextových dokumentov, napr. (X)HTML (Extensible Hyper-Text Markup Language).

Vývoj protokolu koordinovali IETF (Internet Engineering Task Force) a W3C (World Wide Web Consortium) dokumentami RFC, najznámejším je RFC 2616 (1999), ktoré definovalo HTTP 1.1 a jeho novšia verzia RFC 7231.

Komunikácia využíva architektúru klient - server, kde klient odošle požiadavku (request), server požiadavku vyhodnotí a odošle odpoveď (response), ktorá obsahuje stavový kód a prípadne dáta (napr. žiadaný dokument).

Adresovanie zdrojov HTTP

Popísané v RFC 2396 (Uniform Resource Identifiers: Generic Syntax)

URI

URL

URN

Metódy HTTP

Špecifikované v RFC 7231 (§4: Request Methods)

Názov Od verzie Popis
GET 0.9 Požiadavka na prevzatie webového zdroja (v tele odpovede)
HEAD 1.0 V princípe podobné ako GET, ale prevezme len hlavičku odpovede bez tela
POST 1.0 Požiadavka na predanie dát do webovému zdroju (dáta z formuláru, anotácie, správy...)
PUT 1.0 Požiadavka na zaradenie dát medzi webové zdroje servera
DELETE 1.0 Požiadavka na odstránenie webového zdroja
TRACE 1.1 Server vráti späť požiadavku, slúži pre kontrolu klienta
CONNECT 1.1 Server neukončí spojenie, ale ponechá spojenie ako TCP/IP tunel, zvyčajne nad SSL
OPTIONS 1.1 Vráti metódy, ktoré zadaný zdroj podporuje

Záznamy v hlavičke

Hlavičky poskytujú dodatočné informácie pre server alebo klienta, napr. podporované formáty, prihlasovacie údaje a podobne. Sú špecifikované v RFC 7231 v sekciách §5: Request Header Fields a §7: Response Header Fields. Najbežnejším záznamom v hlavičke je Content-Type.

Požiadavka
Accept Content-Type odpovede, ktorú klient akceptuje
Accept-{Encoding,Charset,Language} nastavenie znakovej sady, kódovania a jazyka, ktoré klient podporuje
Content-Type MIME typ obsahu tela (POST, PUT)
Range klient žiada len čiastočnú odpoveď (uvedie sa rozsah napr. v bytoch)
server nemusí podporovať; skontroluje sa v hlavičke odpovede Accept-Ranges
Odpoveď
Accept-Ranges špecifikuje možné spôsoby čiastočného prenosu dokumentu (napr. bytes)
Content-{Encoding,Language} kódovanie a jazyk odpovede
Location používa sa pri presmerovaní, napr. s 301 Moved Permanently
Server názov servera

Stavové kódy

Krátky prehľad; presnejšie viď. RFC 7231 (§6: Response Status Codes)

1** Informácie
2** Úspešná operácia
200OKOperácia ukončená úspešne, odpoveď obsahuje dáta v závislosti na požiadavke
204No ContentOperácia skončila úspešne, ale odpoveď neobsahuje telo
3** Presmerovanie
301Moved PermanentlyZdroj bol presunutý na novú URI
4** Chyby klienta
401UnauthorizedZdroj vyžaduje autentifikáciu
402ForbiddenServer odmietol spracovať požiadavku
404Not FoundZdroj sa nenašiel
418I'm a TeapotRFC 2324
5** Chyby servera
500Internal Server ErrorServer narazil na neznámu chybu
7** Chyby vývojárov
701Meh7XX-RFC
Nebrať vážne ;-)
719I'm NOT a Teapot
725It Works On My Machine
740Computer Says No

Apache Server

Podľa W3Techs je Apache Server najpoužívanejšou implementáciou HTTP servera. Implementácia je modulárna a podporuje dynamicky generované stránky v jazykoch PHP, Perl, Python atď.

Konfigurácia

Umiestnenie konfigurácie závisí na distribúcii, napr. na Debiane pre Apache2 je to /etc/apache2/apache2.conf. Príklad konfigurácie na stroji Mens.

ServerRoot "/opt/apache-server-2.4.12"
Listen 1.2.3.4:80
Listen 80
Listen 8000
LoadModule headers_module modules/mod_headers.so
<IfModule unixd_module>
User apache
Group apache
</IfModule>
DocumentRoot "/www"
<Directory "/www">
Options Indexes
AllowOverride AuthConfig
</Directory>
<Files ".ht*">
Require all required
</Files>
Include conf/extra/httpd-languages.conf
Alias /apollo /mnt/apollo
<Directory "/mnt/apollo">
AuthType Basic
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
</Directory>

Virtuálne servery

Apache umožňuje beh viacerých nezávislých serverov na jednom stroji. V konfigurácií je nutné uviesť stroje s ich doménovým menom alebo IP ich rozhrania:

<VirtualHost *:80
ServerName www.example.com
DocumentRoot /www/example
</VirtualHost>

SSL

SSL/TSL sú protokoly, ktoré poskytujú bezpečnú komunikáciu medzi klientom a serverom. Tieto protokoly sú umiestnené medzi TCP a HTTP (HTTPS).

Minimálna konfigurácia:

LoadModule ssl_module modules/mod_ssl.so
Listen 443

<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile /path/to/www.example.com.cert
SSLCertificateKeyFile /path/to/www.example.com.key
</VirtualHost>

nginx

nginx je druhá najpoužívanejšia implementácia HTTP servera. nginx na rozdiel od Apache Servera využíva asynchrónnu, udalosťami riadenú architektúru.

Zhrnutie vlastností

Užitočné nástroje

wget - The Non-Interactive Network Downloader

wget http://mens.fi.muni.cz:8080/pa165/403 -O 403.html

curl - Transfer a URL

curl -I www.google.com
curl -X GET http://mens.fi.muni.cz:8080/pa165/rest/trips
curl -X DELETE http://mens.fi.muni.cz:8080/pa165/rest/trips/1
curl -X GET -H "Accept: text/plain" http://mens.fi.muni.cz:8080/pa165/rest/trips
curl -X GET -H "Range: bytes=50-100" www.linux.cz

Literatúra