<xlacko1@fi.muni.cz>
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).
Popísané v RFC 2396 (Uniform Resource Identifiers: Generic Syntax)
URI
URL
http://www.ietf.org/rfc/rfc2396.txt
URN
urn:isbn:0-486-27557-4
Š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 |
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 |
Krátky prehľad; presnejšie viď. RFC 7231 (§6: Response Status Codes)
1** |
Informácie | |
2** |
Úspešná operácia | |
200 | OK | Operácia ukončená úspešne, odpoveď obsahuje dáta v závislosti na požiadavke |
204 | No Content | Operácia skončila úspešne, ale odpoveď neobsahuje telo |
3** |
Presmerovanie | |
301 | Moved Permanently | Zdroj bol presunutý na novú URI |
4** |
Chyby klienta | |
401 | Unauthorized | Zdroj vyžaduje autentifikáciu |
402 | Forbidden | Server odmietol spracovať požiadavku |
404 | Not Found | Zdroj sa nenašiel |
418 | I'm a Teapot | RFC 2324 |
5** |
Chyby servera | |
500 | Internal Server Error | Server narazil na neznámu chybu |
7** |
Chyby vývojárov | |
701 | Meh | 7XX-RFC Nebrať vážne ;-) |
719 | I'm NOT a Teapot | |
725 | It Works On My Machine | |
740 | Computer Says No |
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ď.
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
mod_perl
, mod_php
, ...mod_auth_{basic,digest,...}
mod_ssl
<IfModule unixd_module>
User apache
Group apache
</IfModule>
apache
a rovnomennou skupinouDocumentRoot "/www"
<Directory "/www">
Options Indexes
AllowOverride AuthConfig
</Directory>
Indexes
).htaccess
<Files ".ht*">
Require all required
</Files>
Include conf/extra/httpd-languages.conf
Alias /apollo /mnt/apollo
mens.fi.muni.cz:8000/apollo/Serials
odkazuje na /mnt/apollo/Serials
na stroji mens
.<Directory "/mnt/apollo">
AuthType Basic
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
</Directory>
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/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 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í
wget
- The Non-Interactive Network Downloaderwget http://mens.fi.muni.cz:8080/pa165/403 -O 403.html
403.html
curl
- Transfer a URLcurl -I www.google.com
curl -X GET http://mens.fi.muni.cz:8080/pa165/rest/trips
GET
curl -X DELETE http://mens.fi.muni.cz:8080/pa165/rest/trips/1
DELETE
curl -X GET -H "Accept: text/plain" http://mens.fi.muni.cz:8080/pa165/rest/trips
GET
s vlastným záznamom v hlavičkecurl -X GET -H "Range: bytes=50-100" www.linux.cz