Αναλυτής κεφαλίδων HTTP — Κεφαλίδες αιτήματος και απάντησης, αποκωδικοποιημένες γραμμή προς γραμμή
Αναλυτής κεφαλίδων HTTP
Επικόλληση ενός πλήρους αιτήματος ή απάντησης HTTP — του μπλοκ που εμφανίζει η έξοδος curl -v ή αυτό που δείχνει ο πίνακας Δικτύου του προγράμματος περιήγησης — και κάθε γραμμή κεφαλίδας αποκωδικοποιείται: το όνομα, η τιμή, μια πρόταση σε απλά ελληνικά για το τι κάνει, και το έγγραφο που την ορίζει. Το Set-Cookie αναλύεται χαρακτηριστικό προς χαρακτηριστικό (Secure, HttpOnly, SameSite, Max-Age, Expires…), οι παράμετροι των Content-Type και Accept αναπτύσσονται, και το μπλοκ ελέγχεται για τα κλασικά δομικά προβλήματα: παρωχημένες διπλωμένες γραμμές, μη επιτρεπτούς χαρακτήρες, διπλές κεφαλίδες και κεφαλίδες που αποστέλλονται προς τη λάθος κατεύθυνση. Όλα εκτελούνται στο πρόγραμμα περιήγησης και τίποτα δεν μεταφορτώνεται.
Είσοδος
Αυτόματα εξετάζει την πρώτη γραμμή: μια γραμμή αιτήματος (GET /path HTTP/1.1) σημαίνει αίτημα, μια γραμμή κατάστασης (HTTP/1.1 200 OK) σημαίνει απάντηση, οτιδήποτε άλλο διαβάζεται ως απλό μπλοκ κεφαλίδων. Οι άλλες επιλογές επιβάλλουν την κατεύθυνση, κάτι που αλλάζει ποιες προειδοποιήσεις ισχύουν.
Αναλυμένη αναφορά
Δεν έχει αναλυθεί τίποτα ακόμη. Επικόλληση ενός μπλοκ αιτήματος ή απάντησης παραπάνω και πάτημα του Ανάλυση κεφαλίδων, ή πάτημα του Δείγμα για ένα παράδειγμα.
Πού βρίσκεται ένα μπλοκ που αξίζει ανάλυση.
Σε τερματικό, η εντολή curl -v https://example.com/ 2>&1 εκτυπώνει το αίτημα και την απάντηση με προθέματα > και < —
αφαιρούνται αυτά και γίνεται επικόλληση. Το curl -sI https://example.com/ δίνει μόνο το μπλοκ κεφαλίδων απάντησης. Στο πρόγραμμα περιήγησης, ανοίγοντας τα εργαλεία προγραμματιστή, την καρτέλα Δίκτυο, και κάνοντας ανανέωση, επιλέγεται το αίτημα του εγγράφου και χρησιμοποιείται το Αντιγραφή → Αντιγραφή κεφαλίδων απάντησης· για την πλευρά του αιτήματος χρησιμοποιείται το Αντιγραφή ως cURL και διαβάζονται οι επιλογές. Ένα απλό μπλοκ γραμμών Όνομα: τιμή χωρίς γραμμή εκκίνησης αναλύεται επίσης — οι έλεγχοι κατεύθυνσης χαλαρώνουν τότε.
Αυτοέλεγχος Επανεκτελεί τον αναλυτή σε σταθερά μπλοκ: ανίχνευση κατεύθυνσης, και τα δύο δείγματα, κάθε κανόνας χαρακτηριστικού Set-Cookie (SameSite=None χωρίς Secure, μη αριθμητικό Max-Age, χαλασμένο Expires, άγνωστο χαρακτηριστικό, cookie χωρίς σύμβολο ίσον), ένωση obs-fold, μη επιτρεπτά ονόματα πεδίων, διπλές κεφαλίδες, ασυμφωνίες κατεύθυνσης και οι αρνητικές περιπτώσεις. Τίποτα δεν αποστέλλεται οπουδήποτε.
Τι είναι μια κεφαλίδα HTTP;
Σε μία πρόταση: ένα μήνυμα HTTP είναι μια γραμμή εκκίνησης, ένα μπλοκ γραμμών της μορφής Όνομα: τιμή που λέγονται κεφαλίδες, μια κενή γραμμή και ένα προαιρετικό σώμα — οι κεφαλίδες μεταφέρουν όλα όσα αφορούν το μήνυμα εκτός από το ίδιο το σώμα: ποιος το έστειλε, τι μπορεί να δεχθεί, πώς αποθηκεύεται στην προσωρινή μνήμη, πώς ταυτοποιείται και τι ζητά ο αποστολέας πίσω.
Οι τέσσερις οικογένειες
Οικογένεια
Ταξιδεύει μέσω
Παραδείγματα
Απαντά στο ερώτημα
Κεφαλίδες αιτήματος
πελάτης → διακομιστής
Host, Accept, Cookie, Referer, Authorization
τι ζητά ο πελάτης και για ποιον υποστηρίζει ότι είναι
σε ποια μορφή είναι το σώμα και ποιο αντίγραφο είναι αυτό
Κεφαλίδες ελέγχου
και τα δύο, για τη σύνδεση
Cache-Control, Connection, Via, Transfer-Encoding
πώς χειρίζονται το μήνυμα και η σύνδεση στη διαδρομή
Ορισμένες κεφαλίδες είναι σταθερά μονοκατευθυντικές: το If-None-Match έχει νόημα μόνο σε αίτημα και το Set-Cookie μόνο σε απάντηση. Η ανάλυση προς τη λάθος κατεύθυνση είναι ένα από τα κλασικά λάθη αποσφαλμάτωσης με αντιγραφή-επικόλληση, γι' αυτό η σελίδα το επισημαίνει.
Η γραμματική μιας γραμμής κεφαλίδας
Το RFC 9110 ορίζει μια γραμμή πεδίου ως field-name ":" OWS field-value OWS — ένα όνομα αποτελούμενο μόνο από χαρακτήρες token (γράμματα, ψηφία και !#$%&'*+-.^_`|~), άνω και κάτω τελεία χωρίς κενό πριν από αυτήν, και τιμή από ορατούς χαρακτήρες, κενά και tab. Τα ονόματα κεφαλίδων δεν διακρίνουν πεζά/κεφαλαία (το content-type ισούται με το Content-Type)· οι τιμές είναι σχεδόν πάντα ευαίσθητες σε πεζά/κεφαλαία. Μια γραμμή που αρχίζει με κενό ή tab συνέχιζε την προηγούμενη κεφαλίδα — obs-fold, παρωχημένη από το 2014: ένας μεσολαβητής που την ξεδιπλώνει μπορεί να αλλάξει το νόημα της κεφαλίδας, γι' αυτό ο αναλυτής εδώ την ενώνει αλλά προειδοποιεί για την ύπαρξή της.
Συνηθισμένα λάθη
Εμπιστοσύνη στο X-Forwarded-For. Το προσθέτει κάθε μεσολαβητής στη διαδρομή, και ένας πελάτης μπορεί να πλαστογραφήσει το πρώτο άλμα. Δηλώνει τι ισχυρίζεται μια αλυσίδα μεσολαβητών, όχι ποιος είναι συνδεδεμένος· αντιμετωπίζεται ως ένδειξη, και προτιμάται μεσολαβητής υπό τον έλεγχο του διαχειριστή που το αντικαθιστά.
Ανάγνωση μόνο των κεφαλίδων απάντησης. Τα μισά από τα ενδιαφέροντα λάθη (μια διπλή Accept, μια ελλείπουσα Host, μια κεφαλίδα εξουσιοδότησης που στοχεύει λάθος διακομιστή) βρίσκονται στο αίτημα, το οποίο το πρόγραμμα περιήγησης κρύβει εξ ορισμού. Με Αντιγραφή ως cURL εμφανίζεται το αίτημα κάθε εφαρμογής.
Συγχώνευση γραμμών Set-Cookie. Οι περισσότερες διπλές κεφαλίδες μπορούν να συνδυαστούν με κόμματα — το Set-Cookie όχι, επειδή το κόμμα εμφανίζεται μέσα στην ίδια την τιμή. Τα προγράμματα περιήγησης αντιμετωπίζουν κάθε γραμμή ως ξεχωριστό cookie.
Η προσδοκία ότι το Content-Length είναι το μέγεθος του σώματος που γράφτηκε. Είναι το μέγεθος μετά την εφαρμογή του Content-Encoding και μόνο όταν το μήνυμα δεν είναι τεμαχισμένο· μια απάντηση Transfer-Encoding: chunked δεν έχει ουσιαστικό μεμονωμένο μήκος.
Κρίση των κεφαλίδων από το πρόθεμα X-. Η σύμβαση καταργήθηκε στο RFC 6648: τα X-Forwarded-For και X-Content-Type-Options είναι μόνιμα de-facto πρότυπα, ενώ πολλές κεφαλίδες χωρίς X είναι πειραματικές. Η κρίση γίνεται από το έγγραφο που τις ορίζει, όχι από το πρόθεμα.
Συχνές ερωτήσεις
Είναι ασφαλές να επικολλώνται εδώ κεφαλίδες; Η ανάλυση γίνεται εξ ολοκλήρου στο πρόγραμμα περιήγησης και τίποτα δεν μεταφορτώνεται. Ωστόσο, ένα αντιγραμμένο μπλοκ κεφαλίδων είναι αποτύπωμα: τα cookies, οι κεφαλίδες εξουσιοδότησης και ο ακριβής User-Agent μαζί μπορούν να ταυτοποιήσουν το άτομο· γι' αυτό αναλύονται μόνο μπλοκ που δεν θα ενοχλούσε η κοινοποίησή τους σε συνάδελφο.
Γιατί το πρόγραμμα περιήγησης εμφανίζει κεφαλίδες όπως :status που η σελίδα αυτή θεωρεί σφάλματα; Πρόκειται για ψευδοκεφαλίδες HTTP/2 και HTTP/3 — τα επίπεδα δυαδικής πλαισίωσης αντικαθιστούν τη γραμμή εκκίνησης και το Host με ψευδοπεδία. Αυτή η σελίδα αναλύει το κλασικό κείμενο HTTP/1.1· οι ψευδοκεφαλίδες είναι οι ίδιες πληροφορίες μετά τη μετάφραση του πρωτοκόλλου.
Τι έγινε με το X-XSS-Protection; Έχει καταργηθεί: ο ελεγκτής που οδηγούσε προκάλεσε δικά του θέματα ασφαλείας και τα προγράμματα περιήγησης τον αφαίρεσαν. Το έργο του ανήκει σε μια Content-Security-Policy — δημιουργία μίας με τη Γεννήτρια CSP και έλεγχος ολόκληρου του συνόλου στον έλεγχο κεφαλίδων ασφαλείας.
Πώς ελέγχεται ένα χαρακτηριστικό Set-Cookie; Με βάση το RFC 6265: τα ονόματα και οι τιμές χωρίζονται στο πρώτο σύμβολο ίσον, τα χαρακτηριστικά μετά το πρώτο ερωτηματικό, το Expires πρέπει να είναι ημερομηνία στη μορφή cookie, το Max-Age ψηφία, το SameSite ένα από Strict/Lax/None — και το None χωρίς Secure απορρίπτεται από τα σύγχρονα προγράμματα περιήγησης, γι' αυτό επισημαίνεται.
Μπορεί να αναλυθεί μόνο μια λίστα γραμμών κεφαλίδων; Ναι — με επιλογή του Μόνο μπλοκ κεφαλίδων και επικόλληση χωρίς γραμμή εκκίνησης. Οι έλεγχοι κατεύθυνσης χαλαρώνουν· όλα τα υπόλοιπα (δομή, Set-Cookie, παράμετροι) εξακολουθούν να εκτελούνται.