HTTP-protokolla ja Apache
- Luentotaltiointi
- HTTP (HyperText Transfer Protocol)
- Apache-WWW-palvelin
- SSI (Server Side Includes)
- Selainten yleisimmät ongelmat
Tällä luennolla käsitellään tärkeimmät kohdat HTTP-protokollasta sekä oleellisimpia Apache-WWW-palvelimen ominaisuuksia.
HTTP (HyperText Transfer Protocol)
HTTP on protokolla, jonka avulla selain ja WWW-palvelin keskustelevat.
Selain lähettää WWW-palvelimelle pyynnön:
HEAD /www/ HTTP/1.0 Connection: keep-alive Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Accept-Encoding: gzip,deflate Accept-Language: en-us,en;q=0.5 Host: appro.mit.jyu.fi Referer: http://appro.mit.jyu.fi/ User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 KEEP-ALIVE: 300
| HEAD /www/ HTTP/1.0 | pyydetään pelkkiä otsikkotietoja (HEAD) sivusta jonka osoite palvelimella on /www/ käyttäen HTTP/1.0-protokollaa |
| Connection: keep-alive | Käsketään pitää yhteys päällä |
| Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, video/x-mng, image/png, image/jpeg, image/gif;q=0.2, */*;q=0.1 | Luetellaan selaimen ymmärtämät mediatyypit. Kerrotaan myös mitä mediatyyppejä suositaan q-arvojen avulla |
| Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 | Luetellaan kelpaavat merkistöt |
| Accept-Encoding: gzip,deflate | Luetellaan tuetut koodaustavat (pakkaus) |
| Accept-Language: en-us,en;q=0.5 | Halutut kielet |
| Host: appro.mit.jyu.fi | Palvelimen nimi |
| Referer: http://appro.mit.jyu.fi/ | Osoite josta ollaan tulossa (sivu jolla olevaa linkkiä on klikattu) |
| User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.4) Gecko/20030624 | Selaimen tiedot |
Palvelin vastaa:
HTTP/1.0 200 OK Connection: close Date: Tue, 06 Apr 2004 10:53:18 GMT Accept-Ranges: bytes ETag: "2da29-2147-4044819d" Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) AxKit/1.62 mod_python/2.7.8 Python/1.5.2 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 mod_throttle/3.1.2 Vary: Accept Content-Length: 8519 Content-Type: application/xhtml+xml; charset=iso-8859-1 Last-Modified: Tue, 02 Mar 2004 12:44:13 GMT
| HTTP/1.0 200 OK | Statuskoodi - kaikki kunnossa |
| Connection: close | Suljetaan yhteys |
| Date: Tue, 06 Apr 2004 10:53:18 GMT | Päivä ja aika |
| Accept-Ranges: bytes | Sallitaan tavuina määritellyt pyynnöt |
| ETag: "2da29-2147-4044819d" | Tunniste |
| Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) AxKit/1.62 mod_python/2.7.8 Python/1.5.2 mod_ssl/2.8.12 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26 mod_throttle/3.1.2 | WWw-palvelimen tiedot |
| Vary: Accept | |
| Content-Length: 8519 | Sisällön koko |
| Content-Type: application/xhtml+xml; charset=iso-8859-1 | mediatyyppi ja merkistö |
| Last-Modified: Tue, 02 Mar 2004 12:44:13 GMT | Milloin viimeksi muutettu |
HTTP Status codes
Ainakin tärkeimmät seuraavista http-statuskoodeista on syytä tunteä
- 100 Continue
- 101 Switching Protocols
- 200 OK
- 201 Created
- 202 Accepted
- 203 Non-Authoritative Information
- 204 No Content
- 205 Reset Content
- 206 Partial Content
- 300 Multiple Choices
- 301 Moved Permanently
- 302 Found
- 303 See Other
- 304 Not Modified
- 305 Use Proxy
- 307 Temporary Redirect
- 400 Bad Request
- 401 Unauthorized
- 402 Payment Required
- 403 Forbidden
- 404 Not Found
- 405 Method Not Allowed
- 406 Not Acceptable
- 407 Proxy Authentication Required
- 408 Request Time-out
- 409 Conflict
- 410 Gone
- 411 Length Required
- 412 Precondition Failed
- 413 Request Entity Too Large
- 414 Request-URI Too Large
- 415 Unsupported Media Type
- 416 Requested range not satisfiable
- 417 Expectation Failed
- 500 Internal Server Error
- 501 Not Implemented
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Time-out
- 505 HTTP Version not supported
Apache-WWW-palvelin
Apache on maailman eniten käytetty WWW-palvelinohjelmisto
- User's Guide Apache 1.3
- Modules Apache 1.3
Suurin osa www-sovellusten tarvitsemasta toiminnallisuudesta kannattaa tehdä jo WWW-palvelimella koska selainten erot ja laajennuksien puute hankaloittavat joidenkin asioiden suorittamista selaimissa.
.htaccess
.htaccess on Apache-WWW-palvelimissa käytetty tiedosto, jolla voidaan muuttaa palvelimen asetuksia. .htaccess-tiedoston avulla voidaan toteuttaa mm. salasanasuojaus, edelleenohjaus ja mime-tyyppien lisäykset.
Edelleenohjaus
Edelleenohjaus tehdään HTTP:n location-komennolla. Apachesta löytyy suoraan valmiit komennot tätä varten. Edelleenohjausta EI PIDÄ TEHDÄ käyttämällä väliaikaisia www-sivuja ja niihin tehtyjä epästandardeja virityksiä!
Pysyvä edelleenohjaus:
Redirect permanent /tt-appro/index.html http://appro.mit.jyu.fi/
Väliaikainen edelleenohjaus:
Redirect /tt-appro/index.html http://appro.mit.jyu.fi/
Monimutkaisemmat edelleenohjaukset
RedirectMatch permanent /doc/tietokone/pc.* http://appro.mit.jyu.fi/doc/tietokone/
RedirectMatch permanent /doc/kayttojarjestelma/win.* http://appro.mit.jyu.fi/doc/kayttojarjestelma/
RewriteEngine on
RewriteOptions inherit
RewriteBase /doc/
RewriteRule ^(.*)\.svm $1 [C,E=WasHTML:yes]
RewriteCond %{REQUEST_FILENAME}.jpg -f
RewriteRule ^(.*)$ $1.jpg [S=1]
RewriteCond %{ENV:WasHTML} ^yes$
RewriteRule ^(.*)$ $1.png
Mediatyypit
Mediatyyppi kertoo selaimelle minkälainen tiedosto on kyseessä. Selain ei saa itse arvailla tiedoston tyyppiä tiedostopäätteen perusteella.
Esimerkki:
AddType text/plain .html AddType text/html .txt
Usein käytettyjä mediatyyppejä
AddType text/xml .xml AddType text/xml .xsl AddType application/x-ogg .ogg AddType application/smil .smil AddType video/avi .avi AddType video/x-ms-wmv .wmv AddType application/vnd.ms-excel .xls Addtype application/msword .doc Addtype application/x-msaccess .mdb
- Tekstitiedosto .html-pääte
- HTML-tiedosto .txt-pääte
Salasanasuojaus
Sijoita suojattavassa kansiossa olevaan .htaccess-tiedostoon rivit:
AuthUserFile /foo/bar/tunnus/.users AuthGroupFile /dev/null AuthName ByPassword AuthType Basic <Limit GET> require valid-user </Limit>
AuthUserFile-kohtaan annettava polku on oltava www-palvelimella toimiva ja sen on osoitettava salasanatiedostoon. Oikean polun voi tarkistaa www.cc.jyu.fi-koneessa.
Salasanan ja käyttäjätunnuksen voi luoda komennolla:
htpasswd .users tunnus
Jos .users-tiedosto luodaan ensimmäistä kertaa tai tyhjennetään niin rivin on oltava muotoa:
htpasswd -c .users tunnus
Automaattinen kielivalinta (content negotiation)
Apache mahdollistaa automaattisen kielivalinnan käyttäjän selaimen asetuksien perusteella.
Lisätään tiedostoihin kieltä koskeva pääte:
index.html.en index.html.fi index.html.fr
DirectoryIndex index.var index.html LanguagePriority fi en AddHandler type-map .var AddType application/xhtml+xml .xml
index.var-tiedosto:
URI: index.html.fi Content-Language: fi Content-Type: text/html URI: index.html.en Content-Type: text/html Content-Language: en
SSI (Server Side Includes)
SSI-komennot ovat HTML-dokumenttiin upotettuja käskyjä joilla voidaan tulostaa muuttujien arvoja tai suorittaa ohjelmia
ATK-keskuksen www-palvelimessa SSI-komentoja sisältävien tiedostojen
pääte pitää olla .shtml
Palvelinta voi käskeä tulkitsemaan SSI-komennot mistä tahansa tiedostoista määräämällä:
AddHandler server-parsed .html
Kertoo dokumentin muutosajankohdan:
<!--#echo var="LAST_MODIFIED"-->
Lisää tähän kohtaan dokumenttia tiedoston linkit.ssi sisällön:
<!--#include virtual="linkit.ssi"-->
Esimerkki: pohja.txt
Lisätietoja SSI:stä löytyy osoitteista:
- http://www.apache.org/docs/mod/mod_include.html
- http://www.mit.jyu.fi/opiskelu/seminaarit/ohjelmistotekniikka/cgi/#Heading13
Selainten yleisimmät ongelmat
Suuri osa www-sivujen ongelmista johtuu käytettyjen selainten rikkinäisistä, vääristä tai puutteellisista tavoista implementoida suosituksia.
- Selaimen pitäisi kunnioittaa palvelimen määrittämää mediatyyppiä
- IE toimii väärin tulkitessaan tiedoston mediatyyppiä tiedoston päätteen perusteella.
- Selaimen pitäisi lähettää www-palvelimelle lista vain tuetuista mediatyypeistä
paremmuusjärjestyksessä
- Viimeisenä vaihtoehtona voi lähettää */*

Käyttäjien kommentit