1 / 56

HTTP

HTTP. HyperText Transfer Protocol. Pl ā ns. Internet & Web Arhitektūra HTTP protokols HTTP klienta Java API. Internet & Web. Internet ir visā pasaulē izplatīta publiski pieejamo datoru tīklu sistēma , kas pārraida datus izmantojot standartu protokolu IP (Internet P rotocol)

bijan
Télécharger la présentation

HTTP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HTTP HyperText Transfer Protocol

  2. Plāns • Internet & Web • Arhitektūra • HTTP protokols • HTTP klienta Java API

  3. Internet & Web • Internet ir visā pasaulē izplatīta publiski pieejamo datoru tīklu sistēma, kas pārraida datus izmantojot standartu protokolu IP (Internet Protocol) • World Wide Web (WWW, vai vienkārši Web) ir starp saistīto hiperteksta dokumentu sistēma, kurai var piekļūt pa Internetu • Tīmekļa lietojumprogramma ir tāda programma, kura ir izvietota tīmeklī un kurai var piekļūt pa tīklu (piemērām, pa Internet vai intranet)

  4. Tīmeklis (Web) • Tīmekļa pazīmes • Klienta/servera arhitektūra • HTTP protokols • HyperText Markup Language • URL adreses • Tīmekļa serveris - datorprogramma, kas ir atbildīga par HTTP pieprasījuma pieņemšanu no klienta un HTTP atbildes sūtīšanu atpakaļ • Tīmekļa lietojumprogramma - tīmekļa servera dinamiskais paplašinājums

  5. 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)

  6. TCP/IP modelis IP = Internet Protocol TCP = Transmission Control Protocol

  7. 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)

  8. 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

  9. 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

  10. 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

  11. Klienta/servera saziņas scenārijs Web klientu/serveru sazināšanas notiek pa HTTP protokolu Lietotājs norāda web lapas URL 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

  12. 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

  13. 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

  14. 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 HTTP “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

  15. 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)

  16. 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

  17. 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> . . .

  18. Pilns telnet piemērs Pieslēgšanas HTTP servera portam > 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. Telnet output GET komanda HTTP atbildes statusa rinda HTTP atbildes hederi Objekta saturs Telnet output

  19. HTTP pieprasījuma metodes HTTP definē astoņas metodes, kas apzīmē darbības, kuras 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

  20. GET metode • GET metode tiek izmantota, lai vienkārši saņemt informāciju no servera norādot 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

  21. 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

  22. 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

  23. Citas metodes

  24. HTTP pieprasījuma hederi

  25. 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

  26. 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

  27. HTTP statusa kodi

  28. Statusa kodu apstrāde

  29. HTTP atbildes hederi

  30. 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

  31. Firefox – Live HTTP headers • Add-on for Firefox, which allows to view HTTP headers of a page and while browsing • https://addons.mozilla.org/en-US/firefox/addon/3829 • http://livehttpheaders.mozdev.org/ • Tools  Live HTTP headers

  32. 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 a 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 . . .

  33. 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

  34. Web robotu arhitektūra

  35. 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) http://en.wikipedia.org/wiki/Robots_exclusion_standard

  36. HTTP Java valodā • 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 • Apache HttpClient bibliotēka piedāvā efektīvu, modernu un daudz-funkcionālu risinājumu

  37. Apache HttpClient • Paņemt HttpClient no http://hc.apache.org/httpcomponents-client-ga/index.html • Pielikt commons-httpclient-4.3.jar pie classpath • Maven dependency konfigurācija • Izmantot klases no org.apache.http.client <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3</version> </dependency> http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html

  38. HttpClient izmantošana The general process for using HttpClient consists of a number of steps: • Create an instance of HttpClient. • Create aHttpGet or HttpPost object representing a HTTP method. The URL to connect to is passed in to the constructor. • Tell HttpClient to execute the method. • Read the response. • Release the connection. • Deal with the response. http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e37

  39. Izmantošanas piemērs [1/3] public byte[] download(String url){ // izveido jauno klienta instanci CloseableHttpClient httpClient = HttpClients.createDefault(); // izveido GET metodi HttpGet httpGet = new HttpGet(url); try{ // izpilda HTTP pieprasījumu CloseableHttpResponse response = httpClient.execute(httpGet);

  40. Izmantošanas piemērs [2/3] // pārbauda statusa kodu int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { log.error("Method failed: " + response.getStatusLine()); return; } // nolasa atbildes saturu HttpEntity entity = response.getEntity();

  41. Izmantošanas piemērs [3/3] // pārveido par baitu masīvu byte[] data = IOUtils.toByteArray(entity.getContent()); return data; } catch (Exception e) { // kļūdu apstrāde log.error("HTTP method execution failed", e); } } Apache Commons IO http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html

  42. URIBuilder A convenient way to build URLs: URI uri = new URIBuilder() .setScheme("http") .setHost("www.google.com") .setPath("/search") .setParameter("q", "httpclient") .setParameter("btnG", "Google Search") .setParameter("aq", "f") .setParameter("oq", "") .build(); HttpGet httpget = new HttpGet(uri); System.out.println(httpget.getURI());

  43. Maven: Commons IO <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> Apache Commons IO bibliotēkas Maven konfigurācija: http://commons.apache.org/io

  44. HTTP klienta konfigurēšana HTTP klientu ir iespējams daudzveidīgi konfigurēt • pieprasījuma atkārtošana neveiksmes gadījumā • dažādi parametri client.setHttpRequestRetryHandler( new DefaultHttpRequestRetryHandler(3, false)); client.getParams().setParameter( CoreProtocolPNames.USER_AGENT, "MySuperApp");

  45. FTP – File Transfer Protocol • FTP ir standarts tīkla protokols, kurš tiek izmantots lai apmainīties un manipulēt ar failiem TCP/IP tīklā, kādā kā Internet • Pirmais FTP standarts bija RFC 114, kas bija publicēts 1971.gada 16.aprīlī, vēl pirms TCP un IP • Aktuāla specifikācijas versija: RFC 959 (1985)

  46. Jakarta Commons Net • Jakarta Commons Net implementē klienta pusi daudziem Internet bāzes protokoliem • Projekta Web lapa: http://commons.apache.org/net/ <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>2.0</version> </dependency> Maven konfigurācija:

  47. FTPClient JavaDoc: http://commons.apache.org/net/api/org/apache/commons/net/ftp/FTPClient.html 1. Connect 2. Login storeFile(String remote, InputStream local) makeDirectory(String pathname) listFiles(String pathname) deleteFile(String pathname) . . . 4. Logout 5. Disconnect

  48. SMTP - Simple Mail Transfer Protocol • SMTP ir Internet standarts elektroniska pasta (e-mail) pārsūtīšanai IP tīklos • SMTP apraksta izejošo e-pastu transportu un izmanto portu 25

  49. SMTP - Simple Mail Transfer Protocol • Pirmā specifikācija: RFC 821, 1985.gada augusts • Pēdējā versija: RFC 5321, 2008.gada oktobris

  50. Commons Net: SMTPClient • JavaDoc: http://commons.apache.org/net/api/org/apache/commons/net/smtp/SMTPClient.html 1. Connect 2. Login sendSimpleMessage( String sender, String[] recipients, String message) . . . 4. Logout 5. Disconnect

More Related