Kuwukira pamakina akutsogolo-kumbuyo-kumapeto komwe kumatilola kuti tilowe muzopempha za chipani chachitatu

Zawululidwa tsatanetsatane wa kuwukira kwatsopano pamasamba omwe amagwiritsa ntchito kutsogolo-kumapeto-kumbuyo-kumapeto chitsanzo, monga omwe akuyenda kudzera pa intaneti yobweretsera zinthu, zolemetsa zolemetsa kapena ma proxies. Kuwukirako kumalola, potumiza zopempha zina, kuti zigwirizane ndi zomwe zili muzopempha zina zomwe zimakonzedwa mu ulusi womwewo pakati pa frontend ndi backend. Njira yomwe idaperekedwa idagwiritsidwa ntchito bwino pokonzekera kuwukira komwe kunapangitsa kuti zitheke kutsata magawo ovomerezeka a ogwiritsa ntchito ntchito ya PayPal, yomwe idalipira ofufuza pafupifupi 40 madola zikwizikwi ngati gawo la pulogalamu yodziwitsa za kukhalapo kwa ziwopsezo zomwe sizinachitike. Kuwukiraku kumagwiranso ntchito kumasamba omwe amagwiritsa ntchito Akamai content delivery network.

Vutoli ndiloti kutsogolo ndi kumbuyo nthawi zambiri zimapereka magawo osiyanasiyana othandizira protocol ya HTTP, koma nthawi yomweyo amaphatikiza zopempha kuchokera kwa ogwiritsa ntchito osiyanasiyana kupita kunjira yofanana. Kuti mulumikizane ndi zopempha zolandirira kutsogolo ndi zopempha zopangira kumbuyo, kulumikizana kwa nthawi yayitali kwa TCP kumakhazikitsidwa, kudzera momwe zopempha za ogwiritsa ntchito zimatumizidwa, zimaperekedwa pamodzi ndi unyolo umodzi pambuyo pa wina, wolekanitsidwa ndi protocol ya HTTP. Kuti mulekanitse zopempha, mitu ya "Content-Length" (imatsimikizira kuchuluka kwa data yomwe yafunsidwa) ndi "Transfer-Encoding: chunked"(amakulolani kusamutsa deta m'zigawo, kufotokoza midadada ya makulidwe osiyanasiyana "{size}\r\n{block}\r\n{size}\r\n{block}\r\n0").

Vuto limakhalapo ngati kutsogolo kumangogwirizira "Utali-Zam'kati" koma kunyalanyaza "Transfer-Encoding: chunked" (mwachitsanzo, Akamai CDN anachita izi) kapena mosemphanitsa. Ngati Transfer-Encoding: chunked imathandizira mbali zonse ziwiri, mawonekedwe a HTTP parsers atha kugwiritsidwa ntchito powukira (mwachitsanzo, kutsogolo kukanyalanyaza mizere ngati "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked ”, “Transfer-Encoding” :[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" kapena "Transfer-Encoding : chunked", ndi backend imawakonza bwino).

Pamenepa, wowukirayo atha kutumiza pempho lomwe lili ndi mitu ya "Content-Length" ndi "Transfer-Encoding: chunked", koma kukula kwa "Content-Length" sikukugwirizana ndi kukula kwa tcheni chodulidwa, chomwe. ndi yaying'ono kuposa mtengo weniweni. Ngati njira yakutsogolo ikuyang'ana ndikutumiza pempho molingana ndi "Utali-Wakati" ndipo kumbuyo kumadikirira kuti chipikacho chimalize kutengera "Transfer-Encoding: chunked", ndiye kuti kutha kwa data kutengera "Transfer-Encoding: chunked" zidziwike kale ndipo mchira wotsalira wa pempho wotsutsayo udzakhala kumayambiriro kwa pempho lotsatira, i.e. wowukirayo azitha kuphatikizira deta yosasinthika kumayambiriro kwa pempho la munthu wina lomwe litumizidwa kenako.

Kuwukira pamakina akutsogolo-kumbuyo-kumapeto komwe kumatilola kuti tilowe muzopempha za chipani chachitatu

Kuti mudziwe vuto pamaphatikizidwe akutsogolo-backend, mutha kutumiza zopempha monga izi kudzera kutsogolo:

POST /za HTTP/1.1
Wothandizira: example.com
Transfer-Encoding: chunked
Utali wazinthu: 4

1
Z
Q

Vuto limakhalapo ngati backend sichikonza zopemphazo nthawi yomweyo ndikudikirira kufika kwa ziro zomaliza za data ya chunked. Kuti mudziwe zambiri kukonzekera chida chapadera chomwe chimayesanso njira zotheka zobisa mutu wa "Transfer-Encoding: chunked" kuchokera kutsogolo.

Kuchita ziwopsezo zenizeni zimatengera kuthekera kwa tsamba lomwe lawukiridwa, mwachitsanzo, polimbana ndi pulogalamu ya Trello, mutha kusintha chiyambi cha pempho (zolowa m'malo ngati "PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=keke”) ndi kutumiza uthenga kuphatikiza pempho loyambilira la munthu wina wogwiritsa ntchito chipani chachitatu ndi Cookie yotsimikizika yotchulidwa mmenemo. Pakuwukira kwa saas-app.com, zidakhala zotheka kusintha JavaScript poyankha poyiyika mu imodzi mwazopemphazo. Pachiwopsezo cha redhat.com, wothandizira wamkati adagwiritsidwa ntchito kulozera patsamba la wowukirayo (pempho la fomu "POST /search?dest=../assets/idx?redir=//[imelo ndiotetezedwa]/ HTTP/1.1").

Kugwiritsa ntchito njira yama netiweki otumizira zinthu kunapangitsa kuti zitheke kungosintha malo omwe adafunsidwa ndikuyika mutu wa "Host:". Kuwukiraku kungagwiritsidwenso ntchito kuwononga zomwe zili mu kachitidwe ka caching ndikuchotsa zinsinsi zosungidwa. Chotsatira cha njirayo chinali bungwe la kuwukira kwa PayPal, zomwe zidapangitsa kuti zitheke kutsata mawu achinsinsi otumizidwa ndi ogwiritsa ntchito panthawi yotsimikizika (pempho la iframe lidasinthidwa kuti lipereke JavaScript malinga ndi tsamba la paypal.com/us/gifts, chifukwa zomwe CSP (Content Security Policy) sizinagwiritsidwe ntchito).

Chochititsa chidwi, mu 2005 panali akufuna njira yofananira yofunsira yomwe imakulolani kuti muwononge deta mu ma proxies (Tomcat, squid, mod_proxy) kapena kudutsa zotchinga zozimitsa moto potchula zopempha zingapo za "GET" kapena "POST" mkati mwa gawo limodzi la HTTP.

Source: opennet.ru

Kuwonjezera ndemanga