360 likes | 600 Views
HTTP. HyperText Transfer Protocol. Pl ā ns. Internet & Web Arhitektūra HTTP protokols Web roboti. Internet & Web. The Internet is a worldwide, publicly accessible series of interconnected computer networks that transmit data by packet switching using the standard Internet Protocol (IP)
E N D
HTTP HyperText Transfer Protocol
Plāns • Internet & Web • Arhitektūra • HTTP protokols • Web roboti
Internet & Web • The Internet is a worldwide, publicly accessible series of interconnected computer networks that transmit data by packet switching using the standard Internet Protocol (IP) • The World Wide Web (commonly shortened to the Web) is a system of interlinked, hypertext documents accessed via the Internet • Web application is an application that is accessed via web over a network such as the Internet or an intranet
Arhitektūra • Dalīta klienta servera arhitektūra • Saziņa notiek pa datortīklu • Datortīklu arhitektūras abstraktais apraksts – TCP/IP modelis (Internet reference model)
TCP/IP modelis IP = Internet Protocol TCP = Transmission Control Protocol
Lietojumprogrammu līmenis • Piedāvā lietotājam noderīgo protokolu kopumu • Klienta servera sistēmu piemēri un to lietojumprogrammu līmeņa protokoli: • The WorldWide Web (HTTP) • E-mail (SMTP & POP) • Reliable file transfer (FTP) • Internet Domain Name System (DNS)
Web klienti un Web serveri • Web klientu parasti sauc par user agent un tipiskais piemērs ir pārlūkprogramma (browser) • Internet Explorer, Firefox, Opera, Netscape • Web serveris ir programma, kas ir atbildīga par klientu pieprasījumu saņemšanu un atbildes aizsūtīšanu atpakaļ • Apache, Microsoft Internet Information Server • HTTP irpieprasījuma/atbildes (request/response)protokols starp klientiem un serveriem
Web lapas • Parasti klienti pieprasa no serveriem web lapas • Par web lapu sauc World Wide Web informācijas resursu, kuram var piekļūt ar pārlūkprogrammas palīdzību • Šī informācija parasti ir HTML vai XHTML formātā • Katrai web lapai ir URL adrese • No vienas web lapas var aiziet uz citām lapām izmantojot hiperteksta saites • Web lapa sastāv no “objektiem” • teksts, bildes, audio, video
Optional server port (default = port 80) Server domain name Object path name URL - Universal Resource Locators www.someSchool.edu:8080/someDept/pic.gif • URL sastāvdaļas: • servera adrese • (neobligāts) porta numurs • ceļš līdz resursam
Klienta/servera saziņas scenārijs Web klientu/serveru sazināšanas notiek pa HTTP protokolu • Lietotājs norāda web lapas URLu pārlūkprogrammā • Pārlūkprogramma sūta HTTP pieprasījumu serverim • Serveris apstrādā pieprasījumu un sūta pieprasītu web lapu atpakaļ klientam • Pārlūkprogramma rāda web lapas saturu lietotājam
HTTP pārskats • HTTP ir standarts sazināšanas protokols World Wide Web informācijas pārsūtīšanai • HTTP apraksta ziņojumus (request/response) ar kuriem var apmainīties klienti un serveri • Protoklu izstrādāja W3C (World Wide Web Consortium) un IETF (Internet Engineering Task Force) • HTTP versijas: • HTTP 1.0 (1996) - RFC 1945 • Šodienas versija HTTP 1.1 (1999) – RFC 2068
Savienojumi • Parasti HTTP klients inicializē pieprasījumu izveidojot TCP savienojumu pie servera uz 80 porta (kaut gan formāli tas nav obligāti) • HTTP serveris “klausās” šo portu un gaida pieprasījumus no klientiem • HTTP ir “stateless” • serveris neglabā informāciju par iepriekšējiem pieprasījumiem • HTTP 1.0 – viens request/response cikls un savienojums tiek pārtraukts • HTTP 1.1 – pastāvīgu savienojumu atbalsts
HTTP piemērs • Lietotājs ievada URL, piemērām, http://www.someSchool.edu/someDept/index.html • Pieprasītais objekts satur HTML tekstuun atsauces uz vēl 10 JPEG bildēm • Pārlūkprogramma aizsūta HTML “GET” pieprasījumu serverim www.someSchool.edu • Serveris atrod un aizsūta atpakaļ HTML failu • Pārlūkprogramma lasa failu un pēc kārtas sūta vēl 10 pieprasījumus priekš iekļautām JPEG bildēm
HTTP ziņojumu formāts • Ir divi HTTP ziņojumu tipi: • pieprasījums (request) • atbilde (response) • Ziņojumi ir ASCII formātā • human-readable format • HTTP pieprasījuma ziņojums sastāv no: • Pieprasījuma rinda (request line) • Hederu rindas (header lines) • Tukša rinda • (neobligāts) Ziņojuma ķermenis (message body)
HTTP pieprasījuma piemērs • Pirmkārt, jāizveido savienojumu ar serveri telnet www.ietf.org 80 • Tad var sūtīt HTTP pieprasījumu GET /rfc.html HTTP/1.1 Host: www.ietf.org <tukša rinda> request line header
HTTP atbildes formāts HTTP atbildes ziņojums sastāv no: • Atbildes statusa rinda (response status line) • Hederu rindas (header lines) • Tukša rinda • Pieprasītais objekts, kļūdas paziņojums utml HTTP/1.1 200 OK Date: Wed, 26 Sep 2007 16:26:27 GMT Server: Apache/2.0.52 (Red Hat) Last-Modified: Tue, 29 Aug 2006 15:18:10 GMT ETag: "7c90db-cf8-8ce69080" Accept-Ranges: bytes Content-Length: 3320 Connection: close Content-Type: text/html; charset=UTF-8 <HTML> . . .
Pilns telnet piemērs > telnet www.cs.unc.edu 80 Trying 152.2.131.240... Connected to rock.cs.unc.edu. Escape character is '^]'. GET /~jeffay/foo.txt HTTP/1.1 HTTP/1.1 200 OK Date: Mon, 11 Feb 2002 18:25:31 GMT Server: Apache/1.3.23 (Unix) Last-Modified: Mon, 11 Feb 2002 18:25:02 GMT ETag: "190693ce-b1-3c680c7e" Accept-Ranges: bytes Content-Length: 177 Connection: close Content-Type: text/plain ** This test file is stored in the UNIX ** file system at ** /afs/cs.unc.edu/home/jeffay/public_html/foo.txt Connection closed by foreign host. Pieslēgšanas HTTP servera portam Telnet output GET komanda HTTP atbildes statusa rinda HTTP atbildes hederi Objekta saturs Telnet output
HTTP pieprasījuma metodes • HTTP definē astoņas metodes, kas apzīmē darbības kuru var veikt ar noradītu resursu • GET • POST • HEAD • PUT • DELETE • TRACE • OPTIONS • CONNECT HTTP request line: <METHOD> <PATH> <VERSION> GET /index.html HTTP/1.1 POST /login.jsp HTTP/1.1
GET metode • GET metode tiek izmantota lai vienkārši saņemt informāciju no servera noradot resursa URL • GET ir pati izplatītāka metode • GET metode tiek izmantota arī lai aizsūtīt serverim informāciju no nelielas formas GET /index.html HTTP/1.1 Host: www.someHost.com <FORM NAME="myform" ACTION="cgi-bin/validate.cgi" METHOD="GET"> First Name: <INPUT TYPE="TEXT" NAME="fname" SIZE="20"><BR> Last Name: <INPUT TYPE="TEXT" NAME="lname" SIZE="20"> <BR> <INPUT TYPE="SUBMIT" VALUE="SUBMIT"> </FORM> www.sitename/cgi-bin/validate.cgi?fname=John&lname=Doe
POST metode • Iespēja aizsūtīt datus apstrādei uz servera • Piemēri - liela forma, lietotāja paroļu nosūtīšana, failu augšupielāde • Datus norāda ziņojuma ķermenī • Metodes izpildes rezultātā var tikt izveidots jauns resurss, vai arī izmainīts jau eksistējošs resurss utml POST /login.jsp HTTP/1.1 Host: www.mysite.com User-Agent: Mozilla/4.0 Content-Length: 27 Content-Type: application/x-www-form-urlencoded userid=joe&password=guessme
GET un POST atšķirības • Tehniski atšķirība starp GET un POST ir datu kodēšanas formā • GET – dati tiek iekodēti URLā • POST – dati paradās ziņojuma ķermenī • Galvenā atšķirība – GET ir droša (safe) operācija, kas nemaina servera stāvokļi (no side effects), bet POST ir nedroša • GET ir jāizmanto vienīgi datu iegūšanai, pieprasījumiem • Idempotence – daudzkārtējiem pieprasījumiem tāds pats efekts kā vienam pieprasījumam • GET metodei ir jābūt idempotentai
MIME tipi • MIME = Multipurpose Internet Mail Extension • Failu formāta identifikators, oriģināli bija definēts e-pastam “Accept” hederis pieprasījumā, “Content-Type” hederis atbildē "x-" prefikss apakštipam norāda, ka šis faila tips nav oficiāli reģistrēts
HTTP atbildes statusa kodi • HTTP atbildes pirmā rinda satur protokola versiju, statusa koda ciparu un paskaidrojošo teksta frāzi HTTP/1.1 200 OK • Klienti var izmantot statusa kodus, lai korekti attēlot informāciju • Statusa koda pirmais cipars norāda uz koda klasi • 1XX – Informational • 2XX – Success • 3XX – Redirection • 4XX – Client Error • 5XX – Server Error
Sesijas stāvokļa uzturēšana • Bieži Web lietojumprogrammās ir nepieciešams uzturēt un kontrolēt lietotāja sesijas stāvokli • lietotāja reģistrācija • web lapas uzstādījumi • pirkšanas groza saturs Internet veikalā • HTTP ir “stateless”, tāpēc lietotāja sesijas uzturēšanai ir jālieto speciālas metodes • cookies • slēptie formas mainīgie • URL pārrakstīšana • servera puses sesijas
browser server browser server GET /index.html HTTP/1.1 Host: www.w3.org HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value (content of page) browser server GET /spec.html HTTP/1.1 Host: www.w3.org Cookie: name=value Accept: */* Cookies • Viens no galvenajiem sesijas uzturēšanas līdzekļiem • Cookie ir teksta fails, kuru Web serveris aizsūta klientam, kurš saglabā to uz lokāla diska un nākamajos pieprasījumos sūta nemainītu atpakaļ serverim . . .
Web roboti • Web robots (web crawler, web spider) – programma vai automatizēts skripts, kurš metodiski apstaiga World Wide Web • Tipiskie uzdevumi: • up-to-date informācijas nodrošināšana meklēšanas programmās • apstaigātu lapu saglabāšana turpmākai apstrādāšanai • HTML koda validācija, linku pārbaude utml
Robotu pieklājības politika • Web roboti var ievērojami ietekmēt web lapu darbspēju • vairāki pieprasījumi sekundē • lielo failu augšupielāde • Lai kontrolēt problēmu ir izstrādāts robotu izslēgšanas protokols (robots.txt protokols) • Var apskatīties, piemērām,http://del.icio.us/robots.txt
Apache HTTP Client • Web resursu piekļuvei ar HTTP var izmantot Java SE java.net pakotni • Taču bāzes funkcionalitāte nenodrošina pilnu elastīgumu un funkcionalitāti • Jakarta Commons HttpClient komponents piedāvā efektīvu , modernu un daudz-funkcionālu risinājumu • Paņemt HttpClient no http://jakarta.apache.org/httpcomponents/httpclient-3.x/ • Pielikt commons-httpclient-3.1.jar pie classpath • Izmantot klases no org.apache.commons.httpclient
Izmantošanas piemērs // izveido jauno klienta instanci HttpClient client = new HttpClient(); // izveido GET metodi GetMethod method = new GetMethod(url); // uzliek parametrus method.getParams().setParameter( HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); // izpilda metodi int statusCode = client.executeMethod(method); if (statusCode != HttpStatus.SC_OK) { log.error("Method failed: " + method.getStatusLine()); } // saņem atbildes ķermeni, web lapas saturu byte[] page = method.getResponseBody(); // atbrīvo savienojumu method.releaseConnection();
Resursi • HTTP by W3C http://www.w3.org/Protocols/ • HTTP Session Tracking http://www.unix.org.ua/orelly/java-ent/servlet/ch07_01.htm • Par Web robotiem http://en.wikipedia.org/wiki/Web_crawler • Apache HTTP Client http://jakarta.apache.org/httpcomponents/httpclient-3.x/