Πλήρης οδηγός για τους κωδικούς κατάστασης HTTP: σειρά 400
Κάθε κωδικός 4xx, τι τον προκαλεί, και πώς να ξεχωρίσετε ένα σφάλμα του client από έναν λάθος ρυθμισμένο server.

Τα προβλήματα με έναν user-agent client μπορεί να κυμαίνονται από αιτήματα για πόρους που δεν είναι πλέον διαθέσιμοι (λόγω λάθους πληκτρολόγησης ενός URI) μέχρι την αντίδραση του server σε αιτήματα που ταιριάζουν με την υπογραφή μιας επίθεσης.
Το πιο συνηθισμένο είναι το 404. Το 404 Not Found επιστρέφεται όταν ένας client ζητά έναν πόρο που ο web server δεν μπορεί να βρει:

Ας δούμε τους πιο συνηθισμένους και ενδιαφέροντες κωδικούς απόκρισης της σειράς 400 με λίγο περισσότερη λεπτομέρεια.
400 Bad Request
Το 400 Bad Request είναι (συνήθως) το αποτέλεσμα ενός user-agent που στέλνει στο αίτημα κάτι που ο web server δεν μπόρεσε να επεξεργαστεί. Ας δημιουργήσουμε ένα 400 Bad Request για να καταλάβουμε τι μπορεί να προκαλέσει αυτό το σφάλμα.
Θα πάμε παλιομοδίτικα στο Linux και θα χρησιμοποιήσουμε ένα εργαλείο που λέγεται netcat. Το netcat μπορεί να χρησιμοποιηθεί για αποστολή ακατέργαστων δεδομένων μέσω sockets. Άλλωστε, τα αιτήματα HTTP/1.1 είναι ακριβώς αυτό: ακατέργαστο κείμενο.
Πρώτα, ας στείλουμε ένα νόμιμο αίτημα HEAD στη google:

Ας εξαναγκάσουμε ένα 400 Bad Request:
image: src /blog/wp-content/uploads/2017/12/3CEEAuo-e1513087453173.jpg (unchanged); alt: Εξαναγκασμένο κακό αίτημα που παράγει 400
Στείλαμε επίτηδες ένα αίτημα που ο server δεν μπορούσε να καταλάβει. Ας δούμε τη μέθοδο αιτήματος που χρησιμοποιήθηκε:
$ nc www.google.com 80 BAD / HTTP/1,1 Host: www.google.com
Ο web server δεν μπόρεσε να επεξεργαστεί τη μέθοδο: BAD
Είναι απίθανο ένας σύγχρονος web browser να στείλει κακοσχηματισμένα αιτήματα σαν το παραπάνω. Ωστόσο, αν χρησιμοποιείτε μια custom εφαρμογή HTTP όπως έναν web scraper, ώρα για debugging.
Αυτά τα βήματα λύνουν τα πιο συνηθισμένα σφάλματα 400.
1. Ελέγξτε το URL
Αν κάνετε κλικ σε έναν σύνδεσμο, είναι πολύ πιθανό ο συντάκτης της σελίδας να έκανε ένα τυπογραφικό λάθος. Εξετάστε ολόκληρο το URL, με ιδιαίτερη προσοχή στο μονοπάτι, στον τίτλο του εγγράφου και στο query string.
2. Καθαρίστε όλα τα cookies και την cache
Ο καθαρισμός των cookies και της cache διορθώνει πολλά σφάλματα 400, και είναι ένα καλό πρώτο βήμα και για πολλούς άλλους κωδικούς κατάστασης 400.
- καθαρίστε όλα τα cookies και το ιστορικό περιήγησης
- δοκιμάστε ξανά το αίτημα
Σε Chrome, Edge και Firefox η επιλογή βρίσκεται στις ρυθμίσεις του browser κάτω από το Απόρρητο, συνήθως με όνομα «Διαγραφή δεδομένων περιήγησης». Τα ονόματα των μενού διαφέρουν ανά έκδοση. Ο καθαρισμός των cookies μόνο του επηρεαζόμενου site συχνά αρκεί.
Ο καθαρισμός όλων των cookies και του ιστορικού εξασφαλίζει ότι οτιδήποτε αποθηκευμένο ή αλλοιωμένο (όπως τα cookies) έχει φύγει. Αυτό συχνά διορθώνει ένα 400 Bad Request.
3. Μέγεθος αρχείου μεταφόρτωσης
Το πρόβλημα μπορεί κάλλιστα να είναι ένα backend script, η μεταφόρτωση ενός πολύ μεγάλου αρχείου ή ενός αρχείου με λάθος τύπο μέσου.
- Αν το 400 bad request εμφανίζεται κατά τη μεταφόρτωση αρχείου, δοκιμάστε ένα μικρότερο αρχείο.
- Βεβαιωθείτε ότι ο τύπος αρχείου είναι αποδεκτός.
- Αν μεταφορτώνετε εικόνα, δοκιμάστε και τις δύο μορφές, jpeg και png.
- Αν μεταφορτώνετε έγγραφο, το απλό κείμενο και οι συνηθισμένες μορφές γραφείου συνήθως επιτρέπονται.
4. Κακοσχηματισμένες κεφαλίδες
Οι κακοσχηματισμένες κεφαλίδες είναι ένα αρκετά χαμηλού επιπέδου ζήτημα και μπορεί κάλλιστα να αφήνουν την ίδια τη web εφαρμογή υπεύθυνη.
Τα εργαλεία προγραμματιστή που έχει κάθε σύγχρονος browser (η καρτέλα Network) μας επιτρέπουν να παρακολουθήσουμε ολόκληρη τη συναλλαγή HTTP για οτιδήποτε ασυνήθιστο.
5. Ενημερώστε τον browser σας και απενεργοποιήστε τα plugins
Αν ο browser σας είναι ξεπερασμένος, μπορεί κάλλιστα να στέλνει απαρχαιωμένες κεφαλίδες και αιτήματα.
Επίσης, δοκιμάστε να αφαιρέσετε ή να απενεργοποιήσετε όλα τα plugins και τις επεκτάσεις. Η δοκιμή του ίδιου αιτήματος σε άλλον browser μπορεί επίσης να βοηθήσει στην απομόνωση του προβλήματος.
6. Δοκιμάστε να αποσυνδεθείτε
Αν χρησιμοποιείτε μια web εφαρμογή με ταυτοποίηση χρηστών και sessions, δοκιμάστε να αποσυνδεθείτε και μετά να καθαρίσετε την cache του browser.
(hr)
401 Unauthorized
Το 401 Unauthorized επιστρέφεται όταν ένας web server ζητά διαπιστευτήρια για ένα προστατευμένο έγγραφο.

403 Forbidden
Το 403 Forbidden είναι συνήθως ένα από τέσσερα πράγματα:
- δεν επιτρέπεται η λίστα καταλόγου
- ο τρέχων ταυτοποιημένος χρήστης δεν έχει επαρκή δικαιώματα
- η διεργασία του web server έχει ανεπαρκή δικαιώματα
- η διεύθυνση που ζητά έχει αποκλειστεί
Η λίστα καταλόγου δεν επιτρέπεται

Εδώ ο web server δεν επιτρέπει λίστες καταλόγου σε μη ταυτοποιημένους χρήστες. Η απλούστερη διόρθωση είναι να βάλετε ένα αρχείο index στον κατάλογο. Διαφορετικά, οι λίστες καταλόγου για μη ταυτοποιημένους χρήστες θα πρέπει να οριστούν ρητά.
Ο ταυτοποιημένος χρήστης δεν έχει δικαιώματα
Η καλύτερη μέθοδος σε αυτή την περίπτωση είναι να φτιάξετε μια ομάδα για όλους τους χρήστες που χρειάζονται πρόσβαση σε έναν πόρο. Δώστε σε αυτή την ομάδα τα απαραίτητα δικαιώματα σε επίπεδο συστήματος αρχείων. Μετά προσθέστε τους επιτρεπόμενους χρήστες στην ομάδα.
Η διεργασία του web server δεν έχει επαρκή δικαιώματα
image: src /blog/wp-content/uploads/2017/12/XSkGl4h-e1513087253567.jpg (unchanged); alt: Άρνηση πρόσβασης
Δεν μπορούμε να προσπελάσουμε τη σελίδα test.php στο webroot στο /var/www/html. Σε RHEL και στα παράγωγά του (Oracle Linux, AlmaLinux, Rocky Linux) υπάρχουν δύο πράγματα να ελέγξετε: τα κλασικά δικαιώματα αρχείων και το SELinux context.
Πρώτα, ελέγξτε ιδιοκτησία και δικαιώματα:
# ls -ld /var/www/html/ drwx------. 3 root root 4096 Nov 24 03:47 /var/www/html/
Ο κατάλογος ανήκει στον χρήστη root και στην ομάδα root χωρίς πρόσβαση για κανέναν άλλο, οπότε η διεργασία του web server (χρήστης apache για τον Apache httpd, nginx για τον nginx) δεν μπορεί να τον διαβάσει. Δώστε στην ομάδα του web server δικαίωμα ανάγνωσης, χωρίς εγγραφή:
# chgrp -R apache /var/www/html # chmod 750 /var/www/html # chmod 640 /var/www/html/test.php # ls -ld /var/www/html/ drwxr-x---. 3 root apache 4096 Nov 24 03:47 /var/www/html/ # ls -l /var/www/html/test.php -rw-r-----. 1 root apache 91 Nov 16 06:52 /var/www/html/test.php
Δεύτερον, ελέγξτε το SELinux context. Αρχεία που μεταφέρθηκαν στο webroot από αλλού κρατούν την παλιά τους ετικέτα, και τότε το SELinux μπλοκάρει τον web server ακόμη κι όταν τα δικαιώματα είναι σωστά:
# ls -Z /var/www/html/test.php # restorecon -Rv /var/www/html
Το περιεχόμενο κάτω από το /var/www/html πρέπει να φέρει τον τύπο httpd_sys_content_t. Διορθώστε την ετικέτα με restorecon. Ποτέ μην απενεργοποιείτε το SELinux για να εξαφανίσετε ένα 403.
Για καλύτερη πρακτική ασφαλείας, η ομάδα του web server δεν πρέπει να έχει δικαιώματα εγγραφής σε αρχεία και φακέλους. Όπου ένα σύστημα διαχείρισης περιεχομένου χρειάζεται να γράφει (ένας φάκελος uploads, για παράδειγμα), δώστε δικαίωμα εγγραφής μόνο σε εκείνον τον φάκελο, και σε RHEL δώστε του τον τύπο SELinux httpd_sys_rw_content_t.
Η άρνηση δικαιωμάτων εγγραφής σε αρχεία και φακέλους μπορεί να προσφέρει ένα επιπλέον επίπεδο ασφάλειας στην περίπτωση που ένα ελάττωμα της web εφαρμογής αξιοποιηθεί από έναν επιτιθέμενο για να τροποποιήσει περιεχόμενο, να διαγράψει αρχεία ή να προσθέσει αρχεία.
Σε περιβάλλον staging, βάλτε τους προγραμματιστές στην ομάδα του web server και δώστε σε αυτή την ομάδα δικαίωμα εγγραφής. Κρατήστε την παραγωγή μόνο για ανάγνωση.
Ένα άλλο συνηθισμένο σενάριο για κατάσταση 403 Forbidden μπορεί να είναι μια διεύθυνση IP ή ένα εύρος IP που έχει αποκλειστεί σε αρχείο .htaccess από τον διαχειριστή του server.
404 Not Found
Το 404 Not Found σημαίνει ότι ο web server δεν μπόρεσε να βρει έναν ζητούμενο πόρο. Όταν συναντάτε σφάλμα 404 μπορείτε να κάνετε μερικά πράγματα:
- ελέγξτε την ορθογραφία του host, του domain, του μονοπατιού και του εγγράφου
- ελέγξτε πεζά και κεφαλαία στο αρχείο και στο μονοπάτι. Οι web servers σε Linux και Unix (εκτός αν ρυθμιστούν διαφορετικά) συνήθως διακρίνουν πεζά από κεφαλαία, με την παράδοση να χρησιμοποιούνται όλα πεζά.
- χρησιμοποιήστε το Google για να βρείτε ένα εναλλακτικό URL για τον πόρο
- δοκιμάστε ένα αρχειοθετημένο αντίγραφο της σελίδας στο Wayback Machine του Internet Archive
Χρήση προχωρημένων τελεστών αναζήτησης Google
image: src /blog/wp-content/uploads/2017/12/KbnaNqB-e1513087331180.jpg (unchanged); alt: Google: εύρεση όλων των αρχείων PDF
Ένα ερώτημα σαν το παραπάνω, με τελεστές όπως site: και filetype:, συχνά βρίσκει ένα έγγραφο του οποίου ο παλιός σύνδεσμος επιστρέφει τώρα 404.
Αν η σελίδα έχει κατέβει, το Wayback Machine του Internet Archive μπορεί να κρατά ακόμη ένα παλαιότερο αντίγραφο.
405 Method Not Allowed
Ένα 405 Method Not Allowed εμφανίζεται όταν επιχειρείται μια μέθοδος αιτήματος που δεν επιτρέπεται από τον web server.

406 Not Acceptable
Το 406 Not Acceptable επιστρέφεται όταν ο server δεν μπορεί να παράσχει τον πόρο σε καμία από τις μορφές περιεχομένου, κωδικοποιήσεις, γλώσσες ή σύνολα χαρακτήρων που ο client δηλώνει ότι δέχεται.
Για να λύσετε ένα 406, δείτε τις κεφαλίδες του αιτήματος στα εργαλεία προγραμματιστή του browser σας (καρτέλα Network).
Οι τιμές κεφαλίδων που στέλνει ο client και αξίζει να ελέγξετε περιλαμβάνουν:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
Οι σύγχρονοι browsers σπάνια το προκαλούν. Αν ο δικός σας το κάνει, δοκιμάστε να τον αναβαθμίσετε σε νεότερη έκδοση.
407 Proxy Authentication Required
Το 407 Proxy Authentication Required συνήθως σημαίνει ότι ο user-agent πρέπει να δώσει διαπιστευτήρια για να προσπελάσει έναν proxy server.
image: src /blog/wp-content/uploads/2017/12/GpVOCul.jpg (unchanged); alt: Παροχή διαπιστευτηρίων proxy σε Linux
408 Request Timeout
Το 408 σημαίνει ότι ο server περίμενε πολύ ώρα τον client να ολοκληρώσει την αποστολή του αιτήματός του. Συνήθως δείχνει αργή ή ασταθή σύνδεση του client παρά πρόβλημα του server.
429 Too Many Requests
Το 429 συνήθως σημαίνει ότι έχει ενεργοποιηθεί rate limiting στον server. Το rate limiting επιτρέπει μόνο έναν ορισμένο αριθμό αιτημάτων σε ένα καθορισμένο χρονικό διάστημα.
Όταν λαμβάνετε 429 Too Many Requests, επιβραδύνετε. Ο server μπορεί να στείλει μια κεφαλίδα Retry-After που λέει πόσο να περιμένετε πριν δοκιμάσετε ξανά. Οι σωστοί clients και τα scripts τη σέβονται και κάνουν πίσω.
451 Unavailable for Legal Reasons
Το 451 επιστρέφεται όταν ο server υποχρεούται νομικά να μπλοκάρει την πρόσβαση σε έναν πόρο, για παράδειγμα μετά από δικαστική απόφαση.
Από το αρχείο του blog της EuroVPS, πρώτη δημοσίευση 12 Δεκεμβρίου 2017.
Όλες οι σημειώσεις