![HTTP 服务器被请求一个它不托管的域。该如何回复?](https://linux22.com/image/677395/HTTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%A2%AB%E8%AF%B7%E6%B1%82%E4%B8%80%E4%B8%AA%E5%AE%83%E4%B8%8D%E6%89%98%E7%AE%A1%E7%9A%84%E5%9F%9F%E3%80%82%E8%AF%A5%E5%A6%82%E4%BD%95%E5%9B%9E%E5%A4%8D%EF%BC%9F.png)
我正在尝试使用 node.js 创建一个 Web 服务器(仅作为学习项目,不用于生产,我知道 expressjs),但我不确定在标题中提到的情况下该怎么做?
我尝试查找 HTTP 代码来指示此错误(4XX?),但似乎没有?生产服务器如何响应此问题?
如果我向托管 google.com 的服务器询问 asdasdas.com,它会回复 404,但其他一些服务器只会将您重定向到他们托管的域,所以我真的不太确定我应该实施哪个选项!
非常感谢! :)
答案1
我认为不存在任何用于该特定目的的状态代码。我同意 4xx 代码是查找此类状态代码最明显的位置。
客户端不应该生成此类请求,这就是为什么我认为 4xx 类状态代码是合适的。符合您描述的条件的大多数请求都是由机器人生成的,通常意图通过 referer 标头将垃圾 URL 发送到您的日志文件。
404 状态代码和重定向似乎都是合理的选择。
支持重定向的一个理由是,如果合法用户最终生成了其中一个请求,您仍然希望他们访问您的网站。同样,对于合法的爬虫,您通常希望他们找到您的网站。
支持 404 的一个论点是,它可能会减少您从滥用者那里获得的流量,并且会使滥用者更难找到您的真实域名。
我找到的最接近的匹配项状态代码的官方列表是HTTP/2.0中引入的421状态代码。
状态代码 421 适用于一个连接被重用用于多个请求,但后续请求无法由同一服务器提供服务的情况,客户端必须使用新连接重试。
例如,如果多个域解析为同一个 IP 地址,但服务器基础架构根据主机名将传入连接代理到不同的服务器,则这可能很重要。这与您的场景不完全相同,因此我不建议您在您的场景中使用 421。