Плохой запрос Ваш браузер отправил запрос, который этот сервер не мог понять

Хотя я ни в коем случае не являюсь экспертом в Ubuntu, у меня два сервера работают без проблем.

Прошлой ночью при попытке получить доступ к локальному веб-сайту на одном из них я получил ошибку:

**Bad Request**
Your browser sent a request that this server could not understand.
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.

После нескольких часов разочарования и безуспешности я перестроил сервер. Во время установки Ubuntu я пошел на другой сервер и получил точно такую же ошибку. Первый сервер был теперь восстановлен, и он показывает ту же ошибку.

Я выключил каждый компьютер в сети. Выключил роутер и начал заново.

В дополнение к двум серверам сеть состоит из трех компьютеров с Windows и рабочего стола Ubuntu.

Я пытался изолировать машины от Интернета, я пробовал как проводных, так и беспроводных клиентов.

Переход на локальный сервер на серверах отображает страницу Ubuntu Apache Default.

Единственное, что произошло во время возникновения проблемы, было то, что Windows решила выключить эту машину для обновления. Я не понимаю, как это могло вызвать проблемы, но я изолировал эту машину от сети, и проблема существует.

Я удалил куки, использовал пять разных браузеров, и все они сообщали об одной и той же ошибке. У меня почти нет идей, и я ищу любые предложения.

Ответ 1

В моем случае это фактически подчеркивание _ в DocumentRoot, что вызывает проблемы и часы отладки. Все работает нормально, как только я удалю его из моего пути DocumentRoot.

Ответ 2

Это связано с обновлением RFC 3986, в котором утверждается, что подчеркивания небезопасны в именах серверов виртуальных хостов и других элементах. В моем случае я не мог изменить имя URL-адреса, поэтому я просто допустил это подчеркивание, включив эти небезопасные URL-адреса. Для этого просто добавьте небезопасные HttpProtocolOptions в файл httpd.conf.

https://httpd.apache.org/docs/2.4/mod/core.html#httpprotocoloptions

Ответ 3

Для новых версий httpd не поддерживаются Hyphens в URL-адресе, в этом случае вам нужно добавить HttpProtocolOptions в файл httpd.conf, он отлично работает после этого.

Ответ 4

Хорошо, я на 99,99% уверен, что нашел проблему с помощью Capsule. Ключом к успеху было изменение уровня ошибки Apache для отладки. Это дало мне отправную точку, а оттуда немного проб и ошибок, и все было хорошо.

У меня было два сервера B777 и B767, которые я использовал для локальной разработки. для веб-сайтов разработки я использовал что-то вроде www.something.767 и www.something.777. Все сайты были указаны в файле hosts.

В течение нескольких лет это работало отлично. По какой-то причине я, возможно, никогда не пойму, прошлым вечером, я начал получать вышеупомянутую ошибку на обоих серверах и на другой, которую я построил этим вечером.

Похоже, что проблема заключалась в использовании номеров в доменном имени. Как только я сменил доменное имя с сайта www.something.767 на www.something.local(или, по-видимому, на любые другие нецифровые персонажи), все было в порядке.

Ответ 5

Мне пришлось удалить подчеркивание (_) из директивы ServerName, а также имя хоста в /etc/hosts.

Тем не менее, подчеркивание в DocumentRoot просто отлично.

Таким образом, соответствующая строка в /etc/hosts выглядит так:

127.0.0.1       mycoolsite.localhost

И соответствующий блок в /etc/apache2/extra/httpd-vhosts.conf выглядит так:

<VirtualHost *:80>
    DocumentRoot "/Users/satoshi/Sites/my_cool_site"
    ServerName mycoolsite.localhost
    ErrorLog "/private/var/log/apache2/my_cool_site.localhost-error_log"
    CustomLog "/private/var/log/apache2/my_cool_site.localhost-access_log" common
</VirtualHost>

Не забудьте запустить apachectl restart после внесения изменений.

Ответ 6

Эта ошибка преследовала меня в течение нескольких дней, пока я, наконец, не получил ее.

В моем случае я делал CURL для URL с пустым пространством в конце. Ты можешь в это поверить? Удаление места было достаточно, чтобы нормально работать.

Ответ 7

В Docker Compose, если вы используете сеть, которая позволяет вам использовать имена контейнеров в качестве URL-адресов/хостов для связи туда и обратно, вам нужно убедиться, что вы не используете подчеркивания в имени (для ответа Nero).

Это заняло у меня целую вечность для отладки, поэтому я включил исходный текст ошибки ниже, чтобы, надеюсь, Google передал этот вопрос следующему человеку, пытающемуся исправить скручивание в сети докера.

400 Bad Request Bad Request

Ваш браузер отправил запрос, который этот сервер не может понять.

Кроме того, при попытке использовать ErrorDocument для обработки запроса возникла ошибка 400 Bad Request.

Ответ 8

Попробуйте проверить свой URL еще раз. Может быть, отсутствует слеш. :-)