Sobes.tech
Junior

Μιλήστε για τις εκδόσεις του HTTP και τις διαφορές τους.

sobes.tech AI

Απάντηση από AI

Βασικές εκδόσεις HTTP:

  • HTTP/0.9: Βασική έκδοση για τη μετάδοση απλών HTML εγγράφων. Υποστήριζε μόνο τη μέθοδο GET, δεν υπήρχαν κεφαλίδες ή καταστάσεις απαντήσεων.
  • HTTP/1.0: Εισήγαγε την υποστήριξη κεφαλίδων (Content-Type, User-Agent), μεθόδων POST και HEAD, και καταστάσεων απαντήσεων. Η σύνδεση έκλεινε μετά από κάθε αίτημα/απάντηση.
  • HTTP/1.1: Σημαντικές βελτιώσεις:
    • Διαρκείς συνδέσεις (Persistent Connections) - επαναχρησιμοποίηση TCP σύνδεσης για πολλά αιτήματα.
    • Piplining - αποστολή πολλών αιτημάτων χωρίς να περιμένει η απάντηση (αν και υλοποιείται κακώς και σπάνια χρησιμοποιείται).
    • Εικονικοί διακομιστές (Host header).
    • Μερικά GET αιτήματα (Range header).
    • Cache control (Cache-Control, ETag, Last-Modified).
    • Μέθοδοι PUT και DELETE.
  • HTTP/2: Βασίζεται στο SPDY της Google. Βασικές διαφορές:
    • Διπλό πρωτόκολλο - πιο αποδοτική ανάλυση.
    • Multiplexing - παράλληλη μετάδοση πολλών αιτημάτων/απαντήσεων σε μια σύνδεση TCP. Απομακρύνει το πρόβλημα "head-of-line blocking" του HTTP/1.1 pipelining.
    • Συμπίεση κεφαλίδων (HPACK) - μείωση του μεγέθους των μεταδιδόμενων δεδομένων.
    • Prioritization (Server Push) - ο διακομιστής μπορεί να στείλει πόρους που πιθανώς θα χρειαστεί ο πελάτης, πριν τον ζητήσει.
  • HTTP/3: Βασίζεται στο πρωτόκολλο UDP (με χρήση QUIC - Quick UDP Internet Connections) αντί TCP. Στοχεύει στη βελτίωση της απόδοσης, ειδικά σε ασταθή δίκτυα:
    • Απομάκρυνση του "head-of-line blocking" σε επίπεδο σύνδεσης TCP. Αν χαθεί ένα πακέτο TCP, όλα τα επόμενα μπλοκάρουν μέχρι να αποσταλεί ξανά. Στο QUIC (και HTTP/3) μπλοκάρεται μόνο το ρεύμα που ανήκει στο χαμένο πακέτο.
    • Ταχύτερη εγκαθίδρυση σύνδεσης (0-RTT ή 1-RTT).
    • Το QUIC περιλαμβάνει μηχανισμούς ελέγχου ροής και αξιοπιστίας.

Οι βασικές διαφορές στον πίνακα:

Χαρακτηριστικό HTTP/1.0 HTTP/1.1 HTTP/2 HTTP/3
Πρωτόκολλο TCP TCP TCP UDP (QUIC)
Μορφή Κειμενική Κειμενική Δυαδική Δυαδική
Βασική σύνδεση Βραχύβια Διαρκής Διαρκής (multiplexing) Διαρκής (QUIC streams)
Multiplexing Όχι Περιγραφή (Pipelining) Ναι Ναι
Συμπίεση κεφαλίδων Όχι Όχι HPACK QPACK (στο QUIC)
Server Push Όχι Όχι Ναι Ναι
HOL Blocking (TCP) Ναι (σε επίπεδο αίτησης) Ναι (σε επίπεδο αίτησης) Ναι (σε επίπεδο σύνδεσης) Όχι (σε επίπεδο ρεύματος)

Παράδειγμα αίτησης σε HTTP/1.1:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/7.64.1
Accept: */*

Παράδειγμα αίτησης σε HTTP/2 (θεωρητικά, σε δυαδική μορφή):

// Αίτηση 1: Λήψη /index.html
// :method = GET
// :path = /index.html
// :authority = www.example.com

// Αίτηση 2: Λήψη /style.css
// :method = GET
// : :path = /style.css
// :authority = www.example.com
// ...παραδίδονται παράλληλα σε μια σύνδεση