ʻO kahi hoʻouka kaua ma nā ʻōnaehana mua-hope-back-end e hiki ai iā mākou ke wili i nā noi ʻaoʻao ʻekolu

Hōʻike ʻia nā kikoʻī o kahi hoʻouka hou ʻana i nā pūnaewele e hoʻohana ana i kahi hiʻohiʻona mua-hope-back-end, e like me nā mea e holo ana ma o nā pūnaewele hāʻawi ʻike, nā mea kaulike a i ʻole nā ​​​​proxies. Hāʻawi ka hoʻouka ʻana, ma ka hoʻouna ʻana i kekahi mau noi, e hoʻopili i loko o nā mea o nā noi ʻē aʻe i hana ʻia ma ka pae like ma waena o ka frontend a me ka hope. Ua hoʻohana maikaʻi ʻia ke ʻano i manaʻo ʻia e hoʻonohonoho i kahi hoʻouka ʻana i hiki ai ke hoʻopaʻa i nā ʻāpana hōʻoia o nā mea hoʻohana o ka lawelawe PayPal, ka mea i uku i nā mea noiʻi e pili ana i 40 tausani kālā ma ke ʻano o kahi papahana e hoʻomaopopo e pili ana i ka hiki ʻana mai o nā haʻahaʻa unpatched. Hoʻopili pū ʻia ka hoʻouka ʻana i nā pūnaewele e hoʻohana ana i ka ʻoihana hoʻolaha ʻike ʻo Akamai.

ʻO ke kumu o ka pilikia, ʻo nā frontends a me nā hope e hāʻawi pinepine i nā pae like ʻole o ke kākoʻo no ka protocol HTTP, akā i ka manawa like e hoʻopili i nā noi mai nā mea hoʻohana like ʻole i kahi ala maʻamau. No ka hoʻohui ʻana i nā noi loaʻa mua a me nā noi hoʻoili hope, ua hoʻokumu ʻia kahi pilina TCP lōʻihi, kahi e hoʻouna ʻia ai nā noi mea hoʻohana, hoʻouna ʻia ma ke kaulahao kekahi ma hope o kekahi, i hoʻokaʻawale ʻia e ka protocol HTTP. No ka hoʻokaʻawale ʻana i nā noi, nā poʻomanaʻo "Loaʻa-Loaʻa" (e hoʻoholo i ka nui o ka ʻikepili i loko o ka noi) a me "Hoʻololi-Hoʻopili: ʻāpana"(ʻae iā ʻoe e hoʻoili i ka ʻikepili i nā ʻāpana, e kuhikuhi ana i nā poloka o nā nui like ʻole ma ke ʻano "{size}\r\n{block}\r\n{size}\r\n{block}\r\n0").

Piʻi ka pilikia inā kākoʻo wale ka frontend i ka "Content-Length" akā ʻaʻole i nānā i ka "Transfer-Encoding: chunked" (no ka laʻana, ua hana ʻo Akamai CDN i kēia) a i ʻole. Inā kākoʻo ʻia ʻo Transfer-Encoding: chunked ma nā ʻaoʻao ʻelua, hiki ke hoʻohana ʻia nā hiʻohiʻona hoʻokō o HTTP header parsers no ka hoʻouka ʻana (no ka laʻana, ke nānā ʻole ka hope mua i nā laina e like me "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked ”, “Transfer-Encoding” :[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" a i ole "Transfer-encoding : chunked", a ke hoʻokō pono nei ka hope iā lākou).

I kēia hihia, hiki i ka mea hoʻouka ke hoʻouna i kahi noi i loaʻa nā poʻomanaʻo "Content-Length" a me "Transfer-Encoding: chunked", akā ʻaʻole kūlike ka nui i ka "Content-Length" i ka nui o ke kaulahao chunked, ka mea. ʻoi aku ka liʻiliʻi ma mua o ka waiwai maoli. Inā nā kaʻina hana mua a hoʻouna i ka noi e like me ka "Content-Length" a ke kali ka hope i ka pau ʻana o ka poloka ma muli o "Transfer-Encoding: chunked", a laila ka hopena o ka ʻikepili e pili ana i ka "Transfer-Encoding: chunked" e. e hoʻoholo mua ʻia a ʻo ke koena huelo o ka noi ka mea hoʻouka i ka hoʻomaka o ka noi aʻe, ʻo ia hoʻi. hiki i ka mea hoʻouka ke hoʻopili i ka ʻikepili kūʻokoʻa i ka hoʻomaka ʻana o ke noi a kekahi i hoʻouna ʻia ma hope.

ʻO kahi hoʻouka kaua ma nā ʻōnaehana mua-hope-back-end e hiki ai iā mākou ke wili i nā noi ʻaoʻao ʻekolu

No ka hoʻoholo ʻana i ka pilikia i ka hui ʻana o ka frontend-backend i hoʻohana ʻia, hiki iā ʻoe ke hoʻouna i kahi noi e like me kēia ma o ka frontend:

POST /e pili ana iā HTTP/1.1
Mea hoʻokele: example.com
Hoʻololi-Hoʻopili: ʻāpana
Lōʻihi ʻikepili: 4

1
Z
Q

Aia ka pilikia inā ʻaʻole hoʻokō koke ka backend i ka noi a kali no ka hōʻea ʻana mai o ka poloka palena ʻole hope loa o ka ʻikepili chunked. No ka hōʻoia piha loa hoomakaukauia he mea hoʻohana kūikawā e hoʻāʻo ana i nā ala hiki ke hūnā i ke poʻomanaʻo "Transfer-Encoding: chunked" mai ka mua.

ʻO ka hoʻokō ʻana i kahi hoʻouka kaua maoli e pili ana i ka hiki o ka pūnaewele i hoʻouka ʻia, no ka laʻana, i ka wā e hoʻouka ai i ka noi pūnaewele Trello, hiki iā ʻoe ke pani i ka hoʻomaka ʻana o ka noi (hoʻololi i ka ʻikepili e like me "PUT /1/members/1234... x=x&csrf =1234&username=testzzz&bio=cake”) a hoʻouna i kahi leka me ka noi kumu a kahi mea hoʻohana ʻaoʻao ʻekolu a me ka Kuki hōʻoia i kuhikuhi ʻia i loko. No ka hoʻouka ʻana i ka saas-app.com, ua hiki ke hoʻololi i ka code JavaScript i ka pane ma ka hoʻololi ʻana i kekahi o nā ʻāpana noi. No ka hoʻouka ʻana ma redhat.com, ua hoʻohana ʻia kahi mea hana kūloko e hoʻihoʻi hou i ka pūnaewele o ka mea hoʻouka (kahi noi o ke ʻano "POST /search?dest=../assets/idx?redir=//[pale ʻia ka leka uila]/ HTTP/1.1").

ʻO ka hoʻohana ʻana i ke ʻano no nā ʻupena hoʻolaha ʻike i hiki ke hoʻololi wale i ka pūnaewele i noi ʻia ma ka hoʻololi ʻana i ke poʻo "Host:". Hiki ke hoʻohana ʻia ka hoʻouka ʻana no ka ʻona ʻana i nā mea o nā ʻōnaehana hoʻopaʻa ʻana i nā maʻiʻo a unuhi i ka ʻikepili huna huna. ʻO ke kiʻekiʻe o ke ʻano ka hoʻonohonoho ʻana i kahi hoʻouka kaua ma PayPal, kahi i hiki ai ke hoʻopaʻa i nā ʻōlelo huna i hoʻouna ʻia e nā mea hoʻohana i ka wā o ka hōʻoia (ua hoʻololi ʻia ka noi iframe e hoʻokō i ka JavaScript ma ka pōʻaiapili o ka ʻaoʻao paypal.com/us/gifts, no ka mea. ʻaʻole i hoʻohana ʻia ka CSP (Content Security Policy).

ʻO ka mea hoihoi, i ka makahiki 2005 aia noi ʻia ʻO kahi ʻano hana hoʻopunipuni noi like ʻole e hiki ai iā ʻoe ke hoʻopunipuni i ka ʻikepili i nā proxies caching (Tomcat, squid, mod_proxy) a i ʻole ke kāpae ʻana i ka pale ahi ma ke kuhikuhi ʻana i kekahi mau noi "GET" a i ʻole "POST" i loko o hoʻokahi kau HTTP.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka