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.
Εντοπισμός πραγματικής βλάβης
- Κατάγραψε ώρα, path, καθαρισμένες παραμέτρους και request/correlation ID. Όχι κωδικούς, tokens ή προσωπικά δεδομένα.
- Σύνδεσε το request ID με τα δομημένα logs και τα exception details που βλέπουν μόνο οι υπεύθυνοι διαχείρισης.
- Έλεγξε έκδοση deployment, ρυθμίσεις περιβάλλοντος, εξαρτήσεις, migrations βάσης και όρια πόρων.
- Κάνε αναπαραγωγή στο staging με μη ευαίσθητα δεδομένα και πρόσθεσε regression test.
- Εμφάνισε στον χρήστη σταθερό, ασφαλές μήνυμα χωρίς stack trace και εσωτερικές πληροφορίες.
Client και επαναλήψεις
Σε JavaScript έλεγξε if (!response.ok) { /* χειρισμός status */ }. Μην επαναλαμβάνεις αυτόματα κάθε POST: το backend μπορεί να έχει αποθηκεύσει μέρος της πράξης πριν επιστρέψει 500. Χρησιμοποίησε idempotency keys όπου υποστηρίζονται και ξεχώρισε προσωρινή αστοχία από μόνιμο bug εφαρμογής.