12 Obsuzhdenie soderzhimogo (Content Negotiation).
Bol'shinstvo HTTP otvetov vklyuchayut ob容kt, kotoryj soderzhit informaciyu, prednaznachennuyu dlya interpretacii pol'zovatelem. Estestvenno zhelanie obespechit' pol'zovatelya "luchshim dostupnym" ob容ktom, sootvetstvuyushchim zaprosu. K sozhaleniyu dlya serverov i keshej, ne vse pol'zovateli imeyut odinnakovye predpochteniya, i ne vse agenty pol'zovatelya odinakovo sposobny k vizualizacii vseh tipov ob容ktov. Po etoj prichine, HTTP imeet sredstva dlya neskol'kih mehanizmov "obsuzhdeniya soderzhimogo" - processa vybora samogo luchshego predstavleniya dlya dannogo otveta, kogda dostupno neskol'ko predstavlenij.
Obratite vnimanie: |to ne vyzyvaetsya "obsuzhdenie formata" ("format negotiation"), potomu chto al'ternativnye predstavleniya mogut imet' odinnakovyj media tip, no ispol'zovat' razlichnye vozmozhnosti etogo tipa, imet' raznye yazyki i t.d.
Lyuboj otvet, soderzhashchij telo ob容kta (entity-body) MOZHET byt' temoj obsuzhdeniya, vklyuchaya oshibochnye otvety.
Imeyutsya dva vida obsuzhdeniya soderzhimogo, kotorye vozmozhny v HTTP: upravlyaemoe serverom i upravlyaemoe agentom obsuzhdenie. |ti dva vida obsuzhdeniya nezavisimy, i, takim obrazom, mogut ispol'zovat'sya otdel'no ili vmeste. Odin metod ispol'zovaniya ih vmeste, upominaemyj kak prozrachnoe obsuzhdenie, proishodit, kogda kesh ispol'zuet informaciyu obsuzhdeniya, upravlyaemogo agentom, predostavlyaya ee pervonachal'nomu serveru, dlya obespecheniya upravlyaemogo serverom obsuzhdeniya pri posleduyushchih zaprosah.
12.1 Upravlyaemoe serverom obsuzhdenie.
Obsuzhdenie nazyvaetsya upravlyaemym serverom, esli vybor samogo luchshego predstavleniya dlya otveta proizveden algoritmom, razmeshchennym na servere. Vybor osnovan na dostupnyh predstavleniyah otveta (oni mogut razlichat'sya po neskol'kim harakteristikam; naprimer yazyku, kodirovaniyu soderzhimogo (content-coding), i t.d.) i soderzhanii specificheskih polej zagolovka v soobshchenii zaprosa, ili na drugoj informacii, imeyushchej otnoshenie k zaprosu (takoj kak setevoj adres klienta).
Upravlyaemoe serverom obsuzhdenie vygodno, kogda algoritm vybora iz chisla dostupnyh predstavlenij trudno opisat' agentu pol'zovatelya, ili kogda server zhelaet poslat' "luchshee predpolozhenie" klientu odnovremenno s pervym otvetom (nadeyas' izbezhat' zaderzhki peresylki tuda i obratno posleduyushchego zaprosa, esli "luchshee predpolozhenie" ustroit pol'zovatelya). CHtoby uluchshit' predpolozhenie servera, agent pol'zovatelya MOZHET vklyuchat' polya zagolovka zaprosa (Accept, Accept-Language, Accept-Encoding, i t.d.), kotorye opisyvayut predpochtitel'nyj otvet.
Upravlyaemoe serverom obsuzhdenie imeet nedostatki:
- Server ne mozhet tochno opredelit', chto moglo by byt' "samym luchshim" dlya dannogo pol'zovatelya, tak kak eto trebuet polnogo znaniya, kak vozmozhnostej agenta pol'zovatelya, tak i celej ispol'zovaniya otveta (naprimer, pol'zovatel' hochet prosmatrivat' ego na ekrane ili pechatat' na bumage?).
- Nalichie opisaniya vozmozhnostej agenta pol'zovatelya v kazhdom zaprose mozhet byt' ochen' neeffektivnym (pri uslovii, chto tol'ko nebol'shoj procent otvetov imeet neskol'ko predstavlenij) i potencial'no narushaet sekretnost' pol'zovatelya.
- Ono uslozhnyaet realizaciyu pervonachal'nogo servera i algoritmov generacii otvetov na zapros.
- Ono mozhet ogranichivat' sposobnost' obshchego kesha ispol'zovat' odin i tot zhe otvet dlya zaprosov neskol'kih pol'zovatelej.
HTTP/1.1 vklyuchaet sleduyushchie polya zagolovka zaprosa (request-header), kotorye obespechivayut upravlyaemoe serverom obsuzhdenie posredstvom opisaniya vozmozhnostej agenta pol'zovatelya i predpochtenij samogo pol'zovatelya: Accept (razdel 14.1), Accept-Charset (razdel 14.2), Accept-Encoding (razdel 14.3), Accept-Language (razdel 14.4), and User-Agent (razdel 14.42). Odnako pervonachal'nyj server ne ogranichen etim i MOZHET izmenit' otvet, osnovyvayas' na lyubom aspekte zaprosa, vklyuchaya informaciyu, kotoraya ne soderzhitsya v polyah zagolovka zaprosa ili informaciyu iz rasshirennyh polej zagolovka, ne opredelennyh v etoj specifikacii.
Pervonachal'nyj server HTTP/1.1 DOLZHEN vklyuchat' sootvetstvuyushchee pole zagolovka Vary (razdel 14.43) v lyuboj keshiruemyj otvet, osnovannyj na upravlyamom serverom obsuzhdenii. Pole zagolovka Vary opisyvaet harakteristiki, kotorye mogut menyat'sya v otvete (to est' harakteristiki, soglasno kotorym pervonachal'nyj server vybiraet "nailuchshij" otvet iz neskol'kih predstavlenij).
Obshchie HTTP/1.1 keshi DOLZHNY raspoznat' pole zagolovka Vary, esli on prisutstvuet v otvete, i otvechat' trebovaniyam, opisannym v razdele 13.6, kotoryj opisyvaet vzaimodejstviya mezhdu keshirovaniem i obsuzhdeniem soderzhimogo.
12.2 Upravlyaemoe agentom obsuzhdenie.
Pri upravlyaemom agentom obsuzhdenii, vybor luchshego predstavleniya otveta vypolnyaetsya agentom pol'zovatelya posle polucheniya nachal'nogo otveta pervonachal'nogo servera. Vybor osnovan na spiske dostupnyh predstavlenij otveta, vklyuchennom v polya zagolovka (eta specifikaciya rezerviruet imya polya Alternates, kak opisano v prilozhenii 19.6.2.1) ili telo ob容kta nachal'nogo otveta. Kazhdoe predstavlenie identificiruetsya sobstvennym URI. Vybor predstavleniya mozhet vypolnyat'sya avtomaticheski (esli agent pol'zovatelya sposoben eto sdelat') ili vruchnuyu pol'zovatelem iz sgenerirovannogo (vozmozhno gipertekstovogo) menyu.
Upravlyaemoe agentom obsuzhdenie vygodno, kogda otvet var'iruetsya po obshcheispol'zuemym harakteristikam (takim kak tip, yazyk, ili kodirovanie), kogda pervonachal'nyj server ne sposoben opredelit' vozmozhnosti agenta pol'zovatelya putem issledovaniya zaprosa, i obychno pri ispol'zovanii obshchih keshej dlya raspredeleniya nagruzki na server i umen'sheniya ispol'zovaniya seti.
Upravlyaemoe agentom obsuzhdenie stradaet tem, chto dlya polucheniya samogo luchshego al'ternativnogo predstavleniya trebuetsya vtoroj zapros. |tot vtoroj zapros effektiven tol'ko togda, kogda ispol'zuetsya keshirovanie. Krome togo, eta specifikaciya ne opredelyaet nikakogo mehanizma dlya obespecheniya avtomaticheskogo vybora, hotya takzhe i ne predotvrashchaet razrabotku takogo mehanizma v kachestve rasshireniya i ispol'zovaniya v HTTP/1.1.
HTTP/1.1 opredelyaet kody sostoyaniya 300 (Mnozhestvennyj vybor, Multiple Choices) i 406 (Ne priemlem, Not Acceptable) dlya obespecheniya upravlyaemogo agentom obsuzhdeniya, kogda server ne zhelaet ili ne sposoben obespechit' izmenenie otveta, ispol'zuya upravlyaemoe serverom obsuzhdenie.
12.3 Prozrachnoe obsuzhdenie.
Prozrachnoe obsuzhdenie - eto kombinaciya upravlyaemogo serverom i upravlyaemogo agentom obsuzhdeniya. Kogda kesh obespechen spiskom dostupnyh predstavlenij otveta (kak pri upravlyaemom agentom obsuzhdenii) i izmenyayushchiesya harakteristiki polnost'yu ponyaty keshem, togda on sposoben vypolnyat' upravlyaemoe serverom obsuzhdenie posleduyushchih zaprosov etogo zhe resursa ot imeni pervonachal'nogo servera.
Prozrachnoe obsuzhdenie imeet to preimushchestvo, chto rabota po obsuzhdeniyu raspredelyaetsya. Kogda kesh sposoben pravil'no predpolozhit' nuzhnyj otvet sokrashchaetsya rabota, kotoraya ran'she trebovalas' ot pervonachal'nogo servera i ne proishodit zaderzhki vtorogo zaprosa, kak pri upravlyaemom agentom obsuzhdenii.
|ta specifikaciya ne opredelyaet nikakogo mehanizma prozrachnogo obsuzhdeniya, hotya takzhe i ne predotvrashchaet razrabotku takogo mehanizma v kachestve rasshireniya i ispol'zovaniya v HTTP/1.1. HTTP/1.1 kesh, vypolnyayushchij prozrachnoe obsuzhdenie DOLZHEN vklyuchat' pole zagolovka Vary (opredelyayushchee parametry, kotorye mogut var'irovat'sya) v otvet, esli on keshiruem, chtoby garantirovat' pravil'nuyu interpretaciyu vsemi HTTP/1.1 klientami. Informaciyu upravlyaemogo agentom obsuzhdeniya, predstavlennuyu pervonachal'nym serverom, SLEDUET vklyuchat' v otvet pri prozrachnom obsuzhdenii.