Błąd 400 Bad Request przez proxy
Serwer uznaje, że żądanie jest źle zbudowane, i go nie przetwarza. Tak może odpowiedzieć zarówno proxy, jak i strona – przyczyny trzeba szukać w różnych miejscach.
Zaktualizowano · Redakcja Prokso
- Kod 400 oznacza źle zbudowane żądanie: może go wysłać zarówno proxy, jak i strona
- Najczęściej protokół nie pasuje do portu: 823 dla HTTP, 824 dla SOCKS5
- Sprawdź parę port i protokół, a potem skopiuj linię proxy z panelu klienta ponownie
Co oznacza błąd
Kod 400 oznacza, że serwer nie może lub nie chce przetworzyć żądania z powodu błędu po stronie klienta: nieprawidłowa składnia, uszkodzona struktura wiadomości, niedopuszczalne nagłówki. Tak opisuje go standard HTTP (RFC 9110) i dokumentacja MDN.
Przy pracy przez proxy ten kod może wysłać samo proxy. W tabeli kodów Prokso 400 oznacza, że proxy otrzymało żądanie w nieprawidłowym formacie: najczęściej program łączy się z niewłaściwym portem lub przez niewłaściwy protokół.
Jeśli proxy przyjęło żądanie i przekazało je dalej, 400 zwraca już strona. Wtedy proxy nie ma z tym nic wspólnego: stronie nie spodobało się samo żądanie – adres, nagłówki, pliki cookie lub treść.
Przyczyny
- Protokół nie pasuje do portu. Port 823 przyjmuje HTTP, port 824 – SOCKS5. Jeśli program mówi SOCKS5 do portu 823, proxy dostaje dane, których nie rozumie.
- Linia proxy jest uszkodzona. Zbędna spacja, cudzysłowy, ucięte hasło lub zła kolejność części – program buduje żądanie, którego proxy nie potrafi odczytać.
- Zbyt duże nagłówki lub pliki cookie. Serwery ograniczają rozmiar nagłówków. Na przykład nginx odpowiada 400, gdy pojedynczy nagłówek nie mieści się w przydzielonym buforze.
- Nieprawidłowo zakodowany adres. Spacje, cyrylica lub znaki specjalne w URL bez kodowania, podwójne znaki „?” i „&”.
- Treść nie pasuje do nagłówków. Content-Type mówi JSON, a wysyłany jest formularz; Content-Length nie zgadza się z faktycznym rozmiarem.
Jak to naprawić
- Sprawdź parę „port – protokół”: 823 dla HTTP, 824 dla SOCKS5, porty 10000–20000 – stały IP dla obu protokołów. Więcej o protokołach na stronie proxy SOCKS5.
- Skopiuj linię proxy z panelu klienta jeszcze raz i w razie potrzeby przekształć ją do wymaganego formatu w konwerterze formatu proxy.
- Jeśli błąd pokazuje przeglądarka na konkretnej stronie, wyczyść pliki cookie tej strony i otwórz ją ponownie.
- W skrypcie koduj parametry adresu standardowymi narzędziami biblioteki, zamiast sklejać ciąg ręcznie.
- Porównaj nagłówki i treść z tym, czego oczekuje strona lub jej API: typ zawartości, kodowanie, pola obowiązkowe.
Jak sprawdzić, czy działa
Sprawdź linię w sprawdzarce proxy. Jeśli tam proxy działa, a 400 przychodzi tylko z jednej strony, przyczyna leży w żądaniu do tej strony, a nie w połączeniu.
Diagnoza w 2 minuty
Najpierw wklej linię do sprawdzania proxy. Jeśli tam proxy działa, przyczyna leży w programie lub jego ustawieniach. Jeśli nie - sprawdź linię z terminala:
curl -v -x "http://LOGIN:HASŁO@gw.prokso.com:823" https://api.ipify.org
- Wiersz
< HTTP/1.1 407zaraz poCONNECToznacza, że odpowiada proxy. Nazwa po kodzie, na przykładNO_USER, wskazuje przyczynę. - Proxy odpowiedziało na
CONNECTkodem 200, a potem przyszedł inny kod - proxy działa, tę odpowiedź dała strona. - Brak odpowiedzi, tylko przekroczony czas - połączenie nie dotarło do proxy: sprawdź host, port i sieć.
Pytania i odpowiedzi (FAQ)
Jak ustalić, kto odpowiedział 400 – proxy czy strona?
Otwórz przez to samo proxy dowolną inną stronę, na przykład <a href="/pl/tools/my-ip">„Mój IP”</a>. Jeśli się otwiera, proxy przyjmuje żądania, a 400 zwraca konkretna strona.
Czy transfer jest naliczany za żądanie z odpowiedzią 400?
Transfer liczy się w obie strony, więc naliczane jest to, co faktycznie przeszło przez proxy: Twoje żądanie i krótka odpowiedź z błędem. Zwykle to zaledwie kilka kilobajtów.
Dlaczego strona otwiera się bez proxy, a przez proxy zwraca 400?
Najczęściej program buduje żądanie inaczej w tych dwóch trybach: inne nagłówki, inny protokół lub port. Porównaj ustawienia i upewnij się, że protokół pasuje do portu.
Inne błędy proxy
Rezydencjalne $1.59, mobilne $2.50, serwerowe $0.65 za 1 GB
Rejestracja w minutę, dostęp od razu po płatności.