【问题标题】:What is the correct way for a webserver to respond to a request for an unrecognised host?网络服务器响应对无法识别主机的请求的正确方法是什么?
【发布时间】:2011-06-14 13:02:57
【问题描述】:

在某些情况下,由于各种原因,用户代理向我们的服务器发出请求,以获取未配置为服务的主机。目前这会导致他们看到相当可怕的默认 Plesk 页面,因此我将做一个更漂亮且加载速度更快的替换。

不过,这让我开始思考,但我在网上找不到答案:处理这种情况的正确方法是什么?服务器应该响应 200、404 还是其他代码?是否有我忽略的这种情况的 HTTP 状态代码?

最后,作为礼仪问题,如果其他人的域(而不是我们拥有但不再使用的域)现在指向您的服务器(我们获得了一个以前使用的额外 IP 地址)应该怎么做,并且存在于一些不正确的 DNS 记录中)。

【问题讨论】:

    标签: http webserver virtualhost


    【解决方案1】:

    恕我直言,如果用户代理向您的服务器发出关于您未提供服务的域的请求,那么 404(未找到)对我来说似乎是最合乎逻辑的。毕竟(您的)服务器上不存在所有域(以及与之关联的任何页面)。

    我会提供 404 服务并记录访问权限。如果您收到对一个域的大量请求,那么也许您可以尝试通知该域名的所有者(如果可以访问)。

    编辑:如果问题是主机名标头不正确,那么我认为至少 IIS 会返回 400(错误请求)作为响应,在这种情况下这可能是另一种选择。

    【讨论】:

    • 404 也是我的直觉,但 200 太常见了,我想在这样做之前先问问周围的人。如果我想另外提供解释错误的正文文本,返回 404 似乎更安全,你知道大多数浏览器如何处理 400 吗?
    • 我同意你在这种情况下使用 404,所以 +1。但我不同意提供 400,因为这只能用于malformed syntax。正确标头中的未知主机名对我来说不是格式错误的语法。
    • 返回 200 真的很糟糕,恕我直言。毕竟,这是一个谎言。如果我是浏览器,我希望收到 404。;-)
    【解决方案2】:

    HTTP 状态代码适用于资源而非域名。行为未指定。我的偏好是重定向到带有解释的静态网页,而不是将它们发送到互联网的其他地方。

    【讨论】:

    • 我尽量不要在出现错误时重定向用户,因为如果您输入错误的 URL 并去更正它,这会非常烦人。 +1 用于提供解释,这至少是对 Plesk 屏幕的改进。
    • 我会说资源也是由域名标识的。 “google.com/users/1”与“fubar.net/users/1”不同。带有解释的静态页面仅对人类可用。例如,AJAX 调用怎么样?
    • 错误域中的所有资源都不存在,因此 404 是合适的。因此,使用 404 提供解释性消息。404 比重定向更好。
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2020-04-20
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多