4

我正在编写一个从 Web 服务器获取页面的客户端。在一台特定的服务器上,它可以在我的网络浏览器上正常工作,但我的代码一直得到响应:

HTTP/1.1 503 Service Unavailable
Content-Length:62
Connection: close
Cache-Control: no-cache,no-store
Pragma: no-cache

<html><body><b>Http/1.1 Service Unavailable</b></body> </html>

我最终将其缩小到我发送的User-Agent标头:如果它包含Mozilla,一切都很好(我尝试了很多变体)。如果不是,我会得到 503。当我意识到它是 User-Agent 时,我记得过去有同样的问题(不同的项目,不同的服务器),但我从来没有弄清楚为什么。

在这种特殊情况下,我连接的 Web 服务器正在运行 IIS 7.5,但我不确定它前面是否有任何代理/防火墙/等(我怀疑可能是因为这种行为)。

用户代理有一段有趣的历史,您可以在这个问题上阅读: 为什么所有浏览器的用户代理都以“Mozilla/”开头?

在我的用户代理中使用显然对我来说没有问题Mozilla,但我的问题很简单:导致这种情况发生的配置或服务器是什么,为什么有人想要这种行为?

4

2 回答 2

2

这是这种现象的有趣历史:用户代理字符串历史

存在这种情况的主要原因是,互联网、Web 和浏览器不是设计出来的,而是演变而来的,具有大量的向后兼容性,但还有很多供应商专有的扩展。特别是,框架(现在被广泛认为是一个坏主意)并没有得到 Mosaic 的很好支持,但 Netscape(它使用 Mozilla 作为它的用户代理)却得到了很好的支持。

然后服务器管理员有一个选择:他们是使用新的时髦的酷框架并且只支持 Netscape,还是他们使用每个人都可以使用的旧的无聊页面?他们的选择是一种黑客行为。如果有人告诉我他们是 Mozilla,请给他们发送帧;如果没有,请不要发送帧。

这毁了一切。IE 不得不称自己为 Mozilla 兼容的,每个人都冒充其他人,这一切都在顶部的链接中进行了详细说明。但是这个问题在现代时代或多或少地消失了,因为每个人都冒充每个人,每个人都支持越来越多的公共功能子集。

然后移动浏览器和智能手机浏览器开始普及。突然之间,不仅有几个功能基本相同的主流浏览器,还有一些你可以轻易忽略的外围浏览器。现在是几十个小型浏览器,功能更小,能力也更差,而且功能杂乱无章!因此,许多服务器采取了简单的方法,根本没有将正确的数据或任何数据发送到他们不认识的任何浏览器。

现在,您拥有的不是渲染不佳或无法运行的网站,而是……在某些平台上没有网站,而在其他平台上却是完美的。这行得通,但对许多企业来说是无法容忍的;他们希望在所有平台上都能正常工作,因为这就是网络应该如何工作的方式。

移动版本、移动优先、响应式设计、媒体查询,所有这些都是为了填补这些空白。但在大多数情况下,许多网站仍然只是忽略了现代浏览器。媒体查询很快就被颠覆了:没有人愿意宣称他们的浏览器是手持式的,哦不。我们是一个真正的显示浏览器,即使我们的屏幕只有 3 英寸,是的,先生!

总而言之,一些服务器被配置为丢弃任何与 Mozilla 不兼容的浏览器,因为他们认为不提供页面比提供糟糕呈现的页面要好。

我还看到一些论点认为这会提高安全性,因为这样服务器就不必处理不是浏览器(很像您自己的)连接到它们的流氓程序。由于用户代理很容易更改,这对我来说毫无意义;它只是通过默默无闻的安全。

于 2014-01-08T20:59:47.747 回答
0

许多防火墙被配置为丢弃所有没有“适当”用户代理的请求,因为许多 DDoS 攻击不会费心发送它 - 这是一个简单、可靠的过滤器。

于 2014-01-14T09:29:32.170 回答