Web Development
Τι είναι το HTTP/2;

Το HTTP/2 είναι η τελευταία έκδοση του Hypertext Transfer Protocol, δηλαδή του πρωτοκόλλου μεταφοράς πληροφοριών στο διαδίκτυο, και αποτελεί την επόμενη έκδοση του πρωτοκόλλου HTTP/1.1. Σαν πρωτόκολλο δεν αλλάζει τις εντολές ή τις μεθόδους του αρχικού HTTP πρωτοκόλλου αλλά ορίζει νέες διαδικασίες για να μπορέσει να γίνει η επικοινωνία, η σύνδεση και η μεταφορά πληροφοριών μεταξύ του client και του server (πελάτη – διακομιστή), αλλά και πως αυτά τα δεδομένα θα μορφοποιηθούν για την μεταφορά τους.
Ξεκίνησε σαν πειραματική ιδέα με την ονομασία SPDY από την Google και έπειτα το 2015 οριστικοποιήθηκε από την Hypertext Transfer Protocol Working Group. Το HTTP/2 είναι συμβατό με το HTTP/1.1 σε περίπτωση που κάποιος client ή server δεν το υποστηρίζει κατάλληλα.
Η ενημερωμένη έκδοση του HTTP πρωτοκόλλου, το HTTP/2, αποτελεί το παρόν και το μέλλον των γρήγορων συνδέσεων του διαδικτύου, προσφέροντας πολλές βελτιώσεις στην ταχύτητα σύνδεσης σε μια ιστοσελίδα.
Πλεονεκτήματα του HTTP/2
-
Η ταχύτητα της σύνδεσης
Το βασικότερο θα λέγαμε πλεονέκτημα του HTTP/2 είναι η ταχύτητα του στην επίτευξη της σύνδεσης και μεταφοράς δεδομένων. Αντί για πολλές συνδέσεις προς τον server, δημιουργείται μόνο μία TCP σύνδεση η οποία παραμένει ανοιχτή για όλο το χρονικό διάστημα που παραμένει ανοιχτή η εφαρμογή/ιστοσελίδα. Μέσω αυτής της μίας σύνδεσης γίνεται η μεταφορά όλων των πληροφοριών που θα χρειαστούν, χρησιμοποιώντας πολυπλεξία για την μεταφορά τους. Έτσι η φόρτωση των ιστοσελίδων που το υποστηρίζουν γίνεται πολύ γρηγορότερη.
Η τεχνική της πολυπλεξίας είναι γνωστή από παλιά στον χώρο των δικτύων, λόγω όμως της φύσης του HTTP 1.x πρωτοκόλλου (textual protocol) δεν ήταν εφικτό να εφαρμοστεί σε HTTP συνδέσεις. Το πρωτόκολλο HTTP/2, είναι ένα binary πρωτόκολλο και επιτρέπει την εγγυημένη διαμοίραση της πληροφορίας με πολυπλεξία. Σε πρακτικό επίπεδο η έννοια της πολυπλεξίας αναφέρεται στη δυνατότητα διαμοίρασης ενός φυσικού καναλιού (ενός TCP connection στην περίπτωσή μας), σε πολλαπλά λογικά κανάλια (multiplexing channels).
Ο client πλέον ανταλλάσει πληροφορίες με τον server μέσα από πολλά (λογικά) κανάλια, παράλληλα, κάτι που μειώνει σημαντικά τους χρόνους απόκρισης, καθότι αποφεύγεται σε μεγάλο βαθμό η χρονική διαδοχή των ερωτημάτων που οδηγεί στο λεγόμενο HTTP pipelining (HTTP 1.1 – πολλαπλά requests ανά TCP connection), στο στοίβασμα δηλαδή ερωτημάτων μέσα σε ένα TCP connection ή ακόμη χειρότερα μεταξύ διαφόρων TCP connections, που αναμένουν την χρονική τους εξυπηρέτηση.
- HTTP/2 Server Push και Flow Control
Η υποστήριξη Server Push σημαίνει πως ο server θα στείλει πίσω στον client όλα τα απαραίτητα δεδομένα που εκείνος θα χρειαστεί για την εμφάνιση μιας ιστοσελίδας χωρίς να περιμένει πρώτα να του ζητηθούν, όπως για παράδειγμα τα αρχεία Javascript, CSS ή/και εικόνων.
Στις HTTP/2 συνδέσεις, ο server έχει τη δυνατότητα να κάνει PUSH τα resources μιας ιστοσελίδας στον client, χωρίς να περιμένει τον client να τα ζητήσει. Με το HTTP 1.x, ο browser αρχικά κατεβάζει το DOM της ιστοσελίδας, όπου περιλαμβάνονται όλες οι παραπομπές για τα αντικείμενα που απαρτίζουν την ιστοσελίδα. Μόλις κατέβει το DOM, αναλύεται από τον browser και αρχίζει η καταφόρτωση των αντικειμένων με αιτήματα που αποστέλλονται στον server.
Με το HTTP/2, ο server αρχίζει να στέλνει μόνος του τα resources που αναφέρονται στο DOM, χωρίς να περιμένει από τον browser την ανάλυση του dom και την αποστολή αιτήματος για καθένα από τα resources. Με αυτόν τον τρόπο όταν ο browser καταφέρει να αναλύσει το DOM κάποια από τα resources του site πιθανόν να έχουν ήδη καταφορτωθεί και η αναμονή γίνεται όλο και πιο μικρή.
Από την πλευρά του ο client έχει την δυνατότητα να ενημερώνει τον server για το πόσα δεδομένα χρειάζεται και μπορεί να διαχειριστεί για μια εργασία με την χρήση του Flow Control, όπως για παράδειγμα κατά το streaming ενός video. O client μπορεί ανά πάσα στιγμή να μεγαλώσει ή να μικρύνει αυτό το όριο ενημερώνοντας τον server ανάλογα.
- Περισσότερη ασφάλεια των συνδέσεων
Αν και η κρυπτογράφηση των συνδέσεων HTTP/2 δεν είναι απαραίτητη, οι browsers που το υποστηρίζουν έχουν ορίσει σαν προϋπόθεση πως για να γίνει μια τέτοια σύνδεση θα πρέπει η ιστοσελίδα να έχει εγκατεστημένο και ενεργοποιημένο ένα πιστοποιητικό ασφαλείας για την κρυπτογράφηση των δεδομένων της. Έτσι σαν "έμμεσο" αποτέλεσμα όλες οι συνδέσεις HTTP/2 είναι κρυπτογραφημένες (over TLS) προσφέροντας περισσότερη ασφάλεια στους χρήστες.
- Φιλικότερο για κινητές συσκευές
Όπως είπαμε το πρωτόκολλο HTTP/2 υποστηρίζει μία σύνδεση TCP ανά πελάτη, έτσι οι κινητές συσκευές με μικρή επεξεργαστική ισχύ, επωφελούνται από αυτό καθώς δεν χρειάζεται να κρατούν και να διαχειρίζονται δεδομένα από πολλές συνδέσεις. Επίσης μειώνοντας το μέγεθος των πακέτων που μεταφέρονται μέσω του HTTP/2 οι ιστοσελίδες φορτώνουν γρηγορότερα σε αργές συνδέσεις όπως το 3G.
- Καλύτερη απόδοση SEO
Μια ιστοσελίδα που υποστηρίζει HTTP/2 δεν θα εμφανιστεί άμεσα υψηλότερα στα αποτελέσματα αναζήτησης αλλά έμμεσα θα κερδίσει “πόντους” από τις μηχανές αναζήτησης για την ταχύτητα φόρτωσης της. Η Google έχει προσθέσει υποστήριξη HTTP/2 στον crawler της μηχανής αναζήτησης από τις πρώτες κιόλας μέρες ζωής του νέου πρωτοκόλλου.
- Συμπίεση των HTTP headers
Κάθε μεταφορά HTTP μεταφέρει ένα σύνολο headers που περιγράφουν τα μεταφερόμενα δεδομένα και τις ιδιότητές τους. Στο HTTP/1.1, αυτές οι πληροφορίες των headers αποστέλλονται πάντα ως απλό κείμενο και προσθέτουν κάποια bytes και μερικές φορές kilobytes (αν χρησιμοποιηθούν cookies) ανά μεταφορά.
Για να μειώσει αυτά τα δεδομένα και να βελτιώσει την απόδοση, το HTTP/2 μειώνει το μέγεθος των πακέτων που διακινούνται συμπιέζοντας τα headers τους. Αυτό το χαρακτηριστικό είναι ιδιαίτερα σημαντικό για τις TCP συνδέσεις καθότι όταν το TCP πρωτόκολλο προσπαθεί να αποκαταστήσει μία νέα σύνδεση επιτρέπει πολύ μικρά μεγέθη πακέτων, για να είναι γρήγορη η αποκατάσταση τη επικοινωνίας. Η συμπίεση γίνεται με δύο απλές τεχνικές:
Κωδικοποιεί τα πεδία των headers μέσω ενός στατικού κώδικα Huffman, ο οποίος μειώνει το μέγεθος μεταφοράς τους.
Απαιτεί ότι ο client και ο server θα διατηρούν και θα ενημερώνουν μια λίστα των πεδίων headers που έχουν λάβει προηγουμένως. Έτσι το πρωτόκολλο HTTP/2 στέλνει μόνο τις πληροφορίες των headers οι οποίες έχουν αλλαχθεί, χωρίς να επαναλαμβάνει τα δεδομένα που ήδη έχει γνωστοποιήσει στην άλλη πλευρά.
Μοιραία ένα HTTP header που κατά μέσο όρο είναι 1KB βαρύ, μπορεί να σπάει σε πολλά μικρότερα πακέτα δεδομένων, καθότι το TCP στην φάση αποκατάστασης της σύνδεσης δεν επιτρέπει τόσο μεγάλα πακέτα. Με τη συμπίεση λοιπόν των headers, το πλήθος των πακέτων που διασπείρονται στο δίκτυο είναι σε πολλαπλάσιο βαθμό λιγότερα και συνεπώς η αποκατάσταση των συνδέσεων ταχύτερη.
- Ιεράρχηση των δεδομένων προς λήψη
Τα αιτήματα μεταφοράς δεδομένων λαμβάνουν επίπεδα σημαντικότητας, για να γνωρίζει ο server ποια πακέτα είναι περισσότερο απαραίτητα στον client, έτσι ώστε να τα στείλει νωρίτερα από άλλα πακέτα πληροφορίας.
Μειονεκτήματα του HTTP/2
- Η συμβατότητα του με το HTTP/1.1
Καθώς έπρεπε να κρατηθεί η συμβατότητα του HTTP/2 με τον προκάτοχο του, δεν μπόρεσαν να υλοποιηθούν αρκετές βελτιώσεις που περίμεναν πολλοί ιδικοί του τομέα της πληροφορικής.
- Όχι απαραίτητη η κρυπτογράφηση των δεδομένων
Το πρωτόκολλο HTTP/2 δεν ορίζει την κρυπτογράφηση των δεδομένων ως ενσωματωμένη λειτουργικότητα, και το αφήνει στην επιλογή της εφαρμογής. Μπορεί οι browsers να θεωρούν απαραίτητη την κρυπτογράφηση των δεδομένων για την επίτευξη μιας σύνδεσης HTTP/2 αλλά στην πραγματικότητα αυτή είναι προαιρετική.
- Η ασφάλεια των cookies
Ένα από από τα μεγαλύτερα μειονεκτήματα ασφαλείας του HTTP/1.1 είναι τα αρχεία cookies που περιέχουν δεδομένα του χρήστη. Χρησιμοποιώντας αυτά τα δεδομένα, ο server μπορεί να αναγνωρίσει τον χρήστη και να διατηρήσει την περίοδο σύνδεσης ανοικτή. Τα cookies μπορεί να κλαπούν ή να αλλοιωθούν από τους χάκερς ώστε να αποκτήσουν πρόσβαση σε ιστότοπους που περιέχουν τα προσωπικά δεδομένα του χρήστη, ακόμη και χωρίς κωδικούς πρόσβασης. Στο πρωτόκολλο HTTP/2 δεν έχει γίνει κάποια προσπάθεια βελτίωσης αυτού του μηχανισμού.
Υποστήριξη από τους Browsers
Πλέον όλοι οι γνωστοί και διαδεδομένοι browsers, όπως ο Chrome 41+, o Firefox 36+, ο Safari 11+ και ο Edge 12+, υποστηρίζουν το νέο πρωτόκολλο HTTP/2. Όπως αναφέραμε όμως παραπάνω μόνο για συνδέσεις που υλοποιούν κρυπτογράφηση (over TLS) με την χρήση πιστοποιητικού ασφαλείας.
Υποστήριξη από τους Web Servers
Οι δύο γνωστότεροι web servers, o Apache 2.4+ και ο Nginx 1.9.5+, υποστηρίζουν το νέο πρωτόκολλο HTTP/2 με μόνη προϋπόθεση την ενεργοποίση της λειτουργίας από τον διαχειριστή του συστήματος.
Η IP.GR παρέχει δωρεάν πιστοποιητικό ασφαλείας SSL σε όλα τα πακέτα φιλοξενίας της, καθώς επίσης και δωρεάν HTTP/2 συνδέσεις (με τη χρήση https). Παρέχονται συνεπώς όλα τα εργαλεία για να μπορεί η κάθε σελίδα να διακινεί με ασφάλεια τα δεδομένα της στο διαδίκτυο και εκμεταλλευόμενη στο έπακρο τις ανωτέρω τεχνολογίες, να βελτιώσει την απόδοσή της αισθητά σε σχέση με άλλες παλαιότερου τύπου υποδομές και τεχνολογίες.