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
// ...παραδίδονται παράλληλα σε μια σύνδεση