错误请求您的浏览器发送了此服务器无法理解的请求

时间:2017-05-11 21:15:39

标签: apache ubuntu

虽然我不是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桌面。

我尝试将机器与互联网隔离,我尝试过有线和无线客户端。

转到服务器上的localhost会显示Ubuntu Apache Default页面。

问题开始时唯一发生的事情是Windows决定关闭此计算机以进行更新。我不知道这是如何导致问题的,但我已将此机器与网络隔离,并且存在问题。

我清除了Cookie,使用了五种不同的浏览器,它们都报告了相同的错误。我想出了一些想法,并寻找任何建议。

8 个答案:

答案 0 :(得分:57)

就我而言,它实际上是DocumentRoot中的下划线 _ 导致问题和数小时的调试。一旦我从DocumentRoot路径中删除它,一切正常。

答案 1 :(得分:6)

对于较新的httpd版本,不支持URL中的连字符,在这种情况下,您必须将http不安全的HttpProtocolOptions添加到httpd.conf文件中,之后它可以正常工作。

答案 2 :(得分:4)

好的,我99.99%肯定在 Capsule 的帮助下找到了问题。成功的关键是将Apache的错误级别改为调试。这给了我一个起点,从那里得到了一些试验和错误,一切都很好。

我有两台服务器B777和B767用于本地开发。对于开发网站,我使用了像www.something.767和www.something.777这样的东西。所有站点都列在主机文件中。

几年来,这个工作得很好。出于某些原因,我可能永远不会理解,昨晚,我开始在服务器和我今晚建造的另一台服务器上得到上述错误。

似乎问题是在域名中使用数字。我一旦将域名从www.something.767更改为www.something.local(或者显然是任何其他非数字域名)一切都恢复正常了。

答案 3 :(得分:1)

我不得不从_指令中删除下划线(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

答案 4 :(得分:0)

This error haunted me for days, untill I finally got it.

In my case, I was making a CURL to an URL that has an empty space at the end. Can you believe it? Removing the space was enough to work fine.

答案 5 :(得分:0)

在Docker Compose中,如果使用允许您使用容器名称作为来回通信的url /主机的网络,则需要确保名称中不使用下划线(每个Nero's answer )。

这使我花了很多时间进行调试,因此,我再次在下面包括了初始错误文本,以便希望Google将这个问题提供给下一个尝试在docker网络上修复php curl的人。

  

400错误请求错误请求

     

您的浏览器发送了该服务器无法理解的请求。

     

此外,尝试使用ErrorDocument处理请求时遇到了400 Bad Request错误。

答案 6 :(得分:0)

对我来说,这个问题是Nginx服务器的上游后端定义包含一个下划线。我很难检测到,因为centos1centos是运行Nginx服务器的远程主机,而最后一个服务器是localhost httpd服务器。两个远程服务器可以很好地实现负载平衡,但是最后一个则不能,这使得很难弄清楚问题所在是_下划线。

之前

location / {
        proxy_pass http://server_group;
}
upstream server_group {
        server centos1;
        server centos2;
        server localhost:8085;

}

之后

location / {
        proxy_pass http://servergroup;
}
upstream servergroup {
        server centos1;
        server centos2;
        server localhost:8085;

}

答案 7 :(得分:-1)

尝试再次检查您的URL。可能缺少斜线。 :-)