首页 > 解决方案 > 从浏览器请求返回 NotFound 或 BadRequest

问题描述

简单问题:如果我的网站(不是 API 调用)收到来自浏览器的无效请求,我会返回什么 HTTP 结果?

假设我有一个带有 URL 参数的网页,如下所示:

https://example.com?id=123

如果参数无效,则我无法显示请求的页面。我的倾向是返回一个400 Bad Request. 但我经常看到返回404 Not Found.

我的服务器应该收到带有无效参数的请求的唯一原因应该是恶意(或其他手工制作的)调用或我自己的网站中创建虚假重定向的编码错误。如果呼叫是恶意的,那么我真的不在乎呼叫者是否盯着空白屏幕。如果调用者是我自己不正确的重定向,那么用户就会被一个损坏的网站困住,用户是否得到一个奇怪的“未找到”错误或只是一个空白屏幕都无关紧要。

标签: asp.net-corehttp

解决方案


在与另一个 SO 用户交谈后(请参阅原始帖子的评论),我被引导相信我的问题的正确答案是:

如果 URL 参数丢失或无效,则返回 HTTP 状态代码,就像这是 API 请求一样。

  • 如果缺少必需的 URL 参数,则返回400 Bad Request

  • 如果 URL 参数恰好标识了无法找到的资源(例如,如果页面显示了在 URL 参数中指定 ID 的小部件的详细信息),则返回404 Not Found. (这当然是令人困惑的,因为404 Not Found如果 URL 指定了服务器不会处理的端点,服务器就会返回。)

  • 如果 URL 参数无效(类型错误、超出范围等),则返回 '400 Bad Request'


推荐阅读