Помилка 400 Bad Request через проксі
Сервер вважає, що запит складено неправильно, і не обробляє його. Відповісти так може і проксі, і сайт — шукати причину треба в різних місцях.
Оновлено · Редакція Prokso
- Код 400 означає неправильно складений запит: його може надіслати і проксі, і сайт
- Найчастіше протокол не відповідає порту: 823 для HTTP, 824 для SOCKS5
- Перевірте пару порт і протокол, потім скопіюйте рядок проксі з особистого кабінету заново
Що означає помилка
Код 400 означає, що сервер не може або не хоче обробити запит через помилку на боці клієнта: неправильний синтаксис, зламана структура повідомлення, недопустимі заголовки. Так його описує стандарт HTTP (RFC 9110) і довідник MDN.
Через проксі цей код може надіслати сам проксі. У таблиці кодів Prokso 400 означає, що проксі отримав запит неправильного формату: найчастіше програма звертається не до того порту або не тим протоколом.
Якщо проксі запит прийняв і передав далі, 400 повертає вже сайт. Тоді проксі тут ні до чого: сайту не сподобався сам запит — адреса, заголовки, cookies або тіло.
Причини
- Протокол не відповідає порту. Порт 823 приймає HTTP, порт 824 — SOCKS5. Якщо програма говорить SOCKS5 із портом 823, проксі отримує незрозумілі для себе дані.
- Рядок проксі зіпсований. Зайвий пробіл, лапки, обрізаний пароль або неправильний порядок частин — програма формує запит, який проксі не розбирає.
- Завеликі заголовки або cookies. Сервери обмежують розмір заголовків. Наприклад, nginx відповідає 400, коли окремий заголовок не вміщується у відведений буфер.
- Неправильно закодована адреса. Пробіли, кирилиця або спецсимволи в URL без кодування, подвоєні знаки «?» і «&».
- Тіло не відповідає заголовкам. Content-Type каже JSON, а надсилається форма; Content-Length не збігається з реальним розміром.
Як виправити
- Перевірте пару «порт — протокол»: 823 для HTTP, 824 для SOCKS5, порти 10000–20000 — фіксований IP для обох протоколів. Докладніше про протоколи — на сторінці SOCKS5-проксі.
- Скопіюйте рядок проксі з кабінету заново й за потреби приведіть його до потрібного формату в конвертері формату проксі.
- Якщо помилку показує браузер на конкретному сайті, очистьте cookies цього сайту й відкрийте сторінку знову.
- У скрипті закодуйте параметри адреси штатними засобами бібліотеки, а не склеюйте рядок вручну.
- Порівняйте заголовки й тіло з тим, що чекає сайт або його 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 ГБ
Реєстрація за хвилину, доступи одразу після оплати.