HTTP Protocol: Μέθοδοι Αιτημάτων και Κωδικοί Κατάστασης
Το HTTP (Hypertext Transfer Protocol) είναι το πρωτόκολλο εφαρμογών που χρησιμοποιείται για την ανταλλαγή πόρων μεταξύ clients και servers στον Παγκόσμιο Ιστό. Ένας client, όπως browser ή εφαρμογή, στέλνει ένα request και ο server επιστρέφει response με status code, headers και ενδεχομένως body.
Το HTTPS είναι HTTP μέσω κρυπτογραφημένης σύνδεσης TLS. Το HTTP/1.1, το HTTP/2 και το HTTP/3 διαφέρουν στον τρόπο μεταφοράς και διαχείρισης των αιτημάτων, αλλά διατηρούν το βασικό μοντέλο request/response.
HTTP Methods (Μέθοδοι αιτημάτων)
Η HTTP μέθοδος δηλώνει την επιθυμητή ενέργεια πάνω σε έναν πόρο. Οι βασικές μέθοδοι είναι:
| Method | Περιγραφή | Ιδιότητες | Ενδεικτική χρήση |
|---|---|---|---|
| GET | Ανάκτηση αναπαράστασης πόρου. | Safe, Idempotent, Cacheable | Προβολή άρθρου ή λίστας. |
| HEAD | Όπως GET, αλλά χωρίς response body. | Safe, Idempotent, Cacheable | Έλεγχος headers και metadata. |
| POST | Υποβολή δεδομένων για επεξεργασία από τον server. | Όχι κατ’ ανάγκη Idempotent | Υποβολή φόρμας ή δημιουργία πόρου. |
| PUT | Δημιουργία ή πλήρης αντικατάσταση της κατάστασης ενός πόρου. | Idempotent | Αντικατάσταση εγγραφής. |
| PATCH | Μερική τροποποίηση ενός πόρου. | Όχι κατ’ ανάγκη Idempotent | Αλλαγή συγκεκριμένων πεδίων. |
| DELETE | Διαγραφή ενός πόρου. | Idempotent | Διαγραφή εγγραφής. |
| OPTIONS | Πληροφορίες για τις διαθέσιμες επιλογές επικοινωνίας. | Safe, Idempotent | Έλεγχος δυνατοτήτων και CORS preflight. |
| CONNECT | Δημιουργία tunnel προς τον προορισμό μέσω proxy. | Ειδική χρήση | HTTPS tunneling μέσω proxy. |
| TRACE | Επιστρέφει το ληφθέν αίτημα για διαγνωστικούς σκοπούς. | Safe | Διάγνωση διαδρομής αιτήματος· συχνά απενεργοποιείται για λόγους ασφάλειας. |
Safe σημαίνει ότι η μέθοδος δεν ζητά αλλαγή κατάστασης στον server. Idempotent σημαίνει ότι η επανάληψη του ίδιου αιτήματος έχει το ίδιο επιδιωκόμενο αποτέλεσμα με μία εκτέλεση. Για παράδειγμα, ένα DELETE μπορεί να επιστρέψει διαφορετικό status σε επόμενη κλήση, αλλά ο πόρος παραμένει διαγραμμένος.
Δομή HTTP Request και Response
Ένα HTTP request περιλαμβάνει μέθοδο, διαδρομή, έκδοση πρωτοκόλλου, headers και προαιρετικά body. Το response περιλαμβάνει έκδοση πρωτοκόλλου, status code, headers και προαιρετικό body.
GET /articles/ HTTP/1.1
Host: example.com
Accept: text/html
User-Agent: ExampleBrowser/1.0
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: max-age=300
<html>...</html>
HTTP Headers
Τα headers μεταφέρουν metadata για το request ή το response. Συχνά χρησιμοποιούμενα headers είναι:
| Header | Κατεύθυνση | Χρήση |
|---|---|---|
| Host | Request | Ορίζει το hostname του προορισμού σε HTTP/1.1. |
| Accept | Request | Τύποι περιεχομένου που μπορεί να δεχτεί ο client. |
| Content-Type | Request / Response | Τύπος και μορφή του body. |
| Authorization | Request | Credentials ή token αυθεντικοποίησης. |
| Cache-Control | Request / Response | Οδηγίες αποθήκευσης και επαναχρησιμοποίησης cache. |
| Set-Cookie | Response | Αποστολή cookie στον browser. |
| Cookie | Request | Cookies που επιστρέφει ο browser στον server. |
| Location | Response | Προορισμός ανακατεύθυνσης ή δημιουργημένου πόρου. |
| ETag | Response | Validator έκδοσης αναπαράστασης για conditional requests. |
| Access-Control-Allow-Origin | Response | Πολιτική CORS για πρόσβαση από διαφορετικό origin. |
HTTP Status Codes
Ο status code περιγράφει το αποτέλεσμα επεξεργασίας του αιτήματος. Οι κωδικοί χωρίζονται σε πέντε κατηγορίες:
- 1xx – Informational: πληροφοριακή απόκριση.
- 2xx – Successful: το αίτημα ολοκληρώθηκε επιτυχώς.
- 3xx – Redirection: απαιτείται ή υποδεικνύεται ανακατεύθυνση.
- 4xx – Client Error: υπάρχει πρόβλημα στο αίτημα ή στα δικαιώματα του client.
- 5xx – Server Error: ο server απέτυχε να ολοκληρώσει ένα φαινομενικά έγκυρο αίτημα.
Ο πίνακας περιλαμβάνει συχνούς κωδικούς και τη σημασία τους:
| Κωδικός | Περιγραφή |
|---|---|
| 200 | OK (Επιτυχής αίτηση) Το αίτημα HTTP ολοκληρώθηκε με επιτυχία και ο Server επέστρεψε την σωστή απάντηση. . |
| 201 | Created Το αίτημα HTTP ήταν επιτυχής και ένα νέο object δημιουργήθηκε στον Server. |
| 204 | No Content Το αίτημα ολοκληρώθηκε με επιτυχία και η απόκριση δεν περιέχει σώμα. Συχνά χρησιμοποιείται μετά από επιτυχημένη ενημέρωση ή διαγραφή. |
| 300 | Multiple Choices Ο Server έχει πολλαπλές επιλογές για την απόκριση στο αίτημα του Client και παρέχει μια λίστα με επιλογές. Αυτή κατάσταση συνήθως συνοδεύεται από ένα σύνολο links ή έναν πίνακα που περιέχει τις διαθέσιμες εναλλακτικές για τον Client. |
| 301 | Moved Permanently (Μετακίνηση μόνιμη) Το URL που ζητήθηκε έχει μετακινηθεί μόνιμα σε μια νέα τοποθεσία. Ο Client θα πρέπει να επαναδρομολογήσει το αίτημά του στη νέα τοποθεσία. |
| 302 | Found Προσωρινή ανακατεύθυνση σε διαφορετικό URL. Η συμπεριφορά της μεθόδου σε επόμενη αίτηση μπορεί να εξαρτάται από τον client. |
| 303 | See Other Το αίτημα του Client ολοκληρώθηκε με επιτυχία και ότι η απάντηση βρίσκεται σε μια διαφορετική τοποθεσία. |
| 304 | Not Modified Ο πόρος δεν έχει τροποποιηθεί σύμφωνα με τους conditional request validators. Ο client μπορεί να χρησιμοποιήσει την cached έκδοση. |
| 305 | Use Proxy (Deprecated) Ιστορικός κωδικός που έχει καταργηθεί και δεν πρέπει να χρησιμοποιείται σε σύγχρονες εφαρμογές. |
| 307 | Temporary Redirect Το αίτημα του Client πρέπει να ανακατευθυνθεί προσωρινά σε μια διαφορετική τοποθεσία. |
| 308 | Permanent Redirect Το αίτημα του Client πρέπει να ανακατευθυνθεί μόνιμα σε μια διαφορετική τοποθεσία. |
| 400 | Bad Request (Κακή αίτηση) Ο Server δεν μπορεί να επεξεργαστεί το αίτημα του client λόγω Ότι δεν έχει γραφτεί σωστά αιτήματός. |
| 404 | Bad Request Ο server δεν μπορεί ή δεν θέλει να επεξεργαστεί το αίτημα λόγω σφάλματος που θεωρείται πρόβλημα του client, όπως μη έγκυρη σύνταξη ή δεδομένα. |
| 500 | Internal Server Error (Εσωτερικό σφάλμα διακομιστή) Υπήρξε κάποιο πρόβλημα στον Server και δεν μπόρεσε να εξυπηρέτηση το αίτημα του client. |
| 501 | Not Implemented Ο Server δεν υποστηρίζει τη λειτουργία που απαιτείται για να εξυπηρέτηση το αίτημα του client. |
| 502 | Bad Gateway Ένας server που λειτουργεί ως gateway ή proxy έλαβε μη έγκυρη απόκριση από upstream server. |
| 503 | Service Unavailable Ο Server δεν είναι προσωρινά διαθέσιμος. |
| 504 | Gateway Timeout Ο Server λειτουργεί ως gateway ή proxy και δεν λαμβάνει μια έγκυρη απάντηση εγκαίρως από έναν άλλον Server (Upstream server) που Χρειάζεται ώστε να ολοκληρώσει την απάντηση του αιτήματος του client. |
| 505 | HTTP Version Not Supported Ο server δεν υποστηρίζει την έκδοση HTTP που χρησιμοποιείται στο αίτημα. |
| 401 | Unauthorized Απαιτείται έγκυρη αυθεντικοποίηση. Συχνά συνοδεύεται από WWW-Authenticate. |
| 403 | Forbidden Ο server κατάλαβε το αίτημα, αλλά αρνείται να το εξυπηρετήσει λόγω δικαιωμάτων ή πολιτικής πρόσβασης. |
| 405 | Method Not Allowed Η HTTP μέθοδος δεν επιτρέπεται για τον συγκεκριμένο πόρο. Η απόκριση πρέπει να περιλαμβάνει Allow. |
| 408 | Request Timeout Ο server δεν έλαβε εγκαίρως το πλήρες αίτημα από τον client. |
| 409 | Conflict Το αίτημα συγκρούεται με την τρέχουσα κατάσταση του πόρου. |
| 410 | Gone Ο πόρος δεν είναι πλέον διαθέσιμος και η κατάσταση θεωρείται πιθανότατα μόνιμη. |
| 413 | Content Too Large Το περιεχόμενο του αιτήματος είναι μεγαλύτερο από αυτό που δέχεται ο server. |
| 415 | Unsupported Media Type Ο server δεν υποστηρίζει τη μορφή του περιεχομένου που υποβλήθηκε. |
| 422 | Unprocessable Content Το περιεχόμενο έχει σωστή σύνταξη, αλλά δεν μπορεί να επεξεργαστεί λόγω σημασιολογικού σφάλματος. |
| 429 | Too Many Requests Ο client έχει στείλει πάρα πολλά αιτήματα σε συγκεκριμένο χρονικό διάστημα. Μπορεί να συνοδεύεται από Retry-After. |
HTTP/1.1, HTTP/2 και HTTP/3
| Έκδοση | Μεταφορά | Βασικά χαρακτηριστικά |
|---|---|---|
| HTTP/1.1 | Συνήθως TCP | Text-based μηνύματα, persistent connections και δυνατότητα pipelining που χρησιμοποιείται περιορισμένα. |
| HTTP/2 | TCP | Binary framing, multiplexing πολλών streams σε μία σύνδεση και συμπίεση headers με HPACK. |
| HTTP/3 | QUIC πάνω από UDP | Multiplexing streams με αποφυγή TCP-level head-of-line blocking και TLS 1.3 ενσωματωμένο στο QUIC. |
HTTPS και TLS
Το HTTPS προστατεύει την επικοινωνία HTTP με TLS. Παρέχει κρυπτογράφηση, ακεραιότητα δεδομένων και επαλήθευση της ταυτότητας του server μέσω πιστοποιητικού. Η συνήθης θύρα HTTPS είναι η TCP 443 για HTTP/1.1 και HTTP/2, ενώ το HTTP/3 χρησιμοποιεί QUIC μέσω UDP 443.
Cookies, Sessions και Caching
- Cookies: μικρές τιμές που αποθηκεύει ο browser και επιστρέφει σε επόμενα αιτήματα σύμφωνα με τα attributes τους. Για ευαίσθητα cookies χρησιμοποίησε
Secure,HttpOnlyκαι κατάλληλοSameSite. - Sessions: ο server διατηρεί κατάσταση χρήστη και συνήθως συνδέει τη συνεδρία με ένα session cookie.
- Caching: οι headers
Cache-Control,ETagκαιLast-Modifiedβοηθούν στον έλεγχο αποθήκευσης και επαναχρησιμοποίησης αποκρίσεων.
CORS (Cross-Origin Resource Sharing)
Το CORS είναι μηχανισμός του browser που ελέγχει αν μια web εφαρμογή μπορεί να διαβάσει πόρους από διαφορετικό origin. Ο server δηλώνει επιτρεπόμενα origins και μεθόδους μέσω response headers. Για ορισμένα αιτήματα ο browser στέλνει πρώτα preflight request με τη μέθοδο OPTIONS.
Το CORS δεν αντικαθιστά την αυθεντικοποίηση ή την εξουσιοδότηση στον server. Ένας server πρέπει να ελέγχει ανεξάρτητα αν ο χρήστης δικαιούται να εκτελέσει κάθε ενέργεια.
Πρακτικός έλεγχος με curl
# Εμφάνιση headers απόκρισης
curl -I https://example.com
# Αναλυτική επικοινωνία request/response
curl -v https://example.com
# Αποστολή JSON με POST
curl -X POST https://api.example.com/items \
-H "Content-Type: application/json" \
-d '{"name":"demo"}'
# Αποστολή HEAD request
curl -I https://example.com