7.1. HTTP un Web aplikāciju serveri

Ievads

Mērķi

  • Iepazīties ar HTTP protokola hederiem
  • Iepazīties ar servleta vides mainīgajiem jeb t.s. CGI mainīgajiem
  • HTTP atgriešanās kodi un ar tiem panākamie efekti
  • Web servera logfaili

Par HTTP protokolu

  • HTTP (HyperText Transfer Protocol)
  • HTTP protokola sākotnējo versiju piedāvāja T.B.Lee; HTTP ir Weba pamatprotokols; tas radās 90-to gadu sākumā, vienlaikus ar valodu HTML, URL adresēm, pirmajiem Web serveriem un Web klientiem un kopš 1995 pārspēja FTP un citus protokolus pēc trafika apjoma Internetā.
  • Pašreizējā versija: HTTP 1.1 ir specificēts RFC2616 dokumentā, sk. http://www.w3.org/Protocols/rfc2616/rfc2616.html; tas sīkāk aprakstīts W3C mājaslapā: http://www.w3.org/Protocols/
  • HTTP kā stabilu veidojumu vairs neviens tālāk neattīsta, toties uz šī protokola pamata veidojušies daži citi protokoli: HTTPS (kriptogrāfiski nodrošināts HTTP) un XMLP jeb SOAP
  • HTTP protokols vislabāk iet cauri ugunsmūriem; šī iemesla dēļ IRC, RMI, CORBA utml. protokolus mēdz "tunelēt" pa HTTP - ārējs serveris saņem HTTP pieprasījumus un pārtulko tos citos protokolos

MIME (Multipurpose Internet Mail Extension) tipi

MIME (Multipurpose Internet Mail Extension)

TipsNozīme
application/pdfAdobes PDF fails
application/x-java-archiveJAR fails
application/x-java-vmJavas CLASS fails
application/zipZIP arhīvs
text/cssCSS fails
text/htmlHTML fails
application/xhtml+xmlXHTML fails
text/plainVienkārša teksta (TXT) fails
text/xmlXML fails
image/gifGIF bilde
image/jpegJPEG bilde
image/pngPNG bilde

Web serveris norāda atgriežamā faila tipu ("Content-type" hederis); "x-" prefikss apakštipam norāda, ka šis faila tips nav oficiāli reģistrēts. Nākotnē ar divdaļīgiem MIME tipiem var rasties grūtības ("vārdtelpu konflikti"); būtu labāk, ja tie būtu hierarhiski tāpat kā Javas pakotnes.

URLi

URL (Uniform Resource Locator) - šobrīd neformāls termins - adrese dažos populāros protokolos (Web, FTP, Usenet, Gopher). Universālāki termini - URN, URI, utml. Sk. http://www.w3.org/Addressing/

  • Absolūtie URLi: http://www.delfi.lv/news/national/politics/article.php?id=4300951
  • Relatīvie URLi: ../politics/article.php?id=4300951
  • "Pusabsolūtie URLi: /styles/default.css

URLa sintakse:

protokols://[lietotajs:parole@]hosts[:ports]/taka/
    fails.extension[?querystring][#segments]
  • URLam vajadzētu visu laiku norādīt uz konceptuāli to pašu resursu (piemēram, šīsdienas avīzes numuru), lai gan tur iegūstamais saturs var mainīties
  • Labs URL nav garš - to viegli iegaumēt un uzrakstīt, teiksim, uz papīra salvetes

URLs var saturēt konkrētam gadskaitlim piesietu vārda-došanas shēmu

http://www.nsf.gov/cgi-bin/pubsys/browser/odbrowse.pl 
    - "piesiets" tehnoloģijai
http://www.nsf.gov/pubsys/ods/getpub.cfm?nsf9814 
    - joprojām ne visai labs
http://www.nsf.gov/pubs/1998/nsf9814/nsf9814.htm 
    - labs
http://www.w3.org/TR/2002/REC-xhtml1-20020801/ 
    - W3C arī tā dara

Cepumiņi

  • Viens no galvenajiem sesijas uzturēšanas līdzekļiem - Web serveris ar cepumiņu iezīmē klientu, lai pazītu nākamo pieprasījumu no klienta
  • Beztermiņa cepumiņi dzīvo uz vienu pārlūkprogrammas sesijas laiku, bet termiņa cepumiņi dzīvo norādīto laiku
  • Cepumiņus var nolasīt tikai tas hosts, kurš tos ir uzlicis, bet "draudzīgu aplikāciju" sadarbība var novest pie tā, ka klienta IDs ir redzams vienlaikus vairākiem hostiem.

HTTP pieprasījuma metodes

  • GET - normāls links vai adreses ierakstīšana pārlūkprogrammas lodziņā, neliela forma
  • POST - liela forma, lietotāja paroļu nosūtītšana, failu augšupielāde
<form action="url-adrese" method="GET">
<input type="text" name="field1">
...
<input type="submit" value="Nosūtīt">
</form>
http://www.google.com/search?ie=UTF-8&q=%C5%A0%C5%86ukurs

HTTP pieprasījuma hederi

Accept
Kādus MIME tipus pārlūkprogramma saprot; atsevišķos gadījumos Web serveris var sūtīt 404 (Page Not Found) kodu, ja pārlūkprogramma nesaprot pieprasītā resursa MIME tipu
Accept-Encoding
Piemēram "gzip" un "compress" - HTTP satura saspiešanas tehnoloģija
Authorization
Klients nosūta savus autorizācijas parametrus
Connection
"keep-alive" vai "close". HTTP 1.1 iespēja veidot ilgstošākas HTTP konekcijas ļauj efektīvāk nosūtīt, piemēram, dokumentu kopā ar bildēm
Content-Length
POST gadījumā - cik daudz formas datu
Cookie
Sīkdatnes, kuras pārlūkprogramma ir saņēmusi
Host
Kurš hosts izdarīja pieprasījumu
Referer
Ja pa linku ejam no Lapas A uz Lapu B, tad GET pieprasījumā lapai B minēts "Referer: Lapas_A_adrese". To var izmantot baneru reklāmas efektivitātes noteikšanai, utml.

Parasti visus šos hederus speciāli uzprogrammēts Web klients var izmainīt pēc patikas.

HTTP atbildes hederi

  • Cache-Control - "no-cache" norāda, ka nevajag kešot
    response.setHeader("Cache-Control", "no-cache"); 
    response.setHeader("Pragma", "no-cache"); 
    
  • Connection - "keep-alive" vai "close"
  • Content-Length - Cik garš ir saturs (īpaši svarīgi, ja konekcija paliek atvērta)
  • Content-Type - MIME tips un kodējums. Piemēram:
    Content-type: text/html; charset=windows-1257
    
  • Expires - Laiks, kad lappuse kļūst novecojusi - milisekundes
  • Last-Modified - Kad uz servera dokuments pēdējo reizi mainīts
  • Location - Jaunā lappuses vieta (ja lieto 302 atgr. kodu)
  • Refresh - Pārlūkprogramma pēc norādītā sekunžu skaita lūdz jaunu - atjaunotu lappusi
    response.setIntHeader("Refresh", 30);
    
  • Set-Cookie - Uzstāda jaunu cepumiņu

HTTP atgriešanās kodi

200 (OK)
Dokuments tiek sekmīgi nosūtīts
204 (No Content)
Pieprasījums saņemts sekmīgi, bet nenosūta jaunu lapu
302 (Moved Temporarily)
Izmanto kopā ar "Location:" hederi, lai nosūtītu servera puses redirektu
304 (Not Modified)
Serveris nesūta dokumentu, bet liek klientam lietot kešoto versiju
401 (Unauthorized)
Klients nav pareizi uzstādījis "Authorization" hederi
403 (Forbidden)
Serveris neļauj skatīties pieprasīto resursu (piemēram, nav atļauts lasīt direktorijas struktūru)
404 (Not Found)
Visizplatītākais kods
500 (Internal Server Error)
Kļūda servera puses aplikācijā

Logfaili

OC4J logfaili ir sekojošie: c:\oc4j\j2ee\home\log\http-web-access.log un citi faili šajā direktorijā.

127.0.0.1 - - [18/Nov/2002:22:56:58 +0200] "GET / HTTP/1.1" 200 2619
127.0.0.1 - - [18/Nov/2002:22:56:59 +0200] "GET /blaf.css HTTP/1.1" 200 5832
127.0.0.1 - - [18/Nov/2002:23:01:00 +0200] "GET /examples/jsp HTTP/1.1" 301 0
127.0.0.1 - - [18/Nov/2002:23:01:00 +0200] "GET /examples/jsp/ HTTP/1.1" 200 7135

OC4J administrēšana

Instalēt OC4J, izvēloties "admin" paroli

c:\oc4j\j2ee\home>java -jar oc4j.jar -install
Auto-unpacking C:\oc4j\j2ee\home\applications\dms0.war... done.
Auto-unpacking C:\oc4j\j2ee\home\applications\dms.war... done.
Enter an admin password to use: base
Confirm admin password: base
Installation done

OC4J servera piestartēšana:

c:\oc4j\j2ee\home>java -jar oc4j.jar

OC4J apturēšana

java -jar c:/oc4j/j2ee/home/admin.jar 
    ormi://localhost:23791 admin base -shutdown

OC4J pārstartēšana:

java -jar c:/oc4j/j2ee/home/admin.jar 
    ormi://localhost:23791 admin base -restart

Pēdējās 2 komandas vajadzīgas bieži - tās var ielikt BAT failos.