Κατανόηση των κεφαλίδων HTTP και των πεδίων κεφαλίδων HTTP

Κεφαλίδες HTTPπαρέχει ζωτικής σημασίας πληροφορίες που απαιτούνται για μια συναλλαγή HTTP αποστολή μέσω πρωτόκολλο http.

Η γενική μορφή κεφαλίδας HTTP περιέχει ζεύγη ονόματος - τιμής διαχωρισμένα με άνω και κάτω τελεία στο πεδίο κεφαλίδας. Κάθε ένα από το ζεύγος ονόματος-τιμής τελειώνει με μια ακολουθία χαρακτήρων επιστροφής μεταφοράς (CR) και τροφοδοσίας γραμμής (LF). Τα άδεια πεδία στο τέλος κάθε κεφαλίδας υποδεικνύουν το τέλος της κεφαλίδας.

Η κοινή μορφή κεφαλίδας που ακολουθείται από τις εφαρμογές μοιάζει με:

Τύποι κεφαλίδων HTTP

Υπάρχουν τέσσερις τύποι κεφαλίδων μηνυμάτων HTTP. Αυτοί είναι:

  • Γενική Επικεφαλίδα
  • Κεφαλίδα αιτήματος
  • κεφαλίδα απάντησης
  • Κεφαλίδα οντότητας

Γενική Επικεφαλίδα

Τα πεδία General Header έχουν κοινή δυνατότητα εφαρμογής σε μηνύματα αιτήματος και απάντησης. Τα πεδία κεφαλίδας ισχύουν μόνο για το μεταδιδόμενο μήνυμα και δεν ισχύουν για τη μεταφερόμενη οντότητα.

Η δομή μιας γενικής κεφαλίδας μοιάζει με:

Έλεγχος κρυφής μνήμηςΤο πεδίο καθορίζει οδηγίες που πρέπει να ακολουθούνται από κάθε μηχανισμό προσωρινής αποθήκευσης σε ένα σύστημα αιτήματος και απόκρισης.

σύνδεσηΤο πεδίο επιτρέπει στον αποστολέα να καθορίσει τις επιλογές που απαιτούνται για μια σύνδεση. Η κεφαλίδα σύνδεσης έχει τοπαρακάτω μορφή:

ΗμερομηνίαΤο πεδίο αντιπροσωπεύει την ημερομηνία και την ώρα κατά την έναρξη του μηνύματος. Η μορφή ημερομηνίας που καθορίζεται στο HTTP μοιάζει με:

πραγματισμόςΤο πεδίο συμβάλλει στη συμπερίληψη ειδικής οδηγίας εφαρμογής που ισχύει για οποιονδήποτε παραλήπτη σε σύστημα αιτήματος και απάντησης.

ΤροχόσπιτοΗ τιμή πεδίου καθορίζει εάν ένα σύνολο πεδίων κεφαλίδας στο τρέιλερ μηνυμάτων κωδικοποιείται με κωδικοποίηση μεταφοράς τμημάτων.

Κωδικοποίηση μεταφοράςΤο πεδίο δείχνει εάν εφαρμόζεται οποιοσδήποτε τύπος μετασχηματισμού στο σώμα του μηνύματος.

ΑναβαθμίζωΤο πεδίο επιτρέπει στους πελάτες να καθορίσουν πρόσθετα υποστηριζόμενα πρωτόκολλα επικοινωνίας. Επιτρέπει επίσης στον διακομιστή να αλλάζει πρωτόκολλα με τα πρόσθετα πρωτόκολλα.

ΜέσωΤο πεδίο είναι υποχρεωτικά πεδία που χρησιμοποιούνται από διακομιστές μεσολάβησης και πύλες που υποδεικνύουν ενδιάμεσα πρωτόκολλα. Υποδεικνύει επίσης τον παραλήπτη αιτήματος μεταξύ του παράγοντα χρήστη και του διακομιστή και την απόκριση μεταξύ διακομιστή και πελάτη.

ΠροειδοποίησηΤο πεδίο φέρει πρόσθετες πληροφορίες σχετικά με την κατάσταση του μηνύματος και τους μετασχηματισμούς μηνυμάτων που δεν αντικατοπτρίζονται στο μήνυμα.

Οι προειδοποιητικές κεφαλίδες συνήθως αποστέλλονται με απαντήσεις.

Το πεδίο κεφαλίδας αιτήματος επιτρέπει στους πελάτες να περάσουν επιπλέον πληροφορίες αιτήματος και πληροφορίες πελάτη στον διακομιστή.

Η δομή μιας κεφαλίδας αιτήματος μοιάζει με:

αποδέχομαιΤο πεδίο καθορίζει τύπους μέσων που είναι αποδεκτοί για απόκριση.

Το "*" χρησιμοποιείται για την ομαδοποίηση τύπων μέσων στην περιοχή

Το "*/*" υποδεικνύει όλους τους τύπους μέσων

Το "type/*" δείχνει όλους τους υποτύπους ενός τύπου

Αποδοχή CharsetΤο πεδίο δείχνει αποδεκτά σύνολα χαρακτήρων απόκρισης. Κάνει τους πελάτες ικανούς να κατανοούν σύνολα χαρακτήρων ειδικού σκοπού για να δίνουν σήμα στον διακομιστή να αναπαραστήσει το έγγραφο σε αυτά τα σύνολα χαρακτήρων.

Αποδοχή κωδικοποίησηςΤο πεδίο είναι παρόμοιο με το Αποδοχή, περιορίζει την αποδεκτή κωδικοποίηση περιεχομένου απόκρισης.

Αποδοχή-ΓλώσσαΤο πεδίο είναι παρόμοιο με το Accept, περιορίζει το προτιμώμενο σύνολο φυσικών γλωσσών.

ΕξουσιοδότησηΤο πεδίο είναι για πράκτορες χρήστη που επιθυμούν να πιστοποιήσουν την ταυτότητα τους με τον διακομιστή.

ΑναμένωΤο πεδίο υποδεικνύει τις συμπεριφορές διακομιστή που απαιτούνται από έναν πελάτη.

ΑπόΤο πεδίο περιέχει τη διεύθυνση ηλεκτρονικού ταχυδρομείου ενός χρήστη που ελέγχει τον παράγοντα χρήστη που ζητά.

ΠλήθοςΤο πεδίο καθορίζει τον κεντρικό υπολογιστή Διαδικτύου και τον αριθμό θύρας πόρων που ζητήθηκε από το URI χρήστη.

Αν ΤαίριασμαΤο πεδίο χρησιμοποιείται για τη δημιουργία μεθόδων υπό όρους.

Εάν-Τροποποιήθηκε-ΑπόΤο πεδίο χρησιμοποιείται για τη δημιουργία μιας μεθόδου υπό όρους. Εάν η ζητούμενη παραλλαγή δεν τροποποιηθεί εντός του καθορισμένου χρόνου, η οντότητα δεν θα επιστραφεί από τον διακομιστή.

Αν-Καμία-ΤαίριασμαΤο πεδίο επιτρέπει την αποτελεσματική ενημέρωση των πληροφοριών της κρυφής μνήμης με ελάχιστο κόστος συναλλαγής.

Αν ΕύροςΤο πεδίο επιτρέπει στους πελάτες να λαμβάνουν μέρος της οντότητας που λείπει ή διαφορετικά, οι πελάτες μπορούν να ζητήσουν να στείλουν ολόκληρη τη νέα οντότητα.

Αν-Μη τροποποιημένο-ΑπόΤο πεδίο επιτρέπει στον διακομιστή να εκτελέσει την απαιτούμενη λειτουργία εάν δεν έχει τροποποιηθεί από την ώρα που καθορίζεται σε αυτό το πεδίο.

Max ForwardsΤο πεδίο παρέχει μηχανισμούς με μεθόδους TRACE και OPTIONS για τον περιορισμό των διακομιστών ή των πυλών προώθησης αιτημάτων.

Εξουσιοδότηση πληρεξουσίουΤο πεδίο επιτρέπει στον πελάτη να αναγνωρίσει τον ασφαλή διακομιστή μεσολάβησης.

ΕύροςΤο πεδίο καθορίζει τις οντότητες HTTP στα μηνύματα HTTP που αντιπροσωπεύονται ως μια ακολουθία byte. Το αίτημα ανάκτησης HTTP ζητά μία ή περισσότερες υπο-εύρος οντοτήτων χρησιμοποιώντας μεθόδους GET.

ΑναφέρωνΤο πεδίο επιτρέπει στους πελάτες να καθορίσουν τη διεύθυνση URI του πόρου από τον οποίο βρίσκεται το Request-URI.

ΤΕΤο πεδίο υποδεικνύει την κωδικοποίηση μεταφοράς επέκτασης που μπορεί να δεχθεί στην απάντηση. Επιπλέον, υποδεικνύει εάν θα δέχεται πεδία τρέιλερ σε κωδικοποίηση μεταφοράς κομματιών.

Πράκτορας χρήστηΤο πεδίο περιέχει πληροφορίες σχετικά με τον παράγοντα χρήστη που ζητά.

Κεφαλίδα απόκρισης HTTP

Το πεδίο κεφαλίδας απόκρισης επιτρέπει στον διακομιστή να διαβιβάσει πρόσθετες πληροφορίες μέσω των απαντήσεων εκτός από την απλή απόκριση γραμμής κατάστασης.

Η δομή της κεφαλίδας απόκρισης μοιάζει με:

Αποδοχή εύρουςΤο πεδίο επιτρέπει στους διακομιστές να υποδείξουν την αποδοχή των αιτημάτων εύρους πόρων.

ΗλικίαΤο πεδίο υποδεικνύει τον αποστολέα τον κατά προσέγγιση χρόνο από τότε που απάντησε ο διακομιστής.

ETagΤο πεδίο παρέχει την τρέχουσα τιμή της ετικέτας οντότητας για ένα αίτημα.

τοποθεσίαΤο πεδίο ανακατευθύνει τους παραλήπτες σε τοποθεσίες διαφορετικές από το Request-URI για την ολοκλήρωση της αναγνώρισης ενός νέου πόρου.

Έλεγχος ταυτότητας διακομιστή μεσολάβησηςΤο πεδίο είναι μια υποχρεωτική συμπερίληψη για απόκριση ελέγχου ταυτότητας διακομιστή μεσολάβησης.

Επανάληψη-ΜετάΤο πεδίο χρησιμοποιείται ως απάντηση όταν μια υπηρεσία δεν είναι διαθέσιμη για να υποδείξει τη διάρκεια της περιόδου για την οποία η υπηρεσία θα παραμείνει μη διαθέσιμη στον πελάτη.

υπηρέτηςΤο πεδίο περιέχει πληροφορίες σχετικά με το λογισμικό που χρησιμοποιείται από τον διακομιστή για τη διαχείριση αιτημάτων.

ΠοικίλλωΤο πεδίο υποδεικνύει το πεδίο αιτήματος που καθορίζει εάν μια κρυφή μνήμη είναι κατάλληλη για χρήση της απόκρισης ενός αιτήματος χωρίς επανεπικύρωση της απάντησης.

WWW-Authenticateχρησιμοποιούνται όταν ένα μήνυμα απάντησης δεν είναι εξουσιοδοτημένο.

Τα πεδία κεφαλίδας οντότητας ορίζουν μεταπληροφορίες σχετικά με την οντότητα-σώμα ή τον ζητούμενο πόρο. Η μορφή entity-header μοιάζει με:

επιτρέπωλίστα πεδίου το σύνολο μεθόδων που υποστηρίζονται από πόρους που έχουν προσδιοριστεί με αίτημα URI.

κωδικοποίηση περιεχομένουΤο πεδίο χρησιμοποιείται ως τροποποιητής τύπου μέσου.

Περιεχόμενο-ΓλώσσαΤο πεδίο περιγράφει τη φυσική γλώσσα για πελάτες μιας οντότητας.

μήκος περιεχομένουΤο πεδίο δείχνει το μέγεθος μιας οντότητας που αναπαρίσταται με δεκαδικό αριθμό.

τοποθεσία περιεχομένουΤο πεδίο παρέχει τοποθεσία πόρων για μια οντότητα όταν είναι προσβάσιμη από τοποθεσία διαφορετική από το Requested-URI.

Περιεχόμενο-MD5Το πεδίο παρέχει έλεγχο ακεραιότητας μηνύματος (MIC) χρησιμοποιώντας μια σύνοψη MD5 στο σώμα της οντότητας.

εύρος περιεχομένουΤο πεδίο καθορίζει πού πρέπει να εφαρμόζεται το μερικό σώμα της πλήρους οντότητας-σώμα.

Τύπος περιεχομένουΤο πεδίο υποδεικνύει εάν ο τύπος μέσου του σώματος της οντότητας αποστέλλεται στον παραλήπτη ή η μέθοδος GET χρησιμοποιείται για την αποστολή αιτημάτων.

ΛήγειΤο πεδίο παρέχει την ημερομηνία/ώρα μετά την οποία η απάντηση γίνεται μπαγιάτικη.

Τελευταία τροποποίησηΤο πεδίο υποδεικνύει την ημερομηνία και την ώρα της τελευταίας τροποποίησης της παραλλαγής.

Η σειρά με την οποία εμφανίζεται το όνομα πεδίου στην κεφαλίδα όταν λαμβάνεται είναι ασήμαντη. Συμβατικά, οι γενικές κεφαλίδες τοποθετούνται πρώτες, ακολουθούμενες από την κεφαλίδα αιτήματος ή απάντησης με την κεφαλίδα οντότητας στο τέλος.

Σημείωση πνευματικών δικαιωμάτων: Μην αντιγράψετε ή μεταφράσετε αυτό το άρθρο χωρίς προηγούμενη γραπτή άδεια από τον ιστότοπο

Το HTTP Debugger είναι ένας αναλυτής HTTP χωρίς διακομιστή μεσολάβησης για προγραμματιστές που παρέχει τη δυνατότητα καταγραφής και ανάλυσης κεφαλίδων HTTP, cookie, παραμέτρων POST, περιεχομένου HTTP και κεφαλίδων CORS από οποιοδήποτε πρόγραμμα περιήγησης ή εφαρμογή επιτραπέζιου υπολογιστή. Καταπληκτικό UI και πολύ εύκολο στη χρήση. Όχι διακομιστής μεσολάβησης, κανένα πρόβλημα δικτύου!

Μια φορά, όταν πήγα στο blog μου, με έκπληξη βρήκα ένα ακατανόητο σφάλμα, κάτι σαν:

Προειδοποίηση: Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη αποσταλεί από (η έξοδος ξεκίνησε στο /xxxxxxxx/wp-config.php:1)

Και δεν υπάρχει τρόπος πρόσβασης στον διαχειριστή. Αμέσως πήγα να ελέγξω τι ήταν λάθος με το αρχείο wp-config.php. Όλα ήταν στη θέση τους, οι κωδικοί πρόσβασης στη βάση δεδομένων ήταν σωστοί. Νόμιζα ότι είχε χακαριστεί ξανά)) Αλλά και πάλι, δεν υπήρχαν σημάδια βανδαλισμού στο FTP. Το πιο περίεργο (αυτό με μπέρδεψε τελείως στο τέλος) ήταν ότι μόνο ο σύνδεσμος προς τον ιστότοπο χωρίς www δεν λειτούργησε ή το αντίστροφο (δεν θυμάμαι ακριβώς). Άρχισα να χτυπάω το hoster, κοιτάξτε τις ρυθμίσεις στον πίνακα διαχείρισης του τομέα - γενικά, πολλά πράγματα.

Αλλά αποδείχθηκε ότι ήταν πολύ πιο εύκολο - υπήρχε ένα BOM στην αρχή του αρχείου διαμόρφωσης— δείκτης (υπογραφή) για αρχεία UTF-8. Γι' αυτό πετάχτηκε το παραπάνω λάθος. Για να μην συμβεί αυτό σε εσάς, πρώτα απ 'όλα, πρέπει να χρησιμοποιήσετε προγράμματα επεξεργασίας κώδικα που είτε δεν βάζουν καθόλου αυτήν την υπογραφή είτε προσδιορίζουν εάν χρειάζεται πριν αποθηκεύσετε το αρχείο.

Σε ορισμένες συντάκτες κειμένουμπορείτε να βρείτε τα πλαίσια ελέγχου "Συμπερίληψη Unicode Signature (BOM)", "Add Byte Order Mark" ή παρόμοια πλαίσια στις ρυθμίσεις. Διαφορετικά, χωρίς να μπορείτε να απενεργοποιήσετε μια περιττή επιλογή σε ένα συγκεκριμένο πρόγραμμα, δεν συνιστάται η χρήση της. Σε εξειδικευμένα φόρουμ μπορείτε να βρείτε μια λίστα με καλούς επεξεργαστές κειμένου, αυτή είναι - Notepad2, PSPad, UnicEdit, Notepad++. Πολλά γράφονται για το τελευταίο, ένα αρκετά ισχυρό εργαλείο. Είχα κατά κάποιο τρόπο τυχαία διαθέσιμο έναν εναλλακτικό επεξεργαστή στον υπολογιστή μου - Akelpad- Το χρησιμοποιώ για παρόμοιες εργασίες.

Θα πρέπει να σημειωθεί ότι εδώ υπάρχει ένα άλλο σημείο - ένα σφάλμα με το BOM μπορεί να είναι όχι μόνο στο αρχείο wp-config.php. Επιπλέον, με την επιλογή εμφάνισης προειδοποιήσεων απενεργοποιημένη, δεν θα δείτε καθόλου πού έχει εισχωρήσει το πρόβλημα. Σε τέτοιες περιπτώσεις (καλά, και όλες οι άλλες), θα συνιστούσα να χρησιμοποιήσετε ένα απλό script για εύρεση αρχείων με BOM. Ο Yury Belotitsky πρέπει να ευχαριστηθεί για την εξέλιξη.

Η χρήση του σεναρίου είναι πολύ απλή.

  1. επιθυμητό αρχείο
  2. Ρίξτε το Διακομιστής FTPστον ριζικό κατάλογο. Εάν το WordPress δεν είναι εγκατεστημένο στη ρίζα του ιστότοπου (αλλά στον φάκελο του ιστολογίου, για παράδειγμα), τότε το σενάριο πρέπει να τοποθετηθεί στον κατάλογο όπου βρίσκεται το WordPress και να εκτελεστεί από αυτόν.
  3. Η εκκίνηση είναι πολύ απλή - πληκτρολογήστε στη γραμμή διευθύνσεων του προγράμματος περιήγησης τον σύνδεσμο http://your.site/find_bom.php

Ως αποτέλεσμα, λάβετε μια λίστα με αρχεία που είναι ελαττωματικά. Παρεμπιπτόντως, για την ταχύτητα εργασίας, το σενάριο ελέγχει μόνο εκείνους τους καταλόγους όπου οι χρήστες συνήθως ανεβάζουν αρχεία - το root, το /wp-content/themes και το /wp-content/plugins.

Αυτό είναι βασικά. Πόσο δύσκολο ήταν να λυθεί ένα τόσο απλό πρόβλημα. Ελπίζω η εμπειρία μου να σας βοήθησε λίγο και τώρα, όταν εμφανιστεί μια αντίστοιχη προειδοποίηση, θα ξέρετε τι να κάνετε :) Εάν δεν μπορείτε να διορθώσετε ένα ή άλλο αρχείο από το BOM, μπορείτε απλά να ανεβάσετε ένα νέο από τη διανομή WordPress.

ΥΣΤΕΡΟΓΡΑΦΟ. Για τους νεόνυμφους, κατάλληλος χώρος είναι η οργάνωση δεξιώσεων και η επίλυση όλων των θεμάτων που σχετίζονται με το γάμο.

Είναι εκπληκτικό πόσο μικρό λάθος μπορεί να οδηγήσει σε πλήρη Εκτός λειτουργίαςτον ιστότοπό σας στο WordPress. Μιλάμε φυσικά για τη γνωστή προειδοποίηση σφαλμάτων του WordPress. Προειδοποίηση: δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη αποσταλεί από το pluggable.php. Εάν είστε ένας από αυτούς που αντιμετώπισαν αυτό το σφάλμα, τότε έχετε έρθει στο σωστό μέρος. Σε αυτό, θα συζητήσουμε πρώτα απ 'όλα τον λόγο για την εμφάνιση αυτού του σφάλματος και θα εξετάσουμε τις λύσεις που θα λύσουν τελικά το πρόβλημα.

Τι θα απαιτηθεί

Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε τα εξής:

  • Πρόσβαση στον πίνακα ελέγχου της φιλοξενίας σας ή στην πρόσβαση FTP

Πώς εμφανίζεται το στοιχείο Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - κεφαλίδες που έχουν ήδη αποσταλεί κατά λάθος

Ας δούμε ένα παράδειγμα αυτού του σφάλματος για να κατανοήσουμε καλύτερα τους λόγους. Το σφάλμα εμφανίζεται συνήθως με αυτή τη μορφή:

Προειδοποίηση: Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη αποσταλεί από (η έξοδος ξεκίνησε στο /public_html/wp-content/plugins/my-plugin/my-function.php:#) στο /public_html/wp-includes/pluggable.php στη γραμμή #

Όπως μπορείτε να δείτε, το σφάλμα αναφέρει δύο αρχεία. Το πρώτο αρχείο (στην περίπτωσή μας: my-function.phpστεγάζεται σε /public_html//wp-content/plugins/my-plugin/) επικεφαλής των υπόπτων. Αυτός είναι ο προσαρμοσμένος μας κώδικας που προορίζεται να αλλάξει τη βασική λειτουργικότητα που παρέχεται από το WordPress. Η λειτουργικότητα του πυρήνα βρίσκεται στο αρχείο pluggable.php(Βασικό αρχείο WordPress, αμετάβλητο για οποιοδήποτε Εγκαταστάσεις WordPress). Με άλλα λόγια, το πρόβλημα βρίσκεται στο πρώτο αρχείο, το οποίο εμποδίζει τη σωστή εκτέλεση του δεύτερου αρχείου.

Η κύρια αιτία του λάθους είναι το επιπλέον κενά στο πρώτο αρχείο. Αυτά είναι κενά στο επάνω ή κάτω μέρος του αρχείου, περιττά κενά οπουδήποτε στο αρχείο ή ακόμα και κενά σε ετικέτες PHP. . Παρεμπιπτόντως, λόγω του γεγονότος ότι οι προγραμματιστές μπορούν (και συνήθως το κάνουν) κατά λάθος να εισάγουν επιπλέον κενά στον κώδικά τους, αυτό το σφάλμα εμφανίζεται πιο συχνά από ό,τι θα περίμενε κανείς. Η γραμμή # που αναφέρεται στο μήνυμα σφάλματος αναφέρεται στη θέση του προβλήματος - αυτό θα σας βοηθήσει να επιλύσετε το πρόβλημα πιο γρήγορα και χωρίς φασαρία.

Η επιδιόρθωση δεν μπορεί να τροποποιήσει τις πληροφορίες κεφαλίδας - οι κεφαλίδες έχουν ήδη σταλεί από

Τώρα που ξέρετε τι προκαλεί το σφάλμα, μπορείτε να προχωρήσετε στη διόρθωσή του. Θα σας δείξουμε δύο επιλογές για να διορθώσετε το πρόβλημα, τις οποίες μπορείτε να δοκιμάσετε μεμονωμένα ή με τη σειρά τους, εάν μεμονωμένα δεν βοήθησαν.

Επιλογή 1 - Επεξεργασία του ελαττωματικού αρχείου

Η πρώτη λύση στο λάθος Προειδοποίηση: δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας– μη αυτόματη διόρθωση αρχείου με σφάλμα. Έχετε ήδη τις πληροφορίες που χρειάζεστε για να βρείτε το πρόβλημα στο ίδιο το μήνυμα σφάλματος (θυμηθείτε, αυτό είναι το πρώτο αρχείο στο μήνυμα). Το μόνο που απαιτείται είναι να ανοίξετε αυτό το αρχείο μέσω FTP χρησιμοποιώντας έναν πελάτη όπως το FileZilla ή μέσω ενός διαχειριστή αρχείων.

Ουσιαστικά, το μόνο που χρειάζεται να προσέξετε εδώ είναι να αφαιρέσετε τα επιπλέον κενά/κενές γραμμές στο αρχείο. Ένα καλό μέροςγια αρχή θα ήταν η γραμμή # που αναφέρεται στο μήνυμα σφάλματος. Από αυτό το σημείο και μετά, μπορείτε να συνεχίσετε να αναλύετε το υπόλοιπο αρχείο αναζητώντας τυχόν άλλα περιττά κενά ή κενές γραμμές μέχρι το τέλος του εγγράφου.

Βεβαιωθείτε ότι έχετε γράψει σωστά τις ετικέτες έναρξης και λήξης της PHP. Δεν πρέπει να υπάρχει κενό πριν ή μετά την ετικέτα , ίδιο με την ετικέτα ?> . Επίσης, η τελευταία γραμμή κώδικα δεν πρέπει να τελειώνει με κενό ή επιπλέον νέα γραμμή.

Στο παρακάτω στιγμιότυπο οθόνης μπορείτε να δείτε το αρχείο wp-config.php, το οποίο έχει κενά πριν από την πρώτη ετικέτα PHP.


ΠΡΟΤΡΟΠΗ: Σε πολλά προγράμματα επεξεργασίας κειμένου, μπορείτε να αφαιρέσετε τα περιττά κενά αυτόματα. Για παράδειγμα, για να αφαιρέσετε επιπλέον χώρουςστον επεξεργαστή Atom, επιλέξτε όλο τον κώδικα και μεταβείτε στο P πακέτα -> Whitespace -> Remove Trailing Whitespace.

Επιλογή 2 - Αντικαταστήστε το ελαττωματικό αρχείο

Φυσικά, η επεξεργασία ενός αριθμού αρχείων με σφάλματα μπορεί να είναι δύσκολη. Τα αρχεία μπορεί να σχετίζονται με μια προσθήκη ή ένα θέμα που μόλις εγκαταστήσατε στον ιστότοπό σας ή μπορεί ακόμη και να είναι βασικά αρχεία του WordPress.

Εάν το σφάλμα προκαλείται όντως από μια προσθήκη ή ένα θέμα, το μόνο που χρειάζεται να κάνετε είναι να το εγκαταστήσετε ξανά. Αυτή η ενέργεια βοηθά στις περισσότερες περιπτώσεις. Από την άλλη πλευρά, εάν το βασικό αρχείο του WordPress προκαλεί το σφάλμα, καλύτερη λύσηπάρτε ένα καθαρό αντίγραφο του WordPress και αντικαταστήστε το αρχείο buggy στην εγκατάστασή σας με τη σωστή έκδοση. Αυτό θα διασφαλίσει ότι το ελαττωματικό αρχείο έχει επιδιορθωθεί την αρχική κατάσταση, ενώ η υπόλοιπη εγκατάσταση του ιστότοπού σας WordPress θα παραμείνει ασφαλής και υγιής. Τώρα, απλώς φορτώστε ξανά τη σελίδα και βεβαιωθείτε ότι το σφάλμα έχει διορθωθεί.

Συμπερασματικά

Είτε επικολλήσατε ένα απόσπασμα κώδικα σε ένα αρχείο, είτε προσθέσατε μια νέα προσθήκη/θέμα ή γράψατε τον κώδικα με το χέρι, υπάρχει κίνδυνος επιπλέον διαστημάτων στο αρχείο. Αυτοί οι φαινομενικά αθώοι χώροι μπορεί να είναι ένα σφάλμα WordPress Προειδοποίηση: δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη σταλεί από.

Σε αυτόν τον οδηγό, καλύψαμε τον τρόπο διόρθωσης τέτοιων σφαλμάτων και τώρα ο ιστότοπός σας λειτουργεί ξανά όπως αναμένεται. Περισσότεροι οδηγοί WordPress μπορείτε να βρείτε εδώ.

Συγγραφέας

Η Έλενα έχει επαγγελματική τεχνική εκπαίδευση στο χώρο Τεχνολογίες πληροφορικήςκαι εμπειρία προγραμματισμού διαφορετικές γλώσσεςυπό διαφορετικές πλατφόρμεςκαι συστήματα. Έχει αφιερώσει περισσότερα από 10 χρόνια στη σφαίρα του ιστού, δουλεύοντας με διάφορα CMS, όπως το Drupal, το Joomla, το Magento και φυσικά το πιο δημοφιλές σύστημα διαχείρισης περιεχομένου σήμερα - το WordPress. Τα άρθρα της είναι πάντα τεχνικά και ακριβή, είτε πρόκειται για κριτική του WordPress είτε για τον τρόπο ρύθμισης του διακομιστή VPS σας.

Σε αυτό το άρθρο, θα εξετάσουμε τις κύριες αιτίες και λύσεις για το σφάλμα "Οι κεφαλίδες δεν μπορούν να αλλάξουν επειδή έχουν ήδη σταλεί" ("Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη αποσταλεί από").

Τι σημαίνει αυτό το σφάλμα;

Για να κατανοήσετε τις αιτίες του σφάλματος, πρέπει πρώτα να καταλάβετε ποιες είναι αυτές οι "κεφαλίδες".

Ας μην μπούμε στη θεωρία. Ας πούμε ότι πριν ανοίξει κάποιος χρήστης μια ιστοσελίδα, του αποστέλλονται αυτές οι ίδιες «κεφαλίδες», οι οποίες περιέχουν την κωδικοποίηση, τη γλώσσα του ιστότοπου, τα δεδομένα διακομιστή και άλλες πληροφορίες υπηρεσίας. Αξίζει επίσης να προστεθεί ξεχωριστά ότι τα cookies και η περίοδος λειτουργίας αποστέλλονται επίσης σε κεφαλίδες.

Ποιες εντολές προκαλούν αυτό το σφάλμα;

Λάθος "Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας - οι κεφαλίδες έχουν ήδη σταλεί από"μπορεί να καλέσει εντολές PHP όπως header , setcookie και άλλες που σχετίζονται με την εργασία των cookies ή των συνεδριών.

Αιτίες και λύσεις για το σφάλμα.

Το περισσότερο κοινό λάθοςπροέρχεται από την απειρία. Έχουμε ήδη καταλάβει ότι οι κεφαλίδες αποστέλλονται πριν ξεκινήσει η φόρτωση της ίδιας της σελίδας.

Αλλά οι προγραμματιστές, ειδικά οι αρχάριοι, απλά το ξεχνούν ή δεν το ξέρουν καν. Και πρώτα προσπαθούν να εμφανίσουν κάτι στη σελίδα - τις περισσότερες φορές με τη βοήθεια της εντολής echo, και στη συνέχεια ορίζουν cookies, στέλνουν κεφαλίδες κ.λπ. Το οποίο οδηγεί σε αυτό το σφάλμα.

Ακολουθεί ένα παράδειγμα κώδικα που θα οδηγήσει σε ένα τέτοιο σφάλμα:

Και εδώ είναι η σωστή επιλογή:

Δηλαδή, πρώτον, δεν μπορείτε να εμφανίσετε τίποτα πριν στείλετε τις κεφαλίδες!

Δεν είναι πάντα προφανές, αλλά υπάρχει ένα σφάλμα με μια μικρή διαφορά. Αυτό συμβαίνει όταν το έγγραφό σας php ξεκινά με κενά ή κενές γραμμές, πράγμα που σημαίνει ότι αυτές οι γραμμές εμφανίζονται στο πρόγραμμα περιήγησης.

Μπορεί να είναι πολύ δύσκολο να το ακολουθήσουμε, γιατί για παράδειγμα, ένα σημειωματάριο των Windows μπορεί να προσθέσει πρώτα ένα Byte Order Mark, χωρίς να μας προειδοποιήσει με κανέναν τρόπο και χωρίς καν να εμφανίσει αυτόν τον χαρακτήρα. Σε αυτήν την περίπτωση, αξίζει να ανοίξετε το έγγραφο με άλλους συντάκτες και να ελέγξετε.

Ακολουθεί ένα παράδειγμα λανθασμένων κεφαλίδων:

Δηλαδή, δεύτερον, πριν

Θα πρέπει να είστε ιδιαίτερα προσεκτικοί εάν χρησιμοποιείτε την εντολή συμπερίληψη, στην πραγματικότητα συνδυάζει όλα τα αρχεία και δημιουργεί ένα αποτέλεσμα, και εάν συμπεριλάβατε πρώτα την κεφαλίδα του ιστότοπου (ρυθμιστικό, μενού κ.λπ.) και μετά προσπαθήσετε να στείλετε κεφαλίδες στο κύριο αρχείο, τότε φυσικά θα λάβετε αυτό το σφάλμα.

Ακολουθεί ένα παράδειγμα τέτοιου εσφαλμένου κώδικα:

Αυτό το μήνυμα σφάλματος εμφανίζεται συχνά από προγραμματιστές που ξεκινούν με την PHP. Η κατανόηση του γιατί παρουσιάζεται αυτό το σφάλμα θα σας βοηθήσει να βρείτε μια λύση.

Η PHP κάνει μεγάλο μέρος της δουλειάς της δημιουργίας ιστοσελίδων για εσάς, χωρίς να το ζητήσετε. Μια ιστοσελίδα έχει δύο μέρη: μια κεφαλίδα και ένα σώμα.

Αυτό το κοινό σφάλμα PHP παρατηρείται όταν ένας προγραμματιστής κάνει λάθη στη χειραγώγηση ή τη δημιουργία κεφαλίδων. Εδώ είναι ένα παράδειγμα:

Προειδοποίηση: Δεν είναι δυνατή η τροποποίηση των πληροφοριών κεφαλίδας – οι κεφαλίδες έχουν ήδη αποσταλεί από (η έξοδος ξεκίνησε στο /home/usr1/public_html/sent.php:42) στο /home/usr1/public_html/includes/theme-header.php στη γραμμή 12

Γενικά, δεν χρειάζεται να ανησυχείτε για την κεφαλίδα, καθώς δημιουργείται αυτόματα και περιέχει πληροφορίες σχετικά με τη σελίδα, τον διακομιστή και το cookie. Οι πληροφορίες στην κεφαλίδα είναι σημαντικές, αλλά συνήθως δεν είναι ορατές στον χρήστη. Ορίστε μερικά παραδείγματα:

Ημερομηνία: Δευτέρα, 10 Ιουλίου 2006 18:51:59 GMT Διακομιστής: Apache/2.2.0 (Unix) mod_ssl/2.2.0 OpenSSL/0.9.7g Περιεχόμενο-Κωδικοποίηση: gzip Περιεχόμενο-Τύπος: text/html

Μερικές φορές οι προγραμματιστές θέλουν να αλλάξουν ορισμένες τιμές κεφαλίδας. Για παράδειγμα, εάν η PHP δημιουργεί έξοδο XML, ο τύπος περιεχομένου πρέπει να αλλάξει για να το υποδείξει αυτό. Ένα άλλο συνηθισμένο παράδειγμα είναι η ανακατεύθυνση του προγράμματος περιήγησης του χρήστη σε άλλη ιστοσελίδα χρησιμοποιώντας το στοιχείο κεφαλίδας τοποθεσίας, όπως περιγράφεται σε αυτό το άρθρο.

Η κεφαλίδα πρέπει να είναι πρώτη στην απόκριση από τον διακομιστή web και χωρίζεται από το σώμα με μία κενή γραμμή. Ο λόγος για αυτό το σφάλμα είναι ότι κάποιο μέρος του σώματος της ιστοσελίδας έχει ήδη σταλεί στον χρήστη πριν γίνει προσπάθεια ορισμού της τιμής της κεφαλίδας. Επειδή η PHP διευκολύνει πολλά πράγματα για εσάς, το πρόβλημα μπορεί να κρύβεται στο συνηθισμένο μέρος. Ακολουθούν ορισμένες οδηγίες για την εύρεση του προβλήματος:

  1. Βρείτε την εντολή header() που προκαλεί το πρόβλημα. Το σφάλμα πρέπει να βρίσκεται πάνω ή πριν από αυτήν τη γραμμή.
  2. Αναζητήστε τυχόν οδηγίες που θα μπορούσαν να κατευθύνουν την έξοδο στον χρήστη πριν από αυτήν την εντολή κεφαλίδας. Εάν βρείτε ένα ή περισσότερα, αλλάξτε τον κωδικό για να μετακινήσετε τη δήλωση κεφαλίδας πριν από αυτά. Συγκρότημα δηλώσεις υπό όρουςμπορεί να περιπλέξουν το πρόβλημα, αλλά μπορούν επίσης να βοηθήσουν στην επίλυση του προβλήματος. Εναλλακτικά, μπορείτε να εφαρμόσετε μια υπό όρους στο επάνω μέρος του σεναρίου PHP που καθορίζει την τιμή της κεφαλίδας όσο το δυνατόν νωρίτερα και την ορίζει εκεί.
  3. Βεβαιωθείτε ότι δεν υπάρχουν κενά έξω από τις ετικέτες έναρξης και τέλους PHP. Ενώ μια κενή γραμμή πριν από την ετικέτα έναρξης
  4. Εάν αποθηκεύσετε το αρχείο σας σε κωδικοποίηση UTF-8, τότε βεβαιωθείτε ότι το αρχείο έχει αποθηκευτεί χωρίς υπογραφή (χωρίς BOM). Η υπογραφή είναι ένα byte που προστίθεται στην αρχή του αρχείου και εάν το σενάριο PHP αποθηκευτεί σε αυτήν τη μορφή, τότε αυτό το byte θα γίνει αντιληπτό ως μέρος της εξόδου του σώματος της σελίδας, το οποίο δεν θα πρέπει να επιτρέπεται για να αποφευχθεί το πρόβλημα που έχουμε εξετάζουν.