asp.net-core - 从浏览器请求返回 NotFound 或 BadRequest
问题描述
简单问题:如果我的网站(不是 API 调用)收到来自浏览器的无效请求,我会返回什么 HTTP 结果?
假设我有一个带有 URL 参数的网页,如下所示:
https://example.com?id=123
如果参数无效,则我无法显示请求的页面。我的倾向是返回一个400 Bad Request
. 但我经常看到返回404 Not Found
.
如果我返回 a
400 Bad Request
那么浏览器将简单地显示一个空白页面,并且人类用户可能会盯着屏幕一会儿,直到很明显某些东西最终被破坏了。如果我返回 a
404 Not Found
那么浏览器将立即显示某种错误消息。
我的服务器应该收到带有无效参数的请求的唯一原因应该是恶意(或其他手工制作的)调用或我自己的网站中创建虚假重定向的编码错误。如果呼叫是恶意的,那么我真的不在乎呼叫者是否盯着空白屏幕。如果调用者是我自己不正确的重定向,那么用户就会被一个损坏的网站困住,用户是否得到一个奇怪的“未找到”错误或只是一个空白屏幕都无关紧要。
解决方案
在与另一个 SO 用户交谈后(请参阅原始帖子的评论),我被引导相信我的问题的正确答案是:
如果 URL 参数丢失或无效,则返回 HTTP 状态代码,就像这是 API 请求一样。
如果缺少必需的 URL 参数,则返回
400 Bad Request
。如果 URL 参数恰好标识了无法找到的资源(例如,如果页面显示了在 URL 参数中指定 ID 的小部件的详细信息),则返回
404 Not Found
. (这当然是令人困惑的,因为404 Not Found
如果 URL 指定了服务器不会处理的端点,服务器就会返回。)如果 URL 参数无效(类型错误、超出范围等),则返回 '400 Bad Request'
推荐阅读
- angular - 引用组件链中的 ExpressionChangedAfterItHasBeenCheckedError
- jquery - 循环发送 Ajax 请求时浏览器冻结
- cmake - 将 dll 添加到 CMake
- java - spring boot 将带时区的日期时间转换为服务器中的“0”时区
- python - Python 3.6 泛型类型提示
- html - 如何从角度设置表单组数据
- docker - 具有多个资源单个 YAML 的 Kubernetes 应用程序
- java - 创建保持原始顺序的单声道数组对象
- java - 使用和测试生成的映射器的正确方法
- python - Python正则表达式提取德语地址格式的解决方案