9 Opredeleniya metodov (Method Definitions).
Nabor obshchih metodov dlya HTTP/1.1 privoditsya nizhe. Hotya etot nabor mozhet byt' rasshiren, nel'zya schitat', chto dopolnitel'nye metody imeyut odinnakovuyu semantiku, esli oni yavlyayutsya rasshireniyami raznyh klientov i serverov.
Pole zagolovka zaprosa Host (razdel 14.23) DOLZHNO soprovozhdat' vse HTTP/1.1 zaprosy.
9.1 Bezopasnye i Idempotent metody.
9.1.1 Bezopasnye metody.
Programmistam sleduet ponimat', chto programmnoe obespechenie pri vzaimodejstvii s Internetom predstavlyaet pol'zovatelya, i programme sleduet informirovat' pol'zovatelya o lyubyh dejstviyah, kotorye on mozhet proizvesti, no kotorye mogut imet' nepredskazuemoe znachenie dlya nego ili drugih lic.
V chastnosti bylo prinyato soglashenie, chto metody GET i HEAD nikogda ne dolzhny imet' inogo znacheniya, krome zagruzki. |ti metody sleduet rassmatrivat' kak "bezopasnye". |to pozvolyaet agentam pol'zovatelya predstavlyat' drugie metody, takie kak POST, PUT i DELETE, takim obrazom, chtoby pol'zovatel' byl proinformirovan o tom, chto on zaprashivaet vypolnenie potencial'no opasnogo dejstviya.
Estestvenno, ne vozmozhno garantirovat', chto server ne generiruet pobochnye effekty v rezul'tate vypolneniya zaprosa GET; fakticheski, nekotorye dinamicheskie resursy soderzhat takuyu vozmozhnost'. Vazhnoe razlichie zdes' v tom, chto ne pol'zovatel' zaprashivaet pobochnye effekty, i, sledovatel'no, pol'zovatel' ne mozhet nesti otvetstvennost' za nih.
9.1.2 Idempotent metody.
Metody mogut takzhe obladat' svojstvom "idempotence" v tom smysle, chto pobochnye effekty ot N > 0 identichnyh zaprosov takie zhe, kak ot odinochnogo zaprosa (za isklyuchenie oshibok i problem ustarevaniya). Metody GET, HEAD, PUT i DELETE obladayut dannym svojstvom.
9.2 OPTIONS.
Metod OPTIONS predstavlyaet zapros informacii ob opciyah soedineniya, dostupnyh v cepochke zaprosov/otvetov, identificiruemoj zaprashivaemym URI (Request-URI). |tot metod pozvolyaet klientu opredelyat' opcii i/ili trebovaniya, svyazannye s resursom, ili vozmozhnostyami servera, no ne proizvodya nikakih dejstvij nad resursom i ne iniciiruya ego zagruzku.
Esli otvet servera - eto ne soobshchenie ob oshibke, to otvet NE DOLZHEN soderzhat' inoj informacii ob容kta, krome toj, kotoruyu mozhno rassmatrivat' kak opcii soedineniya (naprimer Allow - mozhno rassmatrivat' kak opciyu soedineniya, a Content-Type - net). Otvety na etot metod ne keshiruyutsya.
Esli zaprashivaemyj URI (Request-URI) - zvezdochka ("*"), to zapros OPTIONS prednaznachen dlya obrashcheniya k serveru v celom. Esli kod sostoyaniya v otvete - 200, to otvetu SLEDUET soderzhat' lyubye polya zagolovka, kotorye ukazyvayut opcional'nye vozmozhnosti, realizuemye serverom (naprimer, Public), vklyuchaya lyubye rasshireniya, ne opredelennye dannoj specifikaciej, v dopolnenie k sootvetstvuyushchim obshchim polyam ili polyam zagolovka otveta (response-header). Kak opisano v razdele 5.1.2, zapros "OPTIONS *" mozhet byt' primenen cherez proksi-server s opredeleniem adresuemogo servera v zaprashivaemom URI (Request-URI) s pustym putem.
Esli zaprashivaemyj URI (Request-URI) ne zvezdochka ("*"), to zapros OPTIONS primenyaetsya k opciyam, kotorye dostupny pri soedinenii s ukazannym resursom. Esli kod sostoyaniya otveta - 200, to otvetu SLEDUET soderzhat' lyubye polya zagolovka, kotorye ukazyvayut opcional'nye vozmozhnosti, realizuemye serverom i primenimye k ukazannomu resursu (naprimer, Allow), vklyuchaya lyubye rasshireniya, ne opredelennye dannoj specifikaciej, v dopolnenie k sootvetstvuyushchim obshchim polyam ili polyam zagolovka otveta (response-header). Esli zapros OPTIONS peredaetsya cherez proksi-server, to poslednij redaktiruet otvet, isklyuchaya te opcii, kotorye ne predusmotreny vozmozhnosti etogo proksi-servera.
9.3 GET.
Metod GET pozvolyaet poluchat' lyubuyu informaciyu (v forme ob容kta), identificirovannuyu zaprashivaemym URI (Request-URI). Esli zaprashivaemyj URI (Request-URI) obrashchaetsya k processu, proizvodyashchemu dannye, to v kachestve ob容kta otveta dolzhny byt' vozvrashcheny proizvedennye dannye, a ne ishodnyj tekst processa, esli sam process ne vyvodit ishodnyj tekst.
Razlichaetsya "uslovnyj GET" ("conditional GET"), pri kotorom soobshchenie zaprosa vklyuchaet polya zagolovka If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match, ili If-Range. Uslovnyj metod GET zaprashivaet peredachu ob容kta, tol'ko esli on udovletvoryaet usloviyam, opisannym v uslovnyh polyah zagolovka. Uslovnyj metod GET prednaznachen dlya umen'sheniya nenuzhnoj zagruzki seti, i pozvolyaet obnovlyat' keshirovannye ob容kty bez ispol'zovaniya neskol'kih zaprosov ili peresylki dannyh, uzhe sohranennyh klientom.
Razlichaetsya takzhe "chastichnyj GET" ("partial GET"), pri kotorom soobshchenie zaprosa vklyuchaet pole zagolovka Range. CHastichnyj GET zaprashivaet peredachu tol'ko chasti ob容kta, kak opisano v razdele 14.36. CHastichnyj metod GET prednaznachen dlya umen'sheniya nenuzhnoj zagruzki seti, i pozvolyaet sobirat' ob容kty iz chastej, bez peredachi chastej dannyh, uzhe sohranennyh klientom.
Otvet na zapros GET keshiruem togda i tol'ko togda, kogda on otvechaet trebovaniyam HTTP keshirovaniya, opisannym v razdele 13.
9.4 HEAD.
Metod HEAD identichen GET, za isklyucheniem togo, chto server NE DOLZHEN vozvrashchat' v otvete telo soobshcheniya (message-body). Metainformacii, soderzhashchejsya v HTTP zagolovkah otveta na zapros HEAD SLEDUET byt' identichnoj informacii, predstavlyaemoj v otvet na zapros GET. |tot metod mozhet ispol'zovat'sya dlya polucheniya metainformacii ob ob容kte zaprosa bez neposredstvennoj peresylki tela ob容kta (entity-body). |tot metod chasto ispol'zuetsya dlya testirovaniya gipertekstovyh svyazej v celyah proverki pravil'nosti, dostizhimosti, i vremeni modifikacii.
Otvet na zapros HEAD mozhet byt' keshiruemym v tom smysle, chto informaciya, soderzhashchayasya v otvete mozhet ispol'zovat'sya dlya modificikacii predvaritel'no keshirovannogo ob容kta iz etogo resursa. Esli novye znacheniya polya ukazyvayut, chto keshiruemyj ob容kt otlichaetsya ot tekushchego ob容kta (po takim parametram, kak Content-Length, Content-MD5, ETag ili Last-Modified), to kesh DOLZHEN obrabatyvat' soderzhimoe kak prosrochennoe.
9.5 POST.
Metod POST ispol'zuetsya dlya zaprosa, pri kotorom adresuemyj server prinimaet ob容kt, vklyuchennyj v zapros, kak novoe podchinenie resursa, identificirovannogo zaprashivaemym URI (Request-URI) v stroke zaprosa (Request-Line). POST razrabotan dlya togo, chtoby obshchim metodom realizovat' sleduyushchie funkcii:
- Annotaciya sushchestvuyushchih resursov;
- Registraciya soobshcheniya na elektronnoj doske ob座avlenij (bulletin board), v konferencii novostej (newsgroup), spiske rassylki (mailing list), ili podobnoj gruppe statej;
- Peredacha bloka dannyh, naprimer rezul'tat vvoda v forme, processu obrabotki;
- Rasshirenie bazy dannyh posredstvom konkateniruyushchej operacii (append operation).
Fakticheski funkciya, vypolnyaemaya metodom POST, opredelyaetsya serverom i obychno zavisit ot zaprashivaemogo URI (Request-URI). Ob容kt, peredavaemyj metodom POST, otnositsya k etomu URI takim zhe obrazom, kak fajl otnositsya k katalogu, v kotorom on nahoditsya, stat'ya otnositsya k konferencii novostej (newsgroup), v kotoroj ona zaregistrirovana, a zapis' otnositsya k baze dannyh.
Dejstvie, vypolnyaemoe metodom POST mozhet ne davat' v kachestve rezul'tata resurs, kotoryj mozhno bylo by identificirovat' URI. V etom sluchae, v zavisimosti ot togo, vklyuchaet li otvet ob容kt, opisyvayushchij rezul'tat, ili net, kod sostoyaniya v otvete mozhet byt' kak 200 (OK), tak i 204 (Net soderzhimogo, No Content).
Esli resurs byl sozdan na pervonachal'nom servere, otvetu SLEDUET soderzhat' kod sostoyaniya 201 (Sozdan, Created) i vklyuchat' ob容kt, kotoryj opisyvaet sostoyanie zaprosa i ssylaetsya na novyj resurs, a takzhe zagolovok Location (smotrite razdel 14.30).
Otvety na etot metod ne keshiruemy, esli otvet ne vklyuchaet sootvetstvuyushchie polya zagolovka Cache-Control ili Expires. Odnako, otvet s kodom sostoyaniya 303 (Smotret' drugoj, See Other) mozhet ispol'zovat'sya dlya perenapravleniya agenta pol'zovatelya dlya zagruzki keshiruemogo resursa.
Zaprosy POST dolzhny otvechat' trebovaniyam peredachi soobshcheniya, izlozhennym v razdele 8.2.
9.6 PUT.
Zaprosy s metodom PUT, kotorye soderzhat ob容kt, sohranyayutsya pod zaprashivaemym URI (Request-URI). Esli Request-URI obrashchaetsya k uzhe sushchestvuyushchemu resursu, vklyuchennyj ob容kt SLEDUET rassmatrivat' kak modificirovannuyu versiyu ob容kta, nahodyashchegosya na pervonachal'nom servere. Esli Request-URI ne ukazyvaet na sushchestvuyushchij resurs, i mozhet interpretirovat'sya agentom pol'zovatelya kak novyj resurs dlya zaprosov, pervonachal'nyj server mozhet sozdat' resurs s dannym URI. Esli novyj resurs sozdan, to pervonachal'nyj server DOLZHEN soobshchit' agentu pol'zovatelya ob etom posredstvom otveta s kodom sostoyaniya 201 (Sozdan, Created). Esli sushchestvuyushchij resurs modificirovan, to dlya ukazaniya uspeshnogo zaversheniya zaprosa SLEDUET poslat' otvet s kodom sostoyaniya libo 200 (OK), libo 204 (Net soderzhimogo, No Content). Esli resurs ne mozhet byt' sozdan ili izmenen dlya zaprashivaemogo URI (Request-URI), to SLEDUET poslat' otvet, otrazhayushchij harakter problemy. Poluchatel' ob容kta NE DOLZHEN ignorirovat' zagolovkov Content-* (naprimer Content-Range), kotoryh ne ponimaet ili ne realizuet, a DOLZHEN v dannom sluchae vozvratit' otvet s kodom sostoyaniya 501 (Ne realizovano, Not Implemented).
Esli zapros peredaetsya cherez kesh i zaprashivaemyj URI (Request-URI) identificiruet odin ili neskol'ko keshirovannyh v nastoyashchee vremya ob容ktov, to vhozhdeniya v kesh etih ob容ktov dolzhny obrabatyvat'sya kak prosrochennye. Otvety na etot metod ne keshiruemy.
Fundamental'noe razlichie mezhdu POST i PUT zaprosami, otrazheno v razlichnom znachenii zaprashivaemogo URI (Request-URI). URI v zaprose POST identificiruet resurs, kotoryj obrabatyvaet vklyuchennyj ob容kt. |tim resursom mozhet byt' process, prinimayushchij dannye, shlyuz k nekotoromu drugomu protokolu, ili otdel'nyj ob容kt, kotoryj prinimaet annotacii (accepts annotations). Naprotiv, URI v zaprose PUT identificiruet ob容kt, vklyuchennyj v zapros - agent pol'zovatelya naznachaet dannyj URI vklyuchennomu resursu, a server NE DOLZHEN pytat'sya primenit' zapros k nekotoromu drugomu resursu. Esli server zhelaet primenit' zapros k drugomu URI, on DOLZHEN poslat' otvet s kodom 301 (Peremeshchen postoyanno, Moved Permanently); agent pol'zovatelya MOZHET zatem prinyat' sobstvennoe reshenie otnositel'no perenaznacheniya zaprosa.
Odinochnyj resurs MOZHET byt' identificirovan neskol'kimi razlichnymi URI. Naprimer, stat'ya mozhet imet' URI identificiruyushchij "tekushchuyu versiyu", kotoryj otlichen ot URI, identificiruyushchego kazhduyu specificheskuyu versiyu. V etom sluchae, zapros PUT na obshchij URI mozhet otrazit'sya (may result) na neskol'kih drugih URI, opredelennyh serverom proishozhdeniya.
HTTP/1.1 ne opredelyaet kakim obrazom metod PUT vozdejstvuet na sostoyanie pervonachal'nogo servera.
Zaprosy PUT dolzhny podchinyat'sya trebovaniyam peredachi soobshchenij, izlozhennym v razdele 8.2.
9.7 DELETE.
Metod DELETE zaprashivaet pervonachal'nyj server ob udalenii resursa, identificiruemogo zaprashivaemym URI (Request-URI). |tot metod MOZHET byt' otmenen chelovecheskim vmeshatel'stvom (ili drugimi sredstvami) na pervonachal'nom servere. Klientu nel'zya garantirovat', chto operaciya byla vypolnena, dazhe esli kod sostoyaniya, vozvrashchennyj pervonachal'nym serverom ukazyvaet na to, chto dejstvie bylo zaversheno uspeshno. Odnako, serveru NE SLEDUET otvechat' ob uspeshnom vypolnenii, esli vo vremya otveta on predpolagaet udalit' resurs ili peremestit' ego v nedostupnoe polozhenie.
Uspeshnomu otvetu SLEDUET imet' kod sostoyaniya 200 (OK), esli otvet vklyuchaet ob容kt, opisyvayushchij sostoyanie, libo imet' kod sostoyaniya 202 (Prinyato, Accepted), esli dejstvie eshche ne bylo proizvedeno, libo imet' kod sostoyaniya 204 (Net soderzhimogo, No Content), esli otvet soobshchaet ob uspehe (OK), no ne soderzhit ob容kta.
Esli zapros peredaetsya cherez kesh i zaprashivaemyj URI (Request-URI) identificiruet odin ili neskol'ko keshirovannyh v nastoyashchee vremya ob容ktov, to vhozhdeniya ih dolzhny obrabatyvat'sya kak prosrochennye. Otvety na etot metod ne keshiruemy.
9.8 TRACE.
Metod TRACE ispol'zuetsya dlya vyzova udalennogo vozvrata soobshcheniya zaprosa na urovne prilozheniya. Konechnomu poluchatelyu zaprosa SLEDUET otrazit' poluchennoe soobshchenie obratno klientu kak telo ob容kta otveta s kodom sostoyaniya 200 (OK). Konechnym poluchatelem yavlyaetsya libo server proishozhdeniya, libo pervyj proksi-server, libo pervyj shlyuz, poluchivshij nulevoe znachenie (0) v pole Max-Forwards v zaprose (sm. razdel 14.31). Zapros TRACE NE DOLZHEN soderzhat' ob容kta.
TRACE pozvolyaet klientu videt', chto poluchaetsya na drugom konce cepochki zaprosov i ispol'zovat' eti dannye dlya testirovaniya ili diagnosticheskoj informacii. Znachenie polya zagolovka Via (razdel 14.44) predstavlyaet osobyj interes, tak kak ono dejstvuet kak sled cepochki zaprosov. Ispol'zovanie polya zagolovka Max-Forwards pozvolyaet klientu ogranichivat' dlinu cepochki zaprosov, chto yavlyaetsya poleznym pri testirovanii beskonechnyh ciklov v cepochke proksi-serverov, peresylayushchih soobshcheniya.
Esli zapros uspeshno vypolnen, to otvetu SLEDUET soderzhat' vse soobshchenie zaprosa v tele ob容kta (entity-body), a Content-Type sleduet byt' ravnym "message/http". Otvety na etot metod NE DOLZHNY keshirovat'sya.