Dainius Četrauskas IFK-4 2006-11-08 HTTP protokolas Dainius Četrauskas IFK-4 2006-11-08
HTTP protokolas. Hyper Transfer Protocol (HTTP) – tai programinio lygio protokolas naudojamas informacijos mainams žiniatinklyje (WWW). Pagrindinis šio protokolo tikslas buvo suteikti galimybę skelbti ir peržiūrėti HTML puslapius. Tarp paplitusių protokolų: FTP, NNTP, SMTP... HTTP protokolas yra dažniausiai naudojamas. HTTP protokolas pagrįstas užklausų/atsakymų apsikeitimu tarp kleinto ir serverio.
HTTP protokolo versijos Nebepalaikoma. Palaiko tik GET užklausą. Nepalaiko antraščių (headers). Kadangi nepalaikomas POST metodas, klientas serveriui gali perduoti labai mažai informacijos. HTTP 1.0 Vis dar labai plačiai naudojama, ypač proxy serverių. Palaiko susijungimą aktyvų, todėl to paties susijungimo metu galima įvykdyti keletą užklausų/atsakymų. Tačiau tai veikia tik tada, kai jungiamasi ne per proxy serverius. Neišlaiko būvio/konteksto informacijos.
HTTP protokolo versijos Einamoji protokolo versija. Pagal nutylėjimą palaiko aktyvius susijungimus, kurie puikiai veikia ir jungiantis per proxy serverį. Leidžia išsiųsti keletą užklausų vienu metu, taip pagreitinant duomenų persiuntimą vartotojui. Įmanoma identifikuoti host’o vardą. Naršykė siunčia Host: www.which.one protokolo galvutėje header kiekvienoje užklausoje. Tai pagreitina susisiekimą, jei mašinoje sukasi keli virtualūs web serveriai. Naudojant šį protokolą, turinys gali būti pateikiamas įvairiais formatais: PostScript, PDF, arba tiesiog kaip paprastas tekstas.
HTTP 1.1 pavyzdys $telnet 209.85.129.99 80 Trying 209.85.129.99... Connected to 209.85.129.99. Escape character is '^]'. GET / HTTP/1.1 HOST: www.google.lt HTTP/1.1 200 OK Cache-Control: private Content-Type: text/html Set-Cookie: PREF=ID=40bd7c2c921c6ab3:TM=1162931530:LM=1162931530:S=L3Pbcv7-v8RliRvc; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.lt Server: GWS/2.1 Transfer-Encoding: chunked Date: Tue, 07 Nov 2006 20:32:10 GMT <html></html>
HTTP užklausų sintaksė Kliento užklausos sintaksė: [METH] [REQUEST-URI] HTTP/[VER] [fieldname1]: [field-value1] [fieldname2]: [field-value2] ...
HTTP užklausų sintaksė Kliento užklausos pavyzdys: GET / HTTP/1.1 Host: www.google.lt User-Agent: User-Agent: Opera/9.02 (Windows NT 5.1; U; en) Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain Accept-Language: en-us,en;q=0.5 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: PREF=ID=5a52155dae6c60d6:TM=1162195354:LM=1162195354:S Cache-Control: max-age=0
HTTP užklausų sintaksė Serverio atsakymo sintaksė: HTTP/ [VER] [CODE] [TEXT] Field1: Value1 Field2: Value2 ... [Dokumento turinys] Pirma eilutė rodo HTTP versiją, po to seka trijų skaitmenų skaičius(HTTP būklės kodas) ir priežąsties frazė, suprantama žmonėms. Dažnai tai būna kodas 200, kas reiškia viskas tvarkoje. Po pirmos eilutės seka eilė eilučių, vadinamų galvute, kuriose yra informacija apie dokumentą. Galvutės baigiasi tuščia eilute, po kurios seka dokumento turinys
HTTP serverio atsakymų kodai. 200: OK 201: Created 202: Accepted 203: Non-Authoritative Information 204: No Content 205: Reset Content 206: Partial Content 207: Multi-Status 400: Bad Request 401: Unauthorized 402: Payment Required 403: Forbidden 404: Not Found 405: Method Not Allowed 500: Internal Server Error 501: Not Implemented 502: Bad Gateway 503: Service Unavailable 504: Gateway Timeout
HEAD GET POST HTTP užklausų metodai Panaudojus šią užklausą vykdoma beveik tokia pati operacija kaip ir naudojant GET užklausą, tačiau parsiunčiamas ne visas turinys, o tik <head></head> antraštė. Tai naudinga norinti pasiimti meta duomenis. GET Plačiausiai naudojamas metodas. Jį panaudojus, klientui parsiunčiamas nurodytas resursas. POST Iš HTML formos nusiunčia duomenis nurodytam šaltiniui.
PUT DELETE TRACE OPTIONS HTTP užklausų metodai Nusiunčia serveriui nurodytą resursą. DELETE Ištrina nurodytą resursą. TRACE Nusiunčia atgal gautą užklausą. Tokiu būdu klientas gali matyti tarpinius serverius, per kuriuos keliauja užklausa. OPTIONS Sugražina metodų, kuriuos palaiko serveris, sąrašą. Gali būt naudojamas tikrinti serverio funkcionalumui.
CONNECT HTTP užklausų metodai Šis metodas paprastai yra naudojamas sukurti tuneliuotam susijungimui, per kurį gali būti perduodamas šifruotas SSL srautas.
GET, HEAD POST, PUT, DELETE HTTP metodų saugumas Šie metodai apibūdinami kaip saugūs, nes jie gali būti panaudoti tik informacijos gavimui iš serverio, nepadarant jokių pakeitimų pačiam serveryje. POST, PUT, DELETE Nesaugūs metodai. Jais gali būt išsiunčiami vartotojo duomenys, bei atliekami tam tikri pakeitimai web serveryje. Todėl rekomenduojama, kuriant tinklalapius tokius metodus atvaizduot ne kaip link’us, bet mygtukų pagalba, kad vartotojas suvoktų galimas pasekmes.
HTTP protokolas. GET metodas GET metodas gali būti naudojamas tam tikrų užklausą nusakančių parametrų perdavimui. GET gali persiųsti serveriui nedidelį duomenų kiekį. Tai yra tais atvejais, kai užklausos URI nėra failas, o pavyzdžiui specifinė užklausa specifinei duomenų bazei. CGI scriptui irgi galima persiųsti duomenis naudojant GET užklausą; duomenys tokiu atveju yra nurodomi po ? simbolio. Pavyzdžiui: GET /path/script.cgi?field1=value1&field2=value2 HTTP/1.0 Tai “URL-encoded” duomenų pavyzdys. Tai naudojama esant nedideliems duomenų kiekiams. Kitais atv naudotinas POST metodas
HTTP protokolas. URL encoding. URL specifikacija (RFC 1738, Dec. '94) pasižymi ta problema, kad ji riboja URL naudojamų ženklų kiekį tam tikra US-ASCII simbolių aibe: "...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.“ HTML, iš savo pusės leidžia visą rinkinį simbolių, nusakomų ISO-8859-1 (ISO-Latin) HTML4 išplečia leidžiamus simbolius įtraukdama ir aibę Unicode character set. Ne-ISO-8859-1 simboliai (simboliai, kurių kodas virš FF hex/255 decimal iš Unicode grupės), nėra naudojami užduodant URL, kadangi nėra saugaus būdo, kuris leistų nusakyti simbolių rinkinį nusakant URL [RFC2396.] URL gali būti koduojami visur HTML dokumente, kada URL yra nurodoma importui kažkurio objekto (A, APPLET, AREA, BASE, BGSOUND, BODY, EMBED, FORM, FRAME, IFRAME, ILAYER, IMG, ISINDEX, INPUT, LAYER, LINK, OBJECT, SCRIPT, SOUND, TABLE, TD, TH, ir TR elementams.)
HTTP protokolas. URL encoding. Character (Hex) Space 20 Quotation marks 'Less Than' symbol ("<") 'Greater Than' symbol (">") 22 3C 3E 'Pound' character ("#") 23 Percent character ("%") 25 Misc. characters: Left Curly Brace ("{") Right Curly Brace ("}") Vertical Bar/Pipe ("|") Backslash ("\") Caret ("^") Tilde ("~") Left Square Bracket ("[") Right Square Bracket ("]") Grave Accent ("`") 7B 7D 7C 5C 5E 7E 5B 5D 60
HTTP protokolas. URL encoding. Pavyzdys www.kazkas.org/aaa bbb\ccc~bla www.kazkas.org/aaa%20bbb%5Cccc%7Ebla “ “ -> %20 “\” -> %5C “~” -> %7E
Informacijos šaltiniai: HTTP protokolas Informacijos šaltiniai: http://www.w3.org/Protocols/ http://en.wikipedia.org http://www.blooberry.com/indexdot/html/topics