Przekierowanie HTTP → HTTPS
ważność wysokamierzonysposób redirect
Czy http://domena.pl poprawnie przekierowuje na https://. Brak oznacza, że część użytkowników trafia na wersję nieszyfrowaną.
WIKI
artykuł z 16.09.2026 · źródeł 10Przekierowanie HTTP → HTTPS to parametr monitoringu stron internetowych, który sprawdza, czy żądanie wysłane na adres http:// domeny kończy się pod adresem https://. Pomiar podąża za kolejnymi przekierowaniami i ocenia adres końcowy. Możliwe wyniki to: przekierowanie na HTTPS, brak przekierowania (strona odpowiada przez nieszyfrowane HTTP), błąd połączenia albo brak odpowiedzi w wyznaczonym czasie. Rozróżnienie ma znaczenie, bo według RFC 9110 zasoby udostępniane w schemacie https nie mają wspólnej tożsamości ze schematem http i są osobnymi źródłami (ang. origins) [1].
Jak działa
Odpowiedź z klasy 3xx oznacza, że klient musi wykonać dodatkowe działanie, aby zrealizować żądanie [1]. Kody 301, 302, 307 i 308 wskazują, że zasób może być dostępny pod innym adresem, podanym w nagłówku Location [1]. Gdy odpowiedź zawiera ten nagłówek, przeglądarka może automatycznie powtórzyć żądanie pod nowym adresem, nawet jeśli nie rozpoznaje konkretnego kodu [1].
Kody różnią się trwałością i traktowaniem metody. Kody 301 i 308 oznaczają, że zasób dostał nowy stały adres i przyszłe odwołania powinny używać nowego [1]. Kody 302 i 307 oznaczają przeniesienie tymczasowe, po którym klient powinien dalej używać adresu pierwotnego [1]. Z przyczyn historycznych przeglądarka może po odpowiedzi 301 lub 302 zamienić metodę POST na GET; kody 307 i 308 dodano właśnie po to, by jednoznacznie zachować metodę [1]. Przy zwykłym otwarciu strony, czyli żądaniu GET, 301 i 308 dają ten sam efekt. Różnica wychodzi przy formularzach i interfejsach API, które wysyłają POST na adres http://.
Serwer, który otrzymuje żądanie przez niezabezpieczony kanał, powinien według RFC 6797 odpowiedzieć przekierowaniem stałym, np. 301, z adresem https w nagłówku Location [2]. Nagłówka Strict-Transport-Security nie wolno wysyłać w odpowiedzi przez HTTP [2], więc przeglądarka dostaje go dopiero z odpowiedzią po HTTPS i od tej pory sama zamienia adresy http na https, bez przekierowania [3]. Mechanizm opisuje osobny artykuł HSTS.
Poprawny łańcuch kończy się na jednej formie adresu. Google zaleca wybrać jeden z adresów, pod którymi strona jest dostępna, i przekierować ruch z pozostałych na adres preferowany [5].
Standardy i specyfikacje
- RFC 9110 definiuje klasę 3xx, nagłówek
Locationoraz znaczenie kodów 301, 302, 307 i 308 [1]. - RFC 6797 zaleca przekierowanie stałe z HTTP na HTTPS jako „SHOULD”, a nie „MUST”. Powodem są m.in. ryzyka przekierowań po stronie serwera i witryny z komponentami zewnętrznymi, które mogą przy nich działać niepoprawnie [2].
- Google Search Central: przy przekierowaniu stałym (301, 308) proces indeksowania używa go jako sygnału, że cel powinien być adresem kanonicznym, a przy tymczasowym (302, 307) nie [5]. Gdy adres strony w wynikach ma się zmienić, Google zaleca stałe przekierowanie po stronie serwera [5]. Przekierowanie jest silnym sygnałem kanoniczności [6], a Google preferuje stronę HTTPS przed jej odpowiednikiem HTTP [6].
- Lighthouse w audycie przekierowania zmienia adres strony na HTTP, wczytuje ją i czeka na zdarzenie oznaczające bezpieczną stronę. Brak zdarzenia w ciągu 10 sekund oznacza niezaliczony audyt [7]. Jako naprawę dokumentacja podaje przekierowanie na serwerze i link kanoniczny w nagłówku dokumentu HTML [7].
Zagrożenia i skutki
Pierwsze żądanie bez szyfrowania. Przekierowanie nie chroni samego pierwszego żądania. Gdy użytkownik wpisuje adres http:// albo otwiera taki link, a przeglądarka nie zna jeszcze polityki HSTS hosta, pierwsza wymiana idzie niezabezpieczonym kanałem i jest podatna na ataki [2]. MDN wskazuje tę samą słabość HSTS i podaje listę preload jako sposób jej ograniczenia [3]. Znanym przykładem jest atak SSL stripping, dla którego Moxie Marlinspike opublikował narzędzie typu man-in-the-middle o nazwie sslstrip [4].
Brak przekierowania. Strona dostępna jednocześnie pod http:// i https:// ma dwa osobne źródła [1], a wersja HTTP działa bez ochrony transportu. Dokumentacja Lighthouse przyjmuje, że każda witryna powinna być chroniona przez HTTPS [7].
Przekierowanie tymczasowe. Kody 302 i 307 nie wskazują adresu kanonicznego, więc w wynikach wyszukiwania może zostać adres źródłowy [5].
Łańcuch przez HTTP i sprzeczne sygnały. Google nie daje pierwszeństwa stronie HTTPS, gdy ma ona nieważny certyfikat, przekierowuje użytkownika do strony HTTP lub przez nią albo wskazuje wersję HTTP w rel="canonical" [6].
Szyfrowanie kończone na proxy. Gdy TLS kończy się na load balancerze lub reverse proxy, zmienna %{HTTPS} w Apache zawsze ma wartość off, nawet jeśli klient połączył się przez HTTPS [8]. Reguła oparta na tej zmiennej przekierowuje wtedy również żądania, które były już szyfrowane. Dokumentacja zaleca sprawdzanie nagłówka X-Forwarded-Proto, ale tylko wtedy, gdy administrator kontroluje proxy, bo nagłówek da się podrobić [8].
Przykłady
| Środowisko | Konfiguracja | Uwagi |
|---|---|---|
| Apache, host wirtualny portu 80 | Redirect permanent "/" "https://www.example.com/" | podejście zalecane, bez mod_rewrite [8] |
Apache, plik .htaccess | RewriteCond "%{HTTPS}" !=on i RewriteRule "^(.*)" "https://%{SERVER_NAME}$1" [R=301,L] | gdy brak dostępu do głównej konfiguracji; R=301 to przekierowanie stałe [8] |
| Apache za proxy TLS | RewriteCond "%{HTTP:X-Forwarded-Proto}" =http [NC] | zamiast %{HTTPS}, które za proxy zawsze jest off [8] |
| Apache z klientem ACME | wyjątek dla /.well-known/acme-challenge/ przed regułą | walidacja domeny przez zwykłe HTTP [8] |
| nginx | osobny blok server z return 301 i zmienną $request_uri | dokumentacja nazywa to właściwym sposobem zamiast if z rewrite; jej przykład dotyczy nazwy hosta [9] |
| WordPress | stałe WP_HOME i WP_SITEURL z https:// w wp-config.php | nadpisują wartości home i siteurl z tabeli wp_options, nie zmieniając bazy [10] |
- [1] RFC 9110 — HTTP Semantics · IETF
- [2] RFC 6797 — HTTP Strict Transport Security (HSTS) · IETF
- [3] Strict-Transport-Security header · MDN Web Docs
- [4] sslstrip — README · Moxie Marlinspike
- [5] Redirects and Google Search · Google Search Central
- [6] How to specify a canonical URL with rel="canonical" and other methods · Google Search Central
- [7] Does not redirect HTTP traffic to HTTPS — Lighthouse · Chrome for Developers
- [8] Redirecting and Remapping with mod_rewrite — Apache HTTP Server 2.4 · Apache Software Foundation
- [9] Converting rewrite rules · nginx
- [10] Editing wp-config.php — Advanced Administration Handbook · WordPress.org
STATS
wyniki z systemu · tylko liczby zbiorcze- Stron zmierzonych
- 204w ostatnim dniu pomiaru
- OK
- 291odczytów
- Fail
- 47odczytów
- Nie dało się sprawdzić
- 6timeout, blokada, limit zapytań
- Udział fail
- 13,9%bez „nie dało się”
- Stron łącznie
- 206choć jeden odczyt
- OK
- 1690odczytów
- Fail
- 246odczytów
- Nie dało się sprawdzić
- 30timeout, blokada, limit zapytań
- Udział fail
- 12,7%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 | 39 odczytów | 1 odczyt | 166 odczytów |
| 18.09.2026 | 36 odczytów | 4 odczyty | 166 odczytów |
| 19.09.2026 | 85 odczytów | 13 odczytów | 532 odczyty |
| 20.09.2026 | 39 odczytów | 6 odczytów | 535 odczytów |
| 21.09.2026 | 47 odczytów | 6 odczytów | 291 odczytów |
- Otwarte teraz
- 52stron: 52 · w okresie łaski: 9
- Nowe w ostatnim dniu
- 921.09.2026
- Otwarte od początku
- 184stron: 107
- Zamknięte
- 123od początku
- Mediana trwania
- 6 h 0 minod wykrycia do zamknięcia
| Ustalenie | Skutek | Otwarte teraz | Łącznie | Zamknięte |
|---|---|---|---|---|
| Przekierowanie HTTP → HTTPS redirect | WARNING | 52 | 184 | 123 |
| Dzień | nowe ustalenia |
|---|---|
| 23.08.2026 | 4 ustalenia |
| 24.08.2026 | 0 ustaleń |
| 25.08.2026 | 5 ustaleń |
| 26.08.2026 | 2 ustalenia |
| 27.08.2026 | 2 ustalenia |
| 28.08.2026 | 1 ustalenie |
| 29.08.2026 | 1 ustalenie |
| 30.08.2026 | 3 ustalenia |
| 31.08.2026 | 3 ustalenia |
| 01.09.2026 | 2 ustalenia |
| 02.09.2026 | 1 ustalenie |
| 03.09.2026 | 0 ustaleń |
| 04.09.2026 | 0 ustaleń |
| 05.09.2026 | 0 ustaleń |
| 06.09.2026 | 19 ustaleń |
| 07.09.2026 | 1 ustalenie |
| 08.09.2026 | 1 ustalenie |
| 09.09.2026 | 13 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 | 20 ustaleń |
| 18.09.2026 | 2 ustalenia |
| 19.09.2026 | 15 ustaleń |
| 20.09.2026 | 1 ustalenie |
| 21.09.2026 | 9 ustaleń |
- Przebiegów
- 60sposób redirect
- 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ść · wysoka (D05) |
|---|---|
| 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 redirect · CREATO_PING/helpers/redirect_check.py |
| Testy |
|
| Typ wyniku | enum: ok / fail / timeout + adres końcowy, liczba przeskoków, znacznik długiego łańcucha, flaga ua_fallback |
| Jednostka | brak — wynik jakościowy (schemat adresu końcowego) |
| Próg i reguła | Timeout 7,0 s, limit 5 przekierowań — stałe w helperze, poza config.py. Reguła: adres końcowy zaczyna się od https://. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/redirect_check.py → _TIMEOUT, _MAX_REDIRECTSCREATO_PING/helpers/common.py → BLOCK_LIKE_STATUSESCREATO_PING/helpers/site_params.py → CRITICAL_CHECK_TYPES (redirect poza listą) |
| 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ł. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/redirect_check.py · CREATO_PING/helpers/common.py · CREATO_PING/helpers/site_params.py · CREATO_PING/helpers/availability_recheck.py · CREATO_PING/tools/avail_writer_input.py · LAB247/site/src/lib/ingest/apply.ts · odczyt 16.09.2026 |
1. fail albo timeout = okres łaski (IN PROGRESS, bez alertu). 2. fail z rzędu = ustalenie otwarte z etykietą WARNING — redirect nie jest sprawdzeniem krytycznym i nie daje DOWN. Pierwszy odczyt ok zamyka ustalenie.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Przekierowanie HTTP → HTTPSredirect | Wysokie | Ewidentne | WARNING | tak / nie | Popraw reguły przekierowań w .htaccess lub w panelu hostingu. |
LOOP
pętli: 1Trafnoś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ż: Kod odpowiedzi HTTP, Weryfikacja treści
- 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 |