Kod odpowiedzi HTTP
ważność krytycznamierzonysposób http
Kod odpowiedzi serwera (200 OK, 5xx błąd, nieoczekiwany 3xx). Pierwsze źródło prawdy o dostępności aplikacji.
WIKI
artykuł z 16.09.2026 · źródeł 10Kod odpowiedzi HTTP (ang. HTTP status code) to parametr monitoringu stron internetowych, który rejestruje trzycyfrowy kod zwrócony przez serwer w odpowiedzi na żądanie sondy i na jego podstawie przypisuje stronie stan: poprawna odpowiedź (200 OK), błąd serwera (klasa 5xx), nieoczekiwane przekierowanie (klasa 3xx) albo odmowa dostępu lub brak zasobu (klasa 4xx) [1]. Kod z klasy 2xx nie gwarantuje jednak, że zwrócona treść jest poprawna [5].
Jak działa
Specyfikacja HTTP definiuje kod stanu jako trzycyfrową liczbę całkowitą, której pierwsza cyfra wyznacza klasę odpowiedzi [1]. Klas jest pięć: 1xx (informacyjne, żądanie odebrano i przetwarzanie trwa), 2xx (powodzenie), 3xx (przekierowanie, potrzebne jest dalsze działanie), 4xx (błąd klienta) oraz 5xx (serwer nie zdołał obsłużyć poprawnego żądania) [1] [4]. Klient, który nie rozpoznaje konkretnego kodu, powinien traktować go jak kod x00 z tej samej klasy [1].
Między sondą a aplikacją często działa pośrednik: sieć CDN, odwrotne proxy lub bramka. Kod może wtedy pochodzić z innej warstwy niż sama aplikacja. Według RFC 9110 kod 502 oznacza, że brama lub proxy otrzymała nieprawidłową odpowiedź od serwera, do którego przekazała żądanie, a 504, że nie otrzymała odpowiedzi w wymaganym czasie [1].
Sam kod nie wystarcza do oceny, czy strona działa. Dokumentacja WordPressa opisuje sytuację, w której błędy PHP lub bazy danych kończą się pustym ekranem bez żadnej informacji, nazywanym białym ekranem śmierci (WSOD) [6]. Google oznacza jako „soft 404” adresy, które zwracają kod z klasy 2xx, a ich treść wskazuje na błąd, na przykład pustą stronę lub komunikat o błędzie; kod 2xx nie gwarantuje też indeksowania [5]. Z tego powodu kod odpowiedzi uzupełnia się osobnym parametrem weryfikującym treść strony.
Standardy i specyfikacje
Znaczenie kodów definiuje RFC 9110 (HTTP Semantics), a oficjalny wykaz prowadzi IANA w rejestrze „Hypertext Transfer Protocol (HTTP) Status Code Registry”; nowe wpisy przechodzą procedurę IETF Review [3]. Kod 429 Too Many Requests wprowadził RFC 6585 z kwietnia 2012 roku. Oznacza on, że użytkownik wysłał zbyt wiele żądań w określonym czasie, a odpowiedź może zawierać nagłówek Retry-After; specyfikacja nie określa, jak serwer identyfikuje użytkownika ani jak liczy żądania [2].
Z punktu widzenia monitoringu najważniejsze są następujące kody:
- 200 OK: treść odpowiedzi jest reprezentacją żądanego zasobu [1].
- 301 i 308: przekierowania trwałe; 302 i 307: tymczasowe. Kody 307 i 308 zachowują metodę żądania [1]. Roboty Google podążają za najwyżej 10 kolejnymi przekierowaniami, trwałe traktują jako silny sygnał, a tymczasowe jako słaby [5].
- 403 Forbidden: serwer odmawia obsłużenia żądania; 404 Not Found: serwer nie znalazł zasobu [1]. Serwer może też odpowiedzieć 404 zamiast 403, aby ukryć istnienie zasobu [4].
- 500 Internal Server Error: ogólny błąd serwera [1].
- 502 Bad Gateway i 504 Gateway Timeout: błędy pośrednika opisane wyżej [1].
- 503 Service Unavailable: chwilowe przeciążenie lub planowana konserwacja. Serwer może wysłać
Retry-Afterz datą HTTP albo liczbą sekund [1]. Takich odpowiedzi zwykle nie należy buforować [4].
Cloudflare zwraca własne kody z zakresu 52x, między innymi 520 (serwer WWW zwrócił nieznany błąd), 521 (serwer WWW nie działa), 522 (przekroczony czas połączenia), 524 (przekroczony czas oczekiwania), 525 (nieudane uzgadnianie SSL) i 526 (nieprawidłowy certyfikat SSL) [9]. Nie są to kody standardowe: w rejestrze IANA zakres 512–599 pozostaje nieprzydzielony [3], więc klient, który ich nie zna, potraktuje je jak 500 [1].
Zagrożenia i skutki
Awaria aplikacji. Po błędzie krytycznym PHP WordPress wyświetla komunikat „There has been a critical error on this website” i kończy działanie funkcją wp_die() z kodem 500. Gdy witryna przechodzi w tryb odzyskiwania (recovery mode), komunikat o tym informuje, a w instalacji z jedną witryną odsyła do skrzynki e-mail administratora [7]. Wśród przyczyn błędów krytycznych dokumentacja wymienia konflikty wtyczek, niezgodność motywu lub wersji PHP, limity pamięci i uszkodzone pliki, a jako najczęstszą przyczynę błędu „Internal Server Error” uszkodzony plik .htaccess [6].
Konserwacja podczas aktualizacji. Po aktualizacji odwiedzający mogą zobaczyć komunikat „Briefly unavailable for scheduled maintenance”, który pozostaje, gdy plik .maintenance nie zostanie usunięty z katalogu głównego witryny [6]. Funkcja wp_maintenance() wysyła ten komunikat z kodem 503 i nagłówkiem Retry-After: 600 [8].
Widoczność w wyszukiwarce. Kody 5xx oraz 429 powodują, że roboty Google tymczasowo spowalniają pobieranie stron; kod 429 jest traktowany jako sygnał przeciążenia serwera, czyli błąd serwera. Adresy, które trwale zwracają błąd serwera, są usuwane z indeksu, a treści z adresów zwracających kody 4xx Google nie wykorzystuje [5].
Fałszywe alarmy. Zapory aplikacyjne (WAF) odmawiają dostępu żądaniom pasującym do reguł, co może dotyczyć także sond monitoringu. W Cloudflare akcja Block zwraca domyślnie kod 403, a w regułach ograniczania liczby żądań kod 429; od planu Pro kod odpowiedzi można zmienić. Wyzwanie JavaScript ma zatrzymywać boty, podczas gdy przeglądarki mogą je rozwiązać automatycznie [10]. Kod 403 lub 429 otrzymany przez sondę nie oznacza więc sam w sobie, że strona jest niedostępna dla odwiedzających.
Przykłady
| Kod | Znaczenie wg RFC | Typowa przyczyna na stronie WordPress |
|---|---|---|
| 200 | żądanie obsłużone, treść reprezentuje zasób [1] | strona działa; treść może mimo to wskazywać błąd (soft 404) [5] |
| 301 / 308 | przekierowanie trwałe [1] | trwałe przeniesienie adresu, dla Google silny sygnał [5] |
| 302 / 307 | przekierowanie tymczasowe [1] | tymczasowe przeniesienie adresu, dla Google słaby sygnał [5] |
| 403 | serwer odmawia obsłużenia żądania [1] | blokada żądania przez WAF (akcja Block) [10] |
| 404 | serwer nie znalazł zasobu [1] | adres nie istnieje albo serwer ukrywa zasób zamiast 403 [4] |
| 429 | zbyt wiele żądań w określonym czasie [2] | reguła ograniczania liczby żądań w WAF [10] |
| 500 | ogólny błąd serwera [1] | błąd krytyczny PHP [7], uszkodzony .htaccess [6] |
| 502 | pośrednik otrzymał nieprawidłową odpowiedź [1] | serwer za proxy lub CDN zwrócił niepoprawną odpowiedź [1] |
| 503 | chwilowe przeciążenie lub konserwacja [1] | aktualizacja z plikiem .maintenance [6], Retry-After: 600 [8] |
| 504 | pośrednik nie otrzymał odpowiedzi na czas [1] | serwer za proxy lub CDN odpowiada zbyt wolno [1] |
| 520–526 | brak w RFC 9110 i w rejestrze IANA [3] | kody Cloudflare, np. serwer WWW nie działa lub przekroczony czas [9] |
- [1] RFC 9110 — HTTP Semantics · IETF
- [2] RFC 6585 — Additional HTTP Status Codes · IETF
- [3] Hypertext Transfer Protocol (HTTP) Status Code Registry · IANA
- [4] HTTP response status codes · MDN Web Docs (Mozilla)
- [5] How HTTP status codes affect Google's crawlers · Google Search Central
- [6] Common WordPress Errors · WordPress.org
- [7] WP_Fatal_Error_Handler::display_default_error_template() · WordPress Developer Resources
- [8] wp_maintenance() · WordPress Developer Resources
- [9] Cloudflare 5xx errors · Cloudflare
- [10] Actions — Rules language · Cloudflare
STATS
wyniki z systemu · tylko liczby zbiorcze- Stron zmierzonych
- 204w ostatnim dniu pomiaru
- OK
- 304odczytów
- Fail
- 40odczytów
- Nie dało się sprawdzić
- 0timeout, blokada, limit zapytań
- Udział fail
- 11,6%bez „nie dało się”
- Stron łącznie
- 206choć jeden odczyt
- OK
- 1767odczytów
- Fail
- 197odczytów
- Nie dało się sprawdzić
- 2timeout, blokada, limit zapytań
- Udział fail
- 10,0%bez „nie dało się”
| Dzień | fail | nie dało się sprawdzić | ok |
|---|---|---|---|
| 23.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 24.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 25.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 26.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 27.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 28.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 29.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 30.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 31.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 01.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 02.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 03.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 04.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 05.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 06.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 07.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 08.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 09.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 10.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 11.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 12.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 13.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 14.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 15.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 16.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 17.09.2026 | 29 odczytów | 0 odczytów | 177 odczytów |
| 18.09.2026 | 30 odczytów | 0 odczytów | 176 odczytów |
| 19.09.2026 | 67 odczytów | 2 odczyty | 561 odczytów |
| 20.09.2026 | 31 odczytów | 0 odczytów | 549 odczytów |
| 21.09.2026 | 40 odczytów | 0 odczytów | 304 odczyty |
- Otwarte teraz
- 39stron: 39 · w okresie łaski: 7
- Nowe w ostatnim dniu
- 921.09.2026
- Otwarte od początku
- 184stron: 95
- Zamknięte
- 138od początku
- Mediana trwania
- 5 h 59 minod wykrycia do zamknięcia
| Ustalenie | Skutek | Otwarte teraz | Łącznie | Zamknięte |
|---|---|---|---|---|
| Odpowiedź HTTP http | DOWN | 39 | 184 | 138 |
| Dzień | nowe ustalenia |
|---|---|
| 23.08.2026 | 6 ustaleń |
| 24.08.2026 | 1 ustalenie |
| 25.08.2026 | 4 ustalenia |
| 26.08.2026 | 3 ustalenia |
| 27.08.2026 | 2 ustalenia |
| 28.08.2026 | 2 ustalenia |
| 29.08.2026 | 1 ustalenie |
| 30.08.2026 | 3 ustalenia |
| 31.08.2026 | 3 ustalenia |
| 01.09.2026 | 7 ustaleń |
| 02.09.2026 | 1 ustalenie |
| 03.09.2026 | 1 ustalenie |
| 04.09.2026 | 2 ustalenia |
| 05.09.2026 | 2 ustalenia |
| 06.09.2026 | 20 ustaleń |
| 07.09.2026 | 2 ustalenia |
| 08.09.2026 | 4 ustalenia |
| 09.09.2026 | 15 ustaleń |
| 10.09.2026 | 0 ustaleń |
| 11.09.2026 | 0 ustaleń |
| 12.09.2026 | 0 ustaleń |
| 13.09.2026 | 0 ustaleń |
| 14.09.2026 | 0 ustaleń |
| 15.09.2026 | 0 ustaleń |
| 16.09.2026 | 0 ustaleń |
| 17.09.2026 | 13 ustaleń |
| 18.09.2026 | 2 ustalenia |
| 19.09.2026 | 7 ustaleń |
| 20.09.2026 | 0 ustaleń |
| 21.09.2026 | 9 ustaleń |
- Przebiegów
- 60sposób http
- W 30 dni
- 60przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- 20461 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 16.09.2026| Obszar i ważność | Dostępność · krytyczna (D03) |
|---|---|
| Workflow i częstotliwość | creato_ping_avail_v2 działa na LAB247cron co 24 h, osobno T1–T4 · Strony w stanie DOWN i WARNING dostają dodatkowy odczyt co 6 h (timer availability_recheck poza n8n). Od 2026-09-16 sposób ssl daje odczyt ssl_expiry (dni do wygaśnięcia certyfikatu); od 2026-09-17 odczyty trafiają do check_results. |
| Sonda i helper | sposób http · CREATO_PING/helpers/http_check.py |
| Testy |
|
| Typ wyniku | enum: ok / fail / timeout + kod HTTP, rozmiar odpowiedzi, adres końcowy |
| Jednostka | kod HTTP; czas w ms |
| Próg i reguła | Timeout odpowiedzi 5,0 s, połączenia 2,0 s. Reguła kodu: 200 ≤ kod < 400. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/http_check.py → _classifyCREATO_PING/helpers/common.py → BLOCK_LIKE_STATUSESCREATO_PING/helpers/config.py → TIMEOUTS["http"] |
| Retencja odczytów | Każdy odczyt w tabeli check_results bazy LAB247; kod LAB247 tej tabeli nie czyści. Polityki retencji nikt jeszcze nie ustalił. |
| Karta przepisana z | CREATO_PING/helpers/http_check.py · CREATO_PING/helpers/common.py · CREATO_PING/helpers/config.py · CREATO_PING/helpers/site_params.py · odczyt 16.09.2026 |
1. fail = ustalenie w okresie łaski (IN PROGRESS, bez alertu). 2. fail z rzędu = ustalenie otwarte i status strony DOWN — sprawdzenie należy do krytycznych (tcp, dns, http, ssl). Wyjątki bijące DOWN: BLOKADA (strona odpowiada z innych lokalizacji, zablokowane jest IP monitoringu) i CONFIG (działa tylko jedna forma adresu). Pierwszy odczyt ok zamyka ustalenie.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Odpowiedź HTTPhttp | Wysokie | Ewidentne | DOWN | tak / tak | Sprawdź logi serwera i PHP, ostatnie aktualizacje wtyczek. |
LOOP
pętli: 3Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Sygnał: Strony za WAF-em albo wtyczką bezpieczeństwa zwracały sondzie 403/429, a działały dla ludzi — fałszywe DOWN. · dotyczy też: Weryfikacja treści, Przekierowanie HTTP → HTTPS
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek potwierdził, że strona działa w przeglądarce
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionedruga próba z UA przeglądarki
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-19 | Przy kodzie 403, 406, 415, 429 albo 451 sprawdzenie ponawia żądanie z UA przeglądarki; 2xx/3xx za drugim razem = ok (w przekierowaniu: adres końcowy na https).helpers/common.py · helpers/http_check.py · helpers/content_check.py · helpers/redirect_check.py | Blokada robotów na poziomie aplikacji nie jest niedostępnością strony. | cały system Ta sama reguła obowiązuje w weryfikacji treści — oba sprawdzenia czytają BLOCK_LIKE_STATUSES z common.py. | 343b699bez replayubez zapisu zatwierdzenia |
Sygnał: Strona wisiała na DOWN, choć działała: hosting klienta zbanował IP serwera monitoringu (SYN porzucany, nie odrzucany) po serii automatycznych odpytań. · dotyczy też: Połączenie TCP, SSL: ważność certyfikatu
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręczniedostępność potwierdzona z innych lokalizacji
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionezewnętrzny cross-check i nowy status strony
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-19 | Timeout TCP/HTTP z naszego serwera sprawdzany z zewnątrz; odpowiedź z innych lokalizacji = status BLOKADA zamiast DOWN.helpers/network_block_check.py · helpers/site_params.py | Blokada sieciowa monitoringu to inny mechanizm niż blokada UA — działa poniżej HTTP. | cały system Nowy status strony w kolejności pierwszeństwa, nad DOWN — zmienia status każdej strony, nie tylko tego parametru. | 8c0c0c6bez replayubez zapisu zatwierdzenia |
Sygnał: Adres bez www odpowiadał 200, a forma z www miała certyfikat samopodpisany — silnik eskalował to do DOWN. · dotyczy też: Połączenie TCP, Rozwiązywanie DNS, SSL: ważność certyfikatu, Przekierowanie www ↔ bez www
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieużytkownicy widzą sprawną stronę, więc alarm był fałszywy
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionesprawdzenie częściowej dostępności i status CONFIG
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-08-04 | Częściowa dostępność (jedna forma 200, druga zepsuta) daje status CONFIG, który bije DOWN.helpers/site_params.py · helpers/partial_availability_check.py | Błąd konfiguracji do naprawy to nie awaria; realny DOWN zostaje, gdy nie odpowiada żadna forma. | cały system Nowy status strony nad DOWN; dotyczy wszystkich sprawdzeń krytycznych (tcp, dns, http, ssl). | 091e318bez replayubez zapisu zatwierdzenia |