DedSec Project

HTTP 500 — DedSec Project

HTTP 500 — σφάλμα διακομιστή με σωστή διάγνωση Περιβάλλον: web servers, reverse proxies, API backends και clients. Τι σημαίνει ο κωδικός Το HTTP 500 δηλώνει ότι ο server αντιμετώπισε…

HTTP 500 — σφάλμα διακομιστή με σωστή διάγνωση

Περιβάλλον: web servers, reverse proxies, API backends και clients.

Τι σημαίνει ο κωδικός

Το HTTP 500 δηλώνει ότι ο server αντιμετώπισε συνθήκη που τον εμπόδισε να εξυπηρετήσει το αίτημα. Δεν προσδιορίζει από μόνο του την αιτία. Διαφέρει από 404 (μη διαθέσιμο resource), 429 (περιορισμός ρυθμού) και 502/503 (συχνά πρόβλημα upstream ή διαθεσιμότητας). Η fetch() του browser μπορεί να εκπληρωθεί κανονικά με status 500, οπότε απαιτείται έλεγχος response.ok.

Ασφαλής τοπική προσομοίωση

Ο ακόλουθος server αποστέλλει σκόπιμα 500. Είναι προσομοίωση απόκρισης, όχι πραγματικό unhandled exception:

from http.server import BaseHTTPRequestHandler, HTTPServer

class Demo(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(500)
        self.send_header("Content-Type", "text/plain; charset=utf-8")
        self.end_headers()
        self.wfile.write(b"Internal failure")

HTTPServer(("127.0.0.1", 8766), Demo).serve_forever()

Σε δεύτερο τερματικό εκτέλεσε curl -i http://127.0.0.1:8766/. Αναμενόμενο: HTTP/1.0 500 Internal Server Error και μικρό κείμενο απόκρισης. Τερμάτισε με Ctrl-C. Η σύνδεση είναι μόνο στο loopback.

Εντοπισμός πραγματικής βλάβης

  1. Κατάγραψε ώρα, path, καθαρισμένες παραμέτρους και request/correlation ID. Όχι κωδικούς, tokens ή προσωπικά δεδομένα.
  2. Σύνδεσε το request ID με τα δομημένα logs και τα exception details που βλέπουν μόνο οι υπεύθυνοι διαχείρισης.
  3. Έλεγξε έκδοση deployment, ρυθμίσεις περιβάλλοντος, εξαρτήσεις, migrations βάσης και όρια πόρων.
  4. Κάνε αναπαραγωγή στο staging με μη ευαίσθητα δεδομένα και πρόσθεσε regression test.
  5. Εμφάνισε στον χρήστη σταθερό, ασφαλές μήνυμα χωρίς stack trace και εσωτερικές πληροφορίες.

Client και επαναλήψεις

Σε JavaScript έλεγξε if (!response.ok) { /* χειρισμός status */ }. Μην επαναλαμβάνεις αυτόματα κάθε POST: το backend μπορεί να έχει αποθηκεύσει μέρος της πράξης πριν επιστρέψει 500. Χρησιμοποίησε idempotency keys όπου υποστηρίζονται και ξεχώρισε προσωρινή αστοχία από μόνιμο bug εφαρμογής.