ταν στέλνετε ένα αίτημα HTTP POST από το πρόγραμμα περιήγησης (browser), στέλνετε ένα δομημένο μήνυμα στον διακομιστή ιστού (web server). Αυτό το μήνυμα αποτελείται από τέσσερα κύρια μέρη: τη Γραμμή Αιτήματος, τις Κεφαλίδες HTTP, μια κενή γραμμή και το Σώμα του Αιτήματος.
Επιπλέον, υπάρχουν δεδομένα επιπέδου δικτύου και περιβάλλοντος που μεταδίδονται μαζί με το αίτημα HTTP. Ακολουθεί μια λεπτομερής ανάλυση του τι ακριβώς στέλνεται:
1. Η Γραμμή Αιτήματος (Request Line)
Αυτή είναι η πρώτη γραμμή του αιτήματος HTTP. Ενημερώνει τον διακομιστή για την ενέργεια που πρέπει να εκτελέσει, πού να την εκτελέσει και ποια έκδοση πρωτοκόλλου χρησιμοποιείται.
- Μέθοδος (Method): POST
- Προορισμός Αιτήματος (Request Target / URI / Διαδρομή): Το συγκεκριμένο endpoint ή ресурс που ζητείται (π.χ. /api/login ή /submit-form).
- Έκδοση HTTP: Συνήθως HTTP/1.1, HTTP/2 ή HTTP/3 (για QUIC).
Παράδειγμα: POST /api/login HTTP/1.1
2. Κεφαλίδες HTTP (HTTP Headers)
Οι κεφαλίδες είναι ζεύγη κλειδιού-τιμής (key-value pairs) που παρέχουν μεταδεδομένα σχετικά με το αίτημα, τον πελάτη (client) και τα δεδομένα που στέλνονται. Συχνές κεφαλίδες σε ένα αίτημα POST περιλαμβάνουν:
- Host: Το όνομα τομέα (domain) του διακομιστή (απαραίτητο στο HTTP/1.1). Παράδειγμα: Host: example.com
- Content-Type: Ενημερώνει τον διακομιστή για τη μορφή των δεδομένων στο σώμα του αιτήματος. Παραδείγματα:
- application/json (για δεδομένα JSON)
- application/x-www-form-urlencoded (για τυπικές υποβολές φορμών HTML)
- multipart/form-data (για μεταφόρτωση αρχείων / file uploads)
- Content-Length: Το μέγεθος του σώματος του αιτήματος σε bytes. Ο διακομιστής το χρησιμοποιεί για να γνωρίζει πότε έχει λάβει ολόκληρο το σώμα.
- User-Agent: Πληροφορίες το πρόγραμμα περιήγησης, το λειτουργικό σύστημα και τη συσκευή που κάνει το αίτημα. Παράδειγμα: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
- Accept: Οι τύποι μέσων (media types) που το πρόγραμμα περιήγησης μπορεί να κατανοήσει στην απάντηση (π.χ. application/json, text/plain, */*).
- Cookie: Τυχόν cookies που έχουν οριστεί προηγουμένως από τον διακομιστή για αυτόν τον τομέα επισυνάπτονται αυτόματα εδώ (π.χ. αναγνωριστικά συνεδρίας / session IDs, tokens παρακολούθησης).
- Origin: Το σχήμα, ο κεντρικός υπολογιστής (host) και η θύρα (port) της σελίδας πουτο αίτημα (κρίσιμο για την ασφάλεια CORS). Παράδειγμα: Origin: https://example.com
- Referer: Περιέχει την ακριβή διεύθυνση (URL) της ιστοσελίδας από την οποία ο χρήστης έκανε κλικ σε έναν σύνδεσμο για να φτάσει στην τρέχουσα σελίδα.
- Authorization: Εάν χρησιμοποιείτε έλεγχο ταυτότητας βάσει token (όπως Bearer tokens ή Basic Auth), τα διαπιστευτήρια στέλνονται εδώ.
- Προσαρμοσμένες Κεφαλίδες (Custom Headers): Οποιεσδήποτε επιπλέον κεφαλίδες προστέθηκαν από τον κώδικα του frontend (π.χ. X-Requested-With: XMLHttpRequest).
3. Η Κενή Γραμμή
Μια απλή κενή γραμμή (συγκεκριμένα, ένα Carriage Return + Line Feed, ή \r\n) διαχωρίζει τις κεφαλίδες από το σώμα του αιτήματος. Αυτό λέει στον διακομιστή: «Οι κεφαλίδες τελείωσαν, τα δεδομένα του σώματος ξεκινούν τώρα».
4. Το Σώμα του Αιτήματος (Request Body / Payload)
Αυτά είναι τα πραγματικά δεδομένα που στέλνετε στον διακομιστή. Η μορφή τους καθορίζεται αυστηρά από την κεφαλίδα Content-Type. Παραδείγματα:
- JSON: {"username":"john_doe","password":"secret123"}
- Δεδομένα Φόρμας (Form Data): username=john_doe&password=secret123
- Multipart: Μια πολύπλοκη μορφή διαχωρισμένη με boundaries, που χρησιμοποιείται όταν μεταφορτώνετε αρχεία μαζί με πεδία κειμένου.
🔍 Παράδειγμα Ακατέργαστου (Raw) Αιτήματος HTTP POST
Αν υποβάλετε μια φόρμα σύνδεσης, το ακατέργαστο κείμενο που στέλνεται μέσω του δικτύου μοιάζει με αυτό:
POST /api/login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: application/json, text/plain, */*
Content-Type: application/json
Content-Length: 52
Origin: https://www.example.com
Referer: https://www.example.com/login
Cookie: session_id=abc123xyz; theme=dark{"username":"john_doe","password":"secret123"}
5. Έμμεσα Δεδομένα / Δεδομένα σε Επίπεδο Δικτύου
Πέρα από το ίδιο το πρωτόκολλο HTTP, οι παρακάτω πληροφορίες μεταδίδονται επίσης στον διακομιστή (ή σε ενδιάμεσους διακομιστές μεσολάβησης / proxies) ως μέρος της υποκείμενης δικτυακής σύνδεσης:
- Διεύθυνση IP (IP Address): Η δημόσια διεύθυνση IP σας είναι ορατή στον διακομιστή (και σε οποιονδήποτε load balancer ή CDN βρίσκεται ενδιάμεσα) μέσω των κεφαλίδων των πακέτων TCP/IP.
- Δεδομένα Χειραψίας TLS/SSL (TLS/SSL Handshake Data): Εάν το αίτημα είναι https://, η αρχική χειραψία στέλνει το Server Name Indication (SNI, δηλαδή το όνομα τομέα στον οποίο συνδέεστε) και διαπραγματεύεται τα κλειδιά κρυπτογράφησης. Σημείωση: Το πραγματικό αίτημα HTTP (κεφαλίδες και σώμα) είναι κρυπτογραφημένο και κρυφό από αδιάκριτα μάτια, αλλά η διεύθυνση IP προορισμού και το SNI είναι ορατά.
- Μεταδεδομένα TCP/IP: Αριθμοί θυρών (port numbers), αλληλουχία πακέτων και πληροφορίες χρονισμού.
💡 Συμβουλές Ασφαλείας και Απορρήτου για Προγραμματιστές
- Μην στέλνετε ποτέ ευαίσθητα δεδομένα (όπως κωδικούς πρόσβασης ή αριθμούς πιστωτικών καρτών) στο URL (π.χ. ως παραμέτρους query σε ένα αίτημα POST). Αν και το σώμα του αιτήματος προτιμάται, χρησιμοποιείτε πάντα HTTPS ώστε ολόκληρο το αίτημα (συμπεριλαμβανομένων κεφαλίδων όπως Authorization και Cookie) να είναι κρυπτογραφημένο.
- Προσέξτε το Content-Length: Εάν μεταφορτώνετε μεγάλα αρχεία, βεβαιωθείτε ότι ο διακομιστής σας είναι ρυθμισμένος να χειρίζεται το αναμενόμενο μέγεθος φορτίου, για να αποφύγετε σφάλματα 413 Payload Too Large.
- CORS: Εάν το frontend σας φιλοξενείται σε διαφορετικό τομέα από το API, το πρόγραμμα περιήγησης θα στείλει πρώτα ένα αίτημα προ-ελέγχου (preflight request) OPTIONS για να ελέγξει εάν ο διακομιστής επιτρέπει τη μέθοδο POST και τον συγκεκριμένο Content-Type που χρησιμοποιείτε.
Τελευταία ενημέρωση:
