Szybka odpowiedź
Co oznacza 504 Gateway Timeout w kontekście proxy?
504 Gateway Timeout oznacza, że gateway, np. proxy lub CDN strony, czekał za długo na kolejny serwer i się poddał. Przy residential proxy CrawlRelay wolne ogniwo to zwykle cel lub domowe łącze wyjścia. Ponów raz na nowym wyjściu, utrzymuj lekkie strony i ustaw własne timeouty klienta, by wolne żądanie zakończyło się na Twoich warunkach.
504 Gateway Timeout w skrócie
| Błąd | 504 Gateway Timeout |
|---|---|
| Typ | Kod HTTP (5xx, błąd serwera) |
| Wysłane przez | Proxy gateway lub CDN przed celem |
| Zdefiniowano w | RFC 9110, section 15.6.5 |
| Spróbować ponownie? | Tak, raz lub dwa razy na nowym wyjściu |
| Najpierw sprawdź | Zmierz ten sam request bez proxy |
Co oznacza 504 Gateway Timeout?
RFC 9110 definiuje 504 jako gateway, który nie otrzymał na czas odpowiedzi od serwera upstream, którego potrzebował. To timeout-owy brat błędu 502: 502 to zła odpowiedź, 504 to brak odpowiedzi na czas.
Proxy residential dodaje dodatkowy skok, którego nie ma bezpośrednie żądanie: ruch idzie do bramki, potem do domowego łącza, potem do strony. Każdy skok dodaje opóźnienie, a najwolniejszy decyduje o czasie całkowitym.
Jak wygląda a 504 w Python, curl, Node.js i przeglądarkach?
Ten sam błąd wyświetla się inaczej w każdym narzędziu. Oto komunikaty, które warto wyszukać w logach:
- Python requests:
status_code == 504, lubTunnel connection failed: 504 Gateway Timeoutdla HTTPS - curl:
curl: (56) CONNECT tunnel failed, response 504 - Scrapy: domyślnie ponawia (504 jest w
RETRY_HTTP_CODES) - Strony serwowane przez CDN: strona błędu CDN ze statusem 504
Co powoduje a 504?
Najczęściej na początku:
- Wolny cel, np. strona wyszukiwania budująca się długo.
- Wolne wyjście, np. słabe łącze domowe lub zatłoczona komórka.
- Duże odpowiedzi, które zajmują więcej czasu niż cierpliwość gateway.
- Timeout serwera oryginalnego stronicy za CDN, który wtedy odpowiada 504.
Jak krok po kroku zdiagnozować a 504?
- Zmierz request bez proxy. Jeśli w domu też jest wolno, to cel jest wolny.
- Ponów na nowym wyjściu i porównaj czasy.
- Sprawdź rozmiar odpowiedzi: 5 MB to inny problem niż 50 KB.
- Przeczytaj treść, aby zobaczyć, czy stronę błędu wygenerował CDN czy proxy.
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL
# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URLJak naprawić a 504?
- Ustaw jawne timeouty: około 10 sekund na połączenie i 30–60 sekund na odczyt dla zwykłych stron.
- Ponów na nowym wyjściu raz lub dwa razy.
- Żądaj mniej: pomiń obrazki i multimedia, jeśli potrzebujesz tylko HTML lub JSON API za stroną.
- Planuj ciężkie strony na godziny poza szczytem dla kraju celu.
import httpx
proxy = "http://USERNAME:[email protected]:7777"
timeout = httpx.Timeout(connect=10.0, read=30.0, write=10.0, pool=10.0)
with httpx.Client(proxy=proxy, timeout=timeout) as client:
try:
r = client.get("https://api.ipify.org")
print(r.status_code, r.text)
except httpx.TimeoutException as exc:
print("timed out:", type(exc).__name__) # ConnectTimeout, ReadTimeout...Czy warto ponawiać próbę po a 504?
Ponów próbę 504 raz lub dwa razy na świeżym wyjściu, z krótką przerwą. Jeśli ten sam URL przekracza limit czasu na kilku wyjściach, cel jest wolny lub przeciążony: zmniejsz częstotliwość zapytań do tego hosta lub spróbuj później. Zwiększenie limitu czasu klienta pomaga tylko wtedy, gdy limit bramki nie jest przyczyną.
Jak 504 Gateway Timeout odnosi się do CrawlRelay?
Każde nowe połączenie do CrawlRelay bez ID sesji zwykle trafia na inne mieszkanie wyjściowe, więc ponowne próby to test innego połączenia domowego. Dla wolnych celów zachowuj małe ładunki i mierz czas do pierwszego bajtu osobno od całkowitego czasu pobierania.
Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS przez CONNECT) i port 7778 (SOCKS5). Format nazwy użytkownika: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Powiązane: 502 Bad Gateway · Read timed out · 503 Service Unavailable.
504 Gateway Timeout: pytania, które zadają deweloperzy
Jaka jest różnica między 502 a 504?
Oba pochodzą z bramki. 502 oznacza, że serwer za nią wysłał nieprawidłową odpowiedź lub zerwał połączenie. 504 oznacza, że nic nie wysłał w czasie. Przy residential proxy 502 często oznacza zerwane wyjście, a 504 wolny cel lub wolne połączenie domowe.
Czy mogę zwiększyć limit czasu proxy?
Kontrolujesz limity czasu klienta, nie wewnętrzne bramki. Ustaw wyraźnie limity nawiązywania i odczytu, aby wolne zapytania kończyły się przewidywalnie, ponawiaj na nowym wyjściu i upraszczaj strony. Jeśli cel potrzebuje bardzo długich odpowiedzi, pobierz jego API lub lżejszą stronę.
Czy mobilne proxy są wolniejsze od residential?
Mogą, ponieważ mobilne wyjście dzieli sieć komórkową z innymi użytkownikami, a jego prędkość zmienia się wraz z sygnałem i obciążeniem. Używaj mobilnych IP do celów tego wymagających, a residential do masowego crawlignu. Mierz swoje czasy odpowiedzi według typu wyjścia, zanim zdecydujesz.
Inne błędy proxy w tym odniesieniu
Kody statusu HTTP
- 401 Unauthorized vs 407
- 403 Forbidden
- 407 Proxy Authentication Required
- 429 Too Many Requests
- 502 Bad Gateway
- 503 Service Unavailable
- 504 Gateway Timeout
Błędy w przeglądarce i kliencie
Błędy połączenia i TLS
Proxy rezydencjalne z dokumentacją opisującą przypadki błędów
CrawlRelay proxy rezydencjalne od 0,50 USD/GB, ruch, który nigdy nie wygasa.