Connection management in HTTP/1.x
УпÑавление Ñоединением ÑвлÑеÑÑÑ ÐºÐ»ÑÑевой Ñемой HTTP: оÑкÑÑÑие и поддеÑжка ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð·Ð½Ð°ÑиÑелÑное влиÑние на пÑоизводиÑелÑноÑÑÑ Ð²ÐµÐ±-ÑайÑов и веб-пÑиложений. Ð HTTP/1.x имеÑÑÑÑ ÑледÑÑÑие модели: кÑаÑкоÑÑоÑнÑе ÑоединениÑ, поÑÑоÑннÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ конвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка HTTP (HTTP pipelining).
РкаÑеÑÑве ÑÑанÑпоÑÑного пÑоÑокола, обеÑпеÑиваÑÑего ÑвÑÐ·Ñ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом, HTTP по болÑÑей ÑаÑÑи иÑполÑзÑÐµÑ TCP. ÐÑо кÑаÑкоÑÑоÑнÑе (short-lived) ÑоединениÑ: пÑи каждой оÑпÑавке запÑоÑа оÑкÑÑваеÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение, коÑоÑое закÑÑваеÑÑÑ Ð¿Ð¾Ñле Ñого, как оÑÐ²ÐµÑ Ð¿Ð¾Ð»ÑÑен.
Такой модели пÑиÑÑÑи пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð² оÑноÑении пÑоизводиÑелÑноÑÑи: ÑеÑÑÑÑÑ Ð¿ÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ Ð·Ð°ÑÑаÑиваÑÑ Ð½Ð° оÑкÑÑÑие каждого ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ TCP. ÐлиенÑÑ Ð¸ ÑеÑвеÑом Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ обмениваÑÑÑÑ Ð½ÐµÑколÑкими ÑообÑениÑми. ÐÑи оÑпÑавке каждого запÑоÑа пÑÐ¸Ñ Ð¾Ð´Ð¸ÑÑÑ ÑÑиÑаÑÑÑÑ Ñ Ð·Ð°Ð¿Ð°Ð·Ð´Ñванием и пÑопÑÑкной ÑпоÑобноÑÑÑÑ ÑеÑи. СовÑеменнÑм веб-ÑÑÑаниÑам ÑÑебÑеÑÑÑ Ð²ÑполнÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво (деÑÑÑки) запÑоÑов Ð´Ð»Ñ Ð¿ÐµÑедаÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ инÑоÑмаÑии, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð½ÐµÑÑÑекÑивной.
Ð HTTP/1.1 бÑли ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð´Ð²Ðµ новÑе модели. ÐÐ¾Ð´ÐµÐ»Ñ Ð¿Ð¾ÑÑоÑнного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¾ÑÑавлÑÐµÑ Ñоединение оÑкÑÑÑÑм Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾ÑледоваÑелÑнÑми запÑоÑами, ÑÐºÐ¾Ð½Ð¾Ð¼Ñ Ð²ÑемÑ, ÑÑебÑемое Ð´Ð»Ñ Ð¾ÑкÑÑÑÐ¸Ñ Ð½Ð¾Ð²ÑÑ Ñоединений. ÐÐ¾Ð´ÐµÐ»Ñ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑной обÑабоÑки HTTP Ð´ÐµÐ»Ð°ÐµÑ ÑледÑÑÑий Ñаг - она позволÑÐµÑ Ð¾ÑÑÑлаÑÑ Ð½ÐµÑколÑко запÑоÑов подÑÑд, не дожидаÑÑÑ Ð¾ÑвеÑа, ÑÑо ÑÑÑеÑÑвенно ÑокÑаÑÐ°ÐµÑ Ð²ÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð² ÑеÑи.

ÐÑимеÑание: Ð HTTP/2 внеÑÐµÐ½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе модели ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñоединением.
Ðажно оÑмеÑиÑÑ, ÑÑо ÑпÑавление Ñоединением в HTTP пÑименÑеÑÑÑ Ðº ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¿Ð¾ÑледоваÑелÑнÑми Ñзлами, и ÑвлÑеÑÑÑ Ð¿Ð¾ÑаговÑм (hop-by-hop) а не "конеÑ-к-конÑÑ" (end-to-end). ÐоделÑ, иÑполÑзÑÐµÐ¼Ð°Ñ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñа Ñ ÐµÐ³Ð¾ пеÑвÑм пÑокÑи, Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑокÑи и конеÑнÑм ÑеÑвеÑом (или лÑбÑм из пÑомежÑÑоÑнÑÑ
ÑеÑвеÑов). Ðаголовки HTTP, вовлеÑÑннÑе в опÑеделение модели ÑоединениÑ, Ñипа HTTPHeader("Connection")}} и Keep-Alive, ÑвлÑÑÑÑÑ Ð¿Ð¾ÑаговÑми заголовками, знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ
могÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿ÑомежÑÑоÑнÑми Ñзлами.
ÐÑаÑкоÑÑоÑнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (Short-lived connections)
ÐÑÑ Ð¾Ð´Ð½Ð¾Ð¹ моделÑÑ Ð² HTTP, в HTTP/1.0 она же ÑвлÑеÑÑÑ Ð¼Ð¾Ð´ÐµÐ»ÑÑ Ð¿Ð¾ ÑмолÑаниÑ, ÑвлÑÑÑÑÑ ÐºÑаÑкоÑÑоÑнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (short-lived connections). ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ HTTP запÑоÑа иÑполÑзÑеÑÑÑ Ð¾ÑделÑное Ñоединение; ÑÑо ознаÑаеÑ, ÑÑо "ÑÑкопожаÑие" TCP пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿ÐµÑед каждÑм из запÑоÑов HTTP, идÑÑÐ¸Ñ Ð¾Ð´Ð¸Ð½ за дÑÑгим.
TCP-ÑÑкопожаÑие Ñамо по Ñебе заÑÑаÑно по вÑемени, но TCP-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿ÑиÑпоÑобилиÑÑ ÑпÑавлÑÑÑÑÑ Ñ ÑÑой нагÑÑзкой, пÑевÑаÑаÑÑÑ Ð² ÑÑÑойÑивÑе (или ÑÑплÑе) ÑоединениÑ. ÐÑаÑкоÑÑоÑнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ иÑполÑзÑÑÑ ÑÑо полезное ÑвойÑÑво TCP, Ñак ÑÑо ÑÑÑекÑивноÑÑÑ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð½Ð¸Ð¶Ðµ опÑималÑной из-за Ñого ÑÑо пеÑедаÑа оÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾ новомÑ, Ñ Ð¾Ð»Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑоединениÑ.
ÐÐ°Ð½Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ ÑвлÑеÑÑÑ Ð¼Ð¾Ð´ÐµÐ»ÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² HTTP/1.0 (пÑи оÑÑÑÑÑÑвии заголовка Connection, или когда его знаÑением ÑвлÑеÑÑÑ close). Ð HTTP/1.1 ÑÐ°ÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸ÑполÑзÑеÑÑÑ ÑолÑко еÑли заголовок Connection поÑÑлаеÑÑÑ Ñо знаÑением close.
ÐÑимеÑание: ÐÑли ÑеÑÑ Ð½Ðµ идÑÑ Ð¾Ð± оÑÐµÐ½Ñ ÑÑаÑой, не поддеÑживаÑÑей поÑÑоÑннÑе ÑоединениÑ, ÑиÑÑеме, даннÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð¸ÑполÑзоваÑÑ Ð½ÐµÑ ÑмÑÑла.
ÐоÑÑоÑннÑе ÑоединениÑ
ÐÑаÑкоÑÑоÑнÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÑÑ Ð´Ð²Ð° болÑÑÐ¸Ñ Ð½ÐµÐ´Ð¾ÑÑаÑка: ÑÑебÑеÑÑÑ Ð·Ð½Ð°ÑиÑелÑное вÑÐµÐ¼Ñ Ð½Ð° ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑоединениÑ, и Ñо, ÑÑо ÑÑÑекÑивноÑÑÑ TCP-ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлÑÑÑаеÑÑÑ ÑолÑко по пÑоÑеÑÑвии некоÑоÑого вÑемени Ð¾Ñ Ð½Ð°Ñала его иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ (ÑÑплое Ñоединение). ÐÐ»Ñ ÑеÑÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð¿Ñоблем бÑла ÑазÑабоÑана конÑепÑÐ¸Ñ Ð¿Ð¾ÑÑоÑнного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (persistent connection), еÑÑ Ð´Ð¾ поÑÐ²Ð»ÐµÐ½Ð¸Ñ HTTP/1.1. Ðго Ñакже назÑваÑÑ Ñоединением keep-alive.
ÐоÑÑоÑннÑм назÑваÑÑ Ñоединение, коÑоÑое оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑм некоÑоÑÑй пеÑиод вÑемени и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзовано Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
запÑоÑов, благодаÑÑ ÑÐµÐ¼Ñ Ð¾ÑÐ¿Ð°Ð´Ð°ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑÑ Ð² новÑÑ
ÑÑкопожаÑиÑÑ
TCP и иÑполÑзÑÑÑÑÑ ÑÑедÑÑва повÑÑÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи TCP. ÐÑо Ñоединение оÑÑаÑÑÑÑ Ð¾ÑкÑÑÑÑм не навÑегда: пÑазднÑе ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÑÑваÑÑÑÑ Ð¿Ð¾ иÑÑеÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑого вÑемени (Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñного вÑемени, на пÑоÑÑжении коÑоÑого Ñоединение должно оÑÑаваÑÑÑÑ Ð¾ÑкÑÑÑÑм, ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Keep-Alive).
У поÑÑоÑннÑÑ Ñоединений еÑÑÑ Ñвои недоÑÑÑÑ; даже ÑабоÑÐ°Ñ Ð²Ñ Ð¾Ð»Ð¾ÑÑÑÑ, они поÑÑеблÑÑÑ ÑеÑÑÑÑÑ ÑеÑвеÑа, а пÑи вÑÑокой нагÑÑзке могÑÑ Ð¿ÑоводиÑÑÑÑ DoS-аÑаки. Ð ÑÐ°ÐºÐ¸Ñ ÑлÑÑаÑÑ Ð±Ð¾Ð»ÑÑÑÑ ÑÑÑекÑивноÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð¾Ð±ÐµÑпеÑиÑÑ Ð½Ðµ поÑÑоÑннÑе ÑоединениÑ, коÑоÑÑе закÑÑваÑÑÑÑ ÐºÐ°Ðº ÑолÑко оÑвободÑÑÑÑ.
Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ HTTP/1.0 по ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ ÑвлÑÑÑÑÑ Ð¿Ð¾ÑÑоÑннÑми. ÐÐ»Ñ Ð¿ÑевÑаÑÐµÐ½Ð¸Ñ Ð¸Ñ
в поÑÑоÑннÑе надо пÑиÑвоиÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑ Connection знаÑение, оÑлиÑное Ð¾Ñ close - обÑÑно retry-after.
Ð HTTP/1.1 ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð¿Ð¾ÑÑоÑннÑми по ÑмолÑаниÑ, Ñак ÑÑо ÑÑÐ¾Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº болÑÑе не ÑÑебÑеÑÑÑ (но ÑаÑÑо добавлÑеÑÑÑ Ð² каÑеÑÑве заÑиÑной меÑÑ Ð½Ð° ÑлÑÑай, еÑли поÑÑебÑеÑÑÑ Ð¾ÑÐºÐ°Ñ Ðº HTTP/1.0).
ÐонвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка в HTTP (HTTP pipelining)
ÐÑимеÑание: ÐонвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка HTTP в ÑовÑеменнÑÑ Ð±ÑаÑзеÑÐ°Ñ Ð½Ðµ акÑивиÑована по ÑмолÑаниÑ:
- ÐÑокÑи Ñ Ð±Ð°Ð³Ð°Ð¼Ð¸ вÑе еÑÑ Ð²ÑÑÑеÑаÑÑÑÑ, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑÑÑаннÑм и непÑедÑказÑемÑм ÑвлениÑм, коÑоÑÑе веб-ÑазÑабоÑÑикам ÑÑÑдно пÑедÑказаÑÑ Ð¸ диагноÑÑиÑоваÑÑ.
- ÐонвейеÑнÑÑ Ð¾Ð±ÑабоÑÐºÑ Ñложно пÑавилÑно ÑеализоваÑÑ: обÑем пеÑедаваемÑÑ ÑеÑÑÑÑов, иÑполÑзÑÐµÐ¼Ð°Ñ RTT и ÑÑÑекÑÐ¸Ð²Ð½Ð°Ñ Ð¿ÑопÑÑÐºÐ½Ð°Ñ ÑпоÑобноÑÑÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенное влиÑние на Ñе ÑлÑÑÑениÑ, ÑÑо обеÑпеÑиваÑÑÑÑ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑной обÑабоÑкой. ÐонвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка HTTP, Ñаким обÑазом, даÑÑ ÑÑÑеÑÑвенное ÑлÑÑÑение не во вÑÐµÑ ÑлÑÑаÑÑ .
- ÐонвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка подвеÑжена пÑоблеме HOL.
Ðо ÑÑим пÑиÑинам в HTTP/2 на ÑÐ¼ÐµÐ½Ñ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑной обÑабоÑке пÑиÑÑл новÑй алгоÑиÑм, мÑлÑÑиплекÑноÑÑÑ (multiplexing).
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑоÑÑ HTTP идÑÑ Ð¿Ð¾ÑледоваÑелÑно. ÐовÑй запÑÐ¾Ñ Ð²ÑдаÑÑÑÑ ÑолÑко поÑле Ñого, как полÑÑен оÑÐ²ÐµÑ Ð½Ð° пÑедÑдÑÑий. Ðз-за запаздÑваний в ÑеÑи и огÑаниÑений на пÑопÑÑкнÑÑ ÑпоÑобноÑÑÑ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº ÑомÑ, ÑÑо ÑеÑÐ²ÐµÑ ÑÐ²Ð¸Ð´Ð¸Ñ ÑледÑÑÑий запÑÐ¾Ñ Ñ ÑÑÑеÑÑвенной задеÑжкой.
ÐонвейеÑÐ½Ð°Ñ Ð¾Ð±ÑабоÑка ÑÑо пÑоÑеÑÑ Ð¾ÑÑÑлки поÑледоваÑелÑнÑÑ Ð·Ð°Ð¿ÑоÑов по Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¿Ð¾ÑÑоÑÐ½Ð½Ð¾Ð¼Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ðµ дожидаÑÑÑ Ð¾ÑвеÑа. Таким обÑазом избегаÑÑ Ð·Ð°Ð´ÐµÑжки ÑоединениÑ. ТеоÑеÑиÑеÑки, пÑоизводиÑелÑноÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло Ð±Ñ Ð¿Ð¾Ð²ÑÑиÑÑ Ñакже за ÑÑÑÑ Ñпаковки двÑÑ Ð·Ð°Ð¿ÑоÑов HTTP в одно и Ñо же ÑообÑение TCP. ТипиÑнÑй MSS (Maximum Segment Size - ÐакÑималÑнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑегменÑа) доÑÑаÑоÑно велик, ÑÑÐ¾Ð±Ñ Ð²Ð¼ÐµÑÑиÑÑ Ð½ÐµÑколÑко пÑоÑÑÑÑ Ð·Ð°Ð¿ÑоÑов, Ñ Ð¾ÑÑ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° обÑем запÑоÑов HTTP пÑодолжаÑÑ ÑаÑÑи.
Ðе вÑе ÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑоÑов HTTP позволÑÑÑ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑнÑÑ Ð¾Ð±ÑабоÑкÑ: ÑолÑко идемпоÑенÑнÑе меÑодÑ, а именно GET, HEAD, PUT и DELETE, можно пеÑезапÑÑкаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно: в ÑлÑÑае ÑÐ±Ð¾Ñ ÑодеÑжимое конвейеÑной пеÑедаÑи можно пÑоÑÑо повÑоÑиÑÑ.
РнаÑи дни лÑбой ÑдовлеÑвоÑÑÑÑий ÑÑебованиÑм HTTP/1.1 пÑокÑи или ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ поддеÑживаÑÑ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑнÑÑ Ð¾Ð±ÑабоÑкÑ, Ñ Ð¾ÑÑ Ð½Ð° пÑакÑике Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво огÑаниÑений, поÑÑÐ¾Ð¼Ñ Ð½Ð¸ один из ÑовÑеменнÑÑ Ð±ÑаÑзеÑов не акÑивиÑÑÐµÑ ÑÑÐ¾Ñ Ñежим по ÑмолÑаниÑ.
Ðоменное Ñазделение (Domain sharding)
ÐÑимеÑание: Ðе иÑполÑзÑйÑе ÑÑÐ¾Ñ ÑÑÑаÑевÑий меÑод без кÑайней Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи; вмеÑÑо ÑÑого пеÑÐµÑ Ð¾Ð´Ð¸Ñе на HTTP/2. Ð HTTP/2 доменное Ñазделение болÑÑе не ÑÑебÑеÑÑÑ: Ñоединение HTTP/2 Ñоединение пÑекÑаÑно ÑабоÑÐ°ÐµÑ Ñ Ð¿Ð°ÑаллелÑнÑми непÑиоÑиÑезиÑованнÑми запÑоÑами. Ðоменное Ñазделение даже вÑÐµÐ´Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи. ÐолÑÑинÑÑво ÑеализаÑий HTTP/2 иÑполÑзÑÐµÑ Ð¼ÐµÑод, назÑваемÑй ÑлиÑнием Ñоединений (connection coalescing) Ð´Ð»Ñ Ð²Ð¾Ð·Ð²ÑаÑа конеÑного доменного ÑазделениÑ.
ÐоÑколÑÐºÑ Ñоединение HTTP/1.x ÑвлÑеÑÑÑ Ð¿Ð¾ÑледоваÑелÑнÑми запÑоÑами, даже без ÑпоÑÑдоÑиваниÑ, оно не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿ÑималÑнÑм без налиÑÐ¸Ñ Ð´Ð¾ÑÑаÑоÑно болÑÑой пÑопÑÑкной ÑпоÑобноÑÑи. ÐÑаÑзеÑÑ Ð½Ð°Ñ Ð¾Ð´ÑÑ ÑеÑение в оÑкÑÑÑии неÑколÑÐºÐ¸Ñ Ñоединений к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ Ñ Ð¾ÑÑÑлкой паÑаллелÑнÑÑ Ð·Ð°Ð¿ÑоÑов. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо когда-Ñо бÑло 2-3 ÑоединениÑ, но ÑейÑÐ°Ñ Ð¸Ñ ÑиÑло возÑоÑло пÑимеÑно до 6 паÑаллелÑнÑÑ Ñоединений. ÐÑи попÑÑке иÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑее колиÑеÑÑво еÑÑÑ ÑиÑк ÑпÑовоÑиÑоваÑÑ Ð·Ð°ÑиÑÑ Ð¾Ñ DoS-аÑак Ñо ÑÑоÑÐ¾Ð½Ñ ÑеÑвеÑа.
ÐÑли ÑеÑÐ²ÐµÑ Ñ
оÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð±Ð¾Ð»ÐµÐµ бÑÑÑÑÑй оÑÐ²ÐµÑ Ð¾Ñ Ð²ÐµÐ±-ÑайÑа или пÑиложениÑ, он Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑкÑÑÑÑ Ð±Ð¾Ð»ÑÑе Ñоединений. ÐапÑимеÑ, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ñе ÑеÑÑÑÑÑ Ð½Ð° одном домене, Ñкажем, www.example.com, он Ð¼Ð¾Ð¶ÐµÑ ÑаÑпÑеделиÑÑ Ð¸Ñ
по неÑколÑким доменам, www1.example.com, www2.example.com, www3.example.com. ÐаждÑй из ÑÑиÑ
доменов ÑазÑеÑаеÑÑÑ Ð½Ð° Ñом же ÑеÑвеÑе, и веб-бÑаÑÐ·ÐµÑ Ð¾ÑкÑÐ¾ÐµÑ 6 Ñоединений к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ (в наÑем пÑимеÑе ÑиÑло Ñоединений возÑаÑÑÑÑ Ð´Ð¾ 18). ÐÑÐ¾Ñ Ð¼ÐµÑод назÑваÑÑ Ð´Ð¾Ð¼ÐµÐ½Ð½Ñм Ñазделением (domain sharding).

ÐаклÑÑение
УлÑÑÑение ÑпÑавлением ÑоединениÑми даÑÑ ÑÑÑеÑÑвенное ÑвелиÑение пÑоизводиÑелÑноÑÑи в HTTP. Ð HTTP/1.1 и HTTP/1.0 иÑполÑзование поÑÑоÑнного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ â по кÑайней меÑе пока оно не наÑÐ¸Ð½Ð°ÐµÑ ÑабоÑаÑÑ Ð²Ñ Ð¾Ð»Ð¾ÑÑÑÑ â пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº лÑÑÑей пÑоизводиÑелÑноÑÑи. Ðднако, пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ ÐºÐ¾Ð½Ð²ÐµÐ¹ÐµÑной обÑабоÑкой пÑивели к ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ ÑовеÑÑеннÑÑ ÑпоÑобов ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñоединением, ÑеализованнÑми в HTTP/2.