{"id":1546,"date":"2018-04-20T04:23:37","date_gmt":"2018-04-20T02:23:37","guid":{"rendered":"http:\/\/blog.webshark.hu\/?p=1546"},"modified":"2018-04-20T07:44:35","modified_gmt":"2018-04-20T05:44:35","slug":"mi-az-a-http2","status":"publish","type":"post","link":"http:\/\/blog.webshark.hu\/2018\/04\/20\/mi-az-a-http2\/","title":{"rendered":"Mi az a HTTP\/2? \u00c9s Te k\u00e9szen \u00e1llsz m\u00e1r r\u00e1?"},"content":{"rendered":"
2015-ben jelent meg \u00faj verzi\u00f3ja a HTTP-nek. Ez a HTTP\/2, mely m\u00e1ra k\u00e9szen \u00e1ll az alkalmaz\u00e1sra, \u00e9s sokkal gyorsabb netez\u00e9st \u00edg\u00e9r mindenki sz\u00e1m\u00e1ra.\u00a0Mivel a\u00a0HTTP\/2\u00a0m\u00e9g sokak sz\u00e1m\u00e1ra \u00faj, ez\u00e9rt \u00e9rdemes egy m\u00e9lyebb pillant\u00e1st vetni az alkalmaz\u00e1s\u00e1ra.\u00a0<\/strong><\/p>\n Azok sz\u00e1m\u00e1ra, akik nem is igaz\u00e1n tudj\u00e1k, hova tegy\u00e9k a HTTP-t, \u00e9s mit is jelent ez sz\u00e1mukra, a Smashing Magazine<\/a> \u00f6sszefoglal\u00f3ja alapj\u00e1n a gy\u00f6kerekn\u00e9l, azaz a HTTP mibenl\u00e9t\u00e9n\u00e9l kezdj\u00fck.<\/p>\n A Hypertext Transfer Protocol a szerverek \u00e9s a b\u00f6ng\u00e9sz\u0151k k\u00f6z\u00f6tti kapcsolatot ir\u00e1ny\u00edtja. 1991-ben j\u00f6tt l\u00e9tre, m\u00edg els\u0151 jav\u00edtott verzi\u00f3ja HTTP\/1.1 n\u00e9vre hallgatott, \u00e9s 1999 \u00f3ta \u00e9l vel\u00fcnk, de sok\u00e1ig nem ny\u00faltak hozz\u00e1. Pedig akkoriban a weboldalak m\u00e9g nagyon m\u00e1shogy n\u00e9ztek ki, mint amilyenekkel most futhatunk \u00f6ssze a weben. Els\u0151sorban a weboldalak m\u00e9rete n\u00f6vekedett meg az\u00f3ta, \u00edgy ma egy \u00e1tlagos weboldal 1,9 MB \u00e9s t\u00f6bb mint 100 egy\u00e9ni forr\u00e1s sz\u00fcks\u00e9ges ahhoz, hogy megjelenjen az oldal a b\u00f6ng\u00e9sz\u0151ablakban. Az egy\u00e9ni forr\u00e1s alatt olyan elemeket kell \u00e9rteni, mint egy k\u00e9p, egy font, egy JavaScript vagy egy CSS f\u00e1jl.<\/p>\n Manaps\u00e1g igen komoly k\u00fczdelem folyik a weboldalak sebess\u00e9g\u00e9nek jav\u00edt\u00e1sa \u00e9rdek\u00e9ben, \u00e9s ebbe beletartozik az is, hogy cs\u00f6kkenteni kell a bet\u00f6ltend\u0151 elemeknek a sz\u00e1m\u00e1t, m\u00e9ret\u00e9t, hogy m\u00e9g elfogadhat\u00f3 sebess\u00e9get \u00e9rj\u00fcnk el. A HTTP\/1.1 nem igaz\u00e1n teljes\u00edt j\u00f3l, amikor a mai k\u00f6vetelm\u00e9nyeknek kell megfelelnie.<\/p>\n M\u00e1r 2009-ben k\u00e9t m\u00e9rn\u00f6k a Google-t\u0151l bejelentette, hogy dolgoznak egy SPDY n\u00e9vre hallgat\u00f3 kutat\u00e1si projekten, ami kik\u00fcsz\u00f6b\u00f6li a HTTP\/1.1 n\u00e9h\u00e1ny hi\u00e1nyoss\u00e1g\u00e1t, \u00e9s az\u00f3ta m\u00e1r itt-ott haszn\u00e1lj\u00e1k is. Ennek az egyik legkomolyabb el\u0151nye az \u00fagynevezett multiplexing, vagyis, hogy p\u00e1rhuzamosan t\u00f6bb lek\u00e9r\u00e9s kiszolg\u00e1l\u00e1s\u00e1t is lehet\u0151v\u00e9 teszi egyetlen TCP kapcsolaton kereszt\u00fcl. Emellett a b\u00f6ng\u00e9sz\u0151k prioriz\u00e1lhatj\u00e1k, hogy mi az, amit a legfontosabbnak tartanak egy weboldal megjelen\u00edt\u00e9s\u00e9n\u00e9l. Cs\u00f6kkenti a HTTP header m\u00e9ret\u00e9t \u00e9s azok sz\u00e1m\u00e1t, valamint megjelenik a server push, vagyis, hogy a szerverek a legfontosabb elemeket m\u00e1r azel\u0151tt elk\u00fcldik a b\u00f6ng\u00e9sz\u0151nek, hogy az lek\u00e9rn\u00e9 \u0151ket. Ami m\u00e9g fontos, hogy mindehhez titkos\u00edtott, azaz HTTPS kapcsolat sz\u00fcks\u00e9ges a szerver \u00e9s a b\u00f6ng\u00e9sz\u0151 k\u00f6z\u00f6tt.<\/p>\n Az SPDY egy\u00e9bk\u00e9nt nem v\u00e1ltotta le a HTTP-t, ink\u00e1bb egy csatorn\u00e1t jelentett a protokollban \u00e9s megv\u00e1ltoztatta azt a m\u00f3dot, ahogy a lek\u00e9r\u00e9sek \u00e9s a v\u00e1laszok k\u00fcld\u00e9sre ker\u00fclnek. Ehhez t\u00e1mogat\u00e1st ig\u00e9nyelt mind a szerver, mind pedig a b\u00f6ng\u00e9sz\u0151k r\u00e9sz\u00e9r\u0151l. Ez ma m\u00e1r nem gond, a NGINX fel van k\u00e9sz\u00edtve r\u00e1, \u00e9s az Apache eset\u00e9ben is el\u00e9rhet\u0151k a megfelel\u0151 csomagok a Google-t\u0151l, ahogy a b\u00f6ng\u00e9sz\u0151k minden modern verzi\u00f3ja is t\u00e1mogatja. Kiv\u00e9telt a Microsoft Edge jelent, mely az IE 11-t\u0151l elt\u00e9r\u0151en nem t\u00e1mogatja az SPDY-t. T\u00e1mogatja\u00a0viszont\u00a0a HTTP\/2-t, vagyis a HTTP protokoll leg\u00fajabb verzi\u00f3j\u00e1t.<\/p>\n Az SPDY-t\u00e1mogat\u00e1s egy\u00e9bk\u00e9nt a Chrome-b\u00f3l is ki fog ker\u00fclni m\u00e9g az idei \u00e9vben, \u00e9s val\u00f3sz\u00edn\u0171leg a t\u00f6bbi b\u00f6ng\u00e9sz\u0151 is k\u00f6veti ezt a l\u00e9p\u00e9st. Ugyanakkor a HTTP\/2-t m\u00e1r a Firefox, a Chrome \u00e9s az Opera is t\u00e1mogatja, valamint a Safari a 9-es verzi\u00f3t\u00f3l.<\/p>\n Itt az ideje teh\u00e1t, hogy ejts\u00fcnk p\u00e1r sz\u00f3t a HTTP\/2 l\u00e9nyeg\u00e9r\u0151l is. Ez a protokoll-verzi\u00f3 tulajdonk\u00e9ppen azt viszi tov\u00e1bb, amit az SPDY m\u00e1r tudott. Hab\u00e1r enn\u00e9l nem k\u00f6vetelm\u00e9ny a HTTPS kapcsolat megl\u00e9te, a b\u00f6ng\u00e9sz\u0151k csak TLS (HTTPS) eset\u00e9ben t\u00e1mogatj\u00e1k a HTTP\/2-t. Ez pedig azt jelenti, hogy csak akkor kezdhetsz gondolkodni a HTPP\/2-re val\u00f3 v\u00e1lt\u00e1son, ha m\u00e1r HTTPS kapcsolattal el\u00e9rhet\u0151 a weboldalad<\/strong>.<\/p>\n 2015 febru\u00e1rj\u00e1ban v\u00e9gleges\u00edtett\u00e9k a HTTP\/2 szabv\u00e1nyt, \u00edgy egy \u00e9v eltelt\u00e9vel a t\u00e1mogat\u00e1s a legfrissebb verzi\u00f3j\u00fa b\u00f6ng\u00e9sz\u0151kben m\u00e1r adott, ahogy a szerverekn\u00e9l is fokozatosan megt\u00f6rt\u00e9nik a bevezet\u00e9s. A W3Techs 2015 j\u00falius\u00e1ban m\u00e1r k\u00f6z\u00f6lt egy statisztik\u00e1t<\/a> a bevezet\u00e9s gyorsas\u00e1g\u00e1r\u00f3l, akkor az\u00e9rt m\u00e9g j\u00f3csk\u00e1n voltak elmarad\u00e1sok, de az\u00f3ta sok id\u0151 eltelt.<\/p>\n Miut\u00e1n besz\u00e9lt\u00fcnk a szabv\u00e1nyok fejl\u0151d\u00e9s\u00e9r\u0151l, most l\u00e1ssuk, hogy mit is tud a gyakorlatban a HTTP\/2. Onnan induljunk ki, hogy amikor r\u00e1kattintasz egy linkre egy weboldalon, akkor egy k\u00e9r\u00e9st kap a szerver. A szerver erre v\u00e1laszol egy st\u00e1tusz\u00fczenettel \u00e9s az adott oldal f\u00e1jllist\u00e1j\u00e1val. A b\u00f6ng\u00e9sz\u0151 ezut\u00e1n elkezdni lek\u00e9rni a f\u00e1jlokat.<\/p>\n A r\u00e9gi, azaz HTTP1.1-es protokoll eset\u00e9ben ez meglehet\u0151sen lassan zajlott, mivel egyes\u00e9vel mentek \u00e1t a f\u00e1jlok, \u00e9s csak egyetlen vonalat haszn\u00e1lt az \u00e1tvitelre \u00fagy, hogy minden f\u00e1jl eset\u00e9n \u00fajra nyitotta \u00e9s z\u00e1rta azt. A HTTP\/2 ezt a folyamatot felgyors\u00edtja azzal, hogy folyamatosan nyitva tartja a vonalat \u00e9s egyszerre j\u00f3val nagyobb adag \u00e1raml\u00e1s\u00e1t biztos\u00edtja.<\/p>\n A Yoast<\/a> \u00e1ltal felhozott p\u00e9lda vil\u00e1g\u00edtja meg tal\u00e1n a legjobban a m\u0171k\u00f6d\u00e9sbeli k\u00fcl\u00f6nbs\u00e9geket: amikor van egy doboz Leg\u00f3d, akkor \u00fagy \u00e1llsz neki, hogy n\u00e9zed az instrukci\u00f3kat. Ez \u00e1ltal\u00e1ban \u00fagy \u00e9p\u00fcl fel, hogy t\u00e9gl\u00e1r\u00f3l-t\u00e9gl\u00e1ra, egyes\u00e9vel bemutatja, mit hova rakj. Vagyis egy id\u0151ben egyetlen elemmel foglalkozol. Amikor azt elhelyezted, \u00fajra r\u00e1tekintesz a le\u00edr\u00e1sra, \u00e9s megn\u00e9zed, hogy a k\u00f6vetkez\u0151 elemet hova kellene tenned. Ha mondjuk t\u00f6bb ezer elem van a dobozodban, akkor ez a folyamat el\u00e9g sok\u00e1ig fog tartani. A HTTP1.1 valahogy \u00edgy m\u0171k\u00f6dik.<\/p>\n Ezzel szemben a HTTP\/2-n\u00e9l \u00fagy t\u00f6rt\u00e9nne, hogy egy nagyobb r\u00e9sznek tudod lek\u00e9rni az \u00f6ssze\u00e1ll\u00edt\u00e1si \u00fatmutat\u00f3j\u00e1t, \u00e9s an\u00e9lk\u00fcl tudsz instrukci\u00f3kat kapni az \u00fajabb elemek elhelyez\u00e9s\u00e9hez, hogy r\u00e1 kellene n\u00e9zned az \u00fatmutat\u00f3ra. Ha igaz\u00e1n gyors akarsz lenni, akkor ak\u00e1r az \u00f6sszes elemet lek\u00e9rheted egyszerre, \u00e9s egyb\u0151l \u00f6ssze\u00e1ll\u00edthatod a Leg\u00f3dat.<\/p>\n <\/p>\n A l\u00e9nyeg teh\u00e1t az, hogy a HTTP\/2 egyszerre t\u00f6bb dolgot tud kezelni: egy id\u0151ben t\u00f6bb lek\u00e9r\u00e9s t\u00f6rt\u00e9nik egy – az \u00e1tvitel sor\u00e1n – folyamatosan nyitott kapcsolaton. Ez a legfontosabb a gyorsabb m\u0171k\u00f6d\u00e9s szempontj\u00e1b\u00f3l. Ugyanakkor egy m\u00e1sik fontos dolog az \u00fagynevezett szerver push: itt is egy lek\u00e9r\u00e9ssel indul a folyamat, azonban amikor a szerver \u00e9szleli, hogy a HTML-nek tov\u00e1bbi dolgokra van sz\u00fcks\u00e9ge, akkor k\u00e9r\u00e9s n\u00e9lk\u00fcl k\u00fcldi ezeket.<\/p>\n SEO szempontb\u00f3l els\u0151sorban az\u00e9rt j\u00f3 a HTTP\/2, mert a weboldalsebess\u00e9g rangsorol\u00e1si t\u00e9nyez\u0151 m\u00e1r \u00e9vek \u00f3ta<\/a>. A mobil index indul\u00e1s\u00e1val pedig m\u00e9g fontosabb\u00e1 v\u00e1lt. Mik\u00f6zben a weboldalak v\u00e1rhat\u00f3an csak egyre nagyobbak lesznek. A nagy weboldalak pedig sok elemb\u0151l \u00e1llnak: HTML, JavaScript, CSS, k\u00e9pek, stb. Ez pedig csak n\u00f6veli a bet\u00f6lt\u00e9si id\u0151t.<\/p>\n Egy m\u00e1sik fontos dolog a k\u00e9sleltet\u00e9s, els\u0151sorban a mobileszk\u00f6z\u00f6kn\u00e9l. Min\u00e9l nagyobb a k\u00e9sleltet\u00e9s, ann\u00e1l t\u00f6bb id\u0151, hogy egy k\u00e9r\u00e9st megkapjon a szerver, majd erre k\u00fcldj\u00f6n egy v\u00e1laszt. Ez az oka annak, hogy \u00e9rdemes CDN-t haszn\u00e1lni. Ez\u00e1ltal cs\u00f6kkenthet\u0151 az id\u0151 azok sz\u00e1m\u00e1ra, akik egy k\u00f6zeli pontb\u00f3l neteznek.<\/p>\nMi az a HTTP, az SPDY \u00e9s a HTTP\/2?<\/h2>\n
A HTTP\/2-r\u0151l egyszer\u0171bben<\/h2>\n