Помилка 400 Bad Request через проксі

Сервер вважає, що запит складено неправильно, і не обробляє його. Відповісти так може і проксі, і сайт — шукати причину треба в різних місцях.

Оновлено · Редакція Prokso

Коротко
  • Код 400 означає неправильно складений запит: його може надіслати і проксі, і сайт
  • Найчастіше протокол не відповідає порту: 823 для HTTP, 824 для SOCKS5
  • Перевірте пару порт і протокол, потім скопіюйте рядок проксі з особистого кабінету заново

Що означає помилка

Код 400 означає, що сервер не може або не хоче обробити запит через помилку на боці клієнта: неправильний синтаксис, зламана структура повідомлення, недопустимі заголовки. Так його описує стандарт HTTP (RFC 9110) і довідник MDN.

Через проксі цей код може надіслати сам проксі. У таблиці кодів Prokso 400 означає, що проксі отримав запит неправильного формату: найчастіше програма звертається не до того порту або не тим протоколом.

Якщо проксі запит прийняв і передав далі, 400 повертає вже сайт. Тоді проксі тут ні до чого: сайту не сподобався сам запит — адреса, заголовки, cookies або тіло.

Хто повертає помилку: 407 — проксі, 401 і 403 — сам сайтВаша програмаПроксіgw.prokso.comСайт407 — відповідає проксі: логін, пароль або залишок трафіку401 / 403 — відповідає сайт: вхід на сайт або доступ
Хто повертає помилку: 407 — проксі, 401 і 403 — сам сайт

Причини

  • Протокол не відповідає порту. Порт 823 приймає HTTP, порт 824 — SOCKS5. Якщо програма говорить SOCKS5 із портом 823, проксі отримує незрозумілі для себе дані.
  • Рядок проксі зіпсований. Зайвий пробіл, лапки, обрізаний пароль або неправильний порядок частин — програма формує запит, який проксі не розбирає.
  • Завеликі заголовки або cookies. Сервери обмежують розмір заголовків. Наприклад, nginx відповідає 400, коли окремий заголовок не вміщується у відведений буфер.
  • Неправильно закодована адреса. Пробіли, кирилиця або спецсимволи в URL без кодування, подвоєні знаки «?» і «&».
  • Тіло не відповідає заголовкам. Content-Type каже JSON, а надсилається форма; Content-Length не збігається з реальним розміром.

Як виправити

  1. Перевірте пару «порт — протокол»: 823 для HTTP, 824 для SOCKS5, порти 10000–20000 — фіксований IP для обох протоколів. Докладніше про протоколи — на сторінці SOCKS5-проксі.
  2. Скопіюйте рядок проксі з кабінету заново й за потреби приведіть його до потрібного формату в конвертері формату проксі.
  3. Якщо помилку показує браузер на конкретному сайті, очистьте cookies цього сайту й відкрийте сторінку знову.
  4. У скрипті закодуйте параметри адреси штатними засобами бібліотеки, а не склеюйте рядок вручну.
  5. Порівняйте заголовки й тіло з тим, що чекає сайт або його API: тип вмісту, кодування, обов'язкові поля.

Як перевірити, що все запрацювало

Перевірте рядок у перевірці проксі. Якщо там проксі працює, а 400 приходить лише з одного сайту — причина в запиті до цього сайту, а не в підключенні.

Діагностика за 2 хвилини

Спершу вставте рядок у перевірку проксі. Якщо там проксі працює, причина в програмі чи її налаштуваннях. Якщо ні — перевірте рядок з терміналу:

curl -v -x "http://ЛОГІН:ПАРОЛЬ@gw.prokso.com:823" https://api.ipify.org
  • Рядок < HTTP/1.1 407 одразу після CONNECT — відповідає проксі. Назва після коду, наприклад NO_USER, підказує причину.
  • Проксі відповів на CONNECT кодом 200, а далі прийшов інший код — проксі працює, цю відповідь дав сайт.
  • Жодної відповіді, лише тайм-аут — з'єднання не дійшло до проксі: перевірте хост, порт і мережу.

Питання й відповіді

Як зрозуміти, хто відповів 400 — проксі чи сайт?

Відкрийте через той самий проксі будь-яку іншу сторінку, наприклад <a href="/tools/my-ip">«Мій IP»</a>. Якщо вона відкривається, проксі запити приймає, і 400 дає конкретний сайт.

Чи списується трафік за запит із відповіддю 400?

Трафік рахується в обидва боки, тож списується те, що реально пройшло через проксі: ваш запит і коротка відповідь з помилкою. Зазвичай це лічені кілобайти.

Чому сайт відкривається без проксі, а через проксі дає 400?

Найчастіше програма по-різному формує запит у цих двох режимах: інші заголовки, інший протокол чи порт. Порівняйте налаштування й переконайтеся, що протокол відповідає порту.

Резидентські $1.59, мобільні $2.50, серверні $0.65 за 1 ГБ

Реєстрація за хвилину, доступи одразу після оплати.

Створити акаунт