Je to nejčastěji používaný protokol v internetu. HTTP (HyperText Transfer Protocol) je protokol aplikační vrstvy. Byl navržený pro výměnu hypertextových dokumentů ve formátu HTML, které jsou uživatelům zobrazeny přes webový prohlížeč. Ale používá se i jinde, například pro webové rest služby. U těch se obvykle nepřenáší hypertextové dokumenty, ale data zabalená ve formátu JSON nebo XML.
GET | vrací HTML stránku na dané URL |
POST | posílání dat na server |
HEAD | vrací hlavičku HTML stránky |
PUT | nahraje objekt na server |
DELETE | smaže objekt ze serveru |
CONNECT | naváže TCP spojení přes HTTP proxy (nutné pro SSL) |
1xx | informační |
2xx | úspěch |
3xx | přesměrování |
4xx | chyba na straně klienta |
5xx | chyba na straně serveru |
nc fi.muni.cz 80 GET / HTTP 1.1 Host: www.fi.muni.cz HTTP/1.1 200 OK Date: Sun, 19 Oct 2014 19:17:45 GMT Server: Apache Content-Location: index.xhtml.cs Vary: negotiate,accept-language,cookie TCN: choice Last-Modified: Sat, 18 Oct 2014 23:38:48 GMT ETag: "368004-5eae-505bafbac9200" Accept-Ranges: bytes Content-Length: 24238 Connection: close Content-Type: text/html; charset=UTF-8 Content-Language: cs <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>Fakulta informatiky Masarykovy univerzity</title> ...
nc fi.muni.cz 80 GET // HTTP/1.1 Host: www.fi.muni.cz Range: bytes=100-110 HTTP/1.1 206 Partial Content Date: Mon, 20 Oct 2014 08:25:55 GMT Server: Apache Content-Location: index.xhtml.cs Vary: negotiate,accept-language,cookie TCN: choice Last-Modified: Sun, 19 Oct 2014 23:39:04 GMT ETag: "368003-5eae-505cf1a781600" Accept-Ranges: bytes Content-Length: 11 Content-Range: bytes 100-110/24238 Connection: close Content-Type: text/html; charset=UTF-8 Content-Language: cs p://www.w3. ...
HTTP neumí přenášet objekty paraleně, místo toho se otevírá několik TCP spojení. SPDY umožňuje multiplexing.
Komprimace hlaviček
Server push a server hint
Není standardní součástí Apache, nutné doinstalovat a načíst modul mod_spdy.V různých distribucích na různých místech a pod různými jmény :-):
Debian: /etc/apache2/apache2.confListen 80
DocumentRoot /var/www/html
AddDefaultCharset UTF-8
AllowOverride All Options MultiViews Indexes FollowSymLinks
Soubor v konkrétním adresáři, vhodné když chceme například zaheslovat adresář. Musí být povolený AllowOverride.
Po každé změně konfigurace (kromě kontextu .htaccess) je nutné provést restart HTTP služby.
apachectl graceful
<VirtualHost *:80> ServerName www.example.com DocumentRoot /www/example1 </VirtualHost>
Options MultiViews Indexes FollowSymLinks LanguagePriority en cs
AddCharset UTF-8 utf8 AddCharset iso-8859-2 iso8859-2 AddLanguage cs cs AddLanguage en en
Secure Sockets Layer zabezpečuje spojení mezi serverem a klientem pomocí šifrování a autentizace.
Certifikát podepsaný sám sebou vytvoříme interaktivním příkazem:
openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/apache.pem -keyout /etc/ssl/certs/apache.key
U name-based virtuálních serverů je se SSL problém. SSL spojení se vytvoří ještě před jakoukoliv HTTP komunikací, v tomto momentě server netuší, na jaký virtuální server bude klientův požadavek směrovat.
Je možné použít SNI (Server Name Indication), musí být podpora na straně serveru i na straně klienta (ta je u nových prohlížečů dobrá).
<VirtualHost 192.168.1.1:443> SSLEngine on SSLCertificateFile /etc/ssl/httpd.crt SSLCertificateKeyFile /etc/ssl/httpd.key </VirtualHost>
Basic access authentication nevyžaduje cookies, login a heslo je zasíláno v hlavičce při každém requestu. Tyto údaje jsou zašifrovány pomocí base64, je možné je odposlechnout při každém reqeustu. Zajímavé je, že v HTTP není metoda, jak takto přihlášeného klienta odhlásit.
WWW-Authenticate: Basic realm="nmrs_m7VKmomQ2YM3:"
Nebo můžeme používat autentizační token uložený v cookies, jeho získání neumožní zpětné získání hesla. Samotný autentizační mechanismus (odeslání hesla přes formulář), by ale měl stejně běžet přes SSL.
Cookie: name=value; name2=value2
<Location /secure> AuthType basic AuthName "private area" AuthBasicProvider file AuthUserFile .htapasswd Require valid-user </Location>
Mod_auth_basic je možné napojit na několik druhů autentizačních modulů (LDAP a jiné databáze), nejjednodušší z nich je asi mod_authn_file. Stačí pouze vytvořit soubor s hesly příkazem:
htpasswd -c .htapasswd username
ScriptAlias /skript.cgi "/var/www/cgi-bin/skript.pl"
#!/usr/bin/perl print "Content-type: text/html\n\n"; print "Hello, World.";
/etc/apache2/mods-availableNačtení/vypnutí modulů: a2enmod, a2dismod
/etc/apache2/sites-availableNačtení/vypnutí virtuálních hostů: a2ensite, a2dissite
Proxy server je prostředník mezi počítačem a serverem. Pro server se tváří jako klient, přijatou odpověď následně posílá zpět na klienta. Pokud ji má odpověď v keši, serveru se nedotazuje.