5

我怀疑这是一个非常微不足道的问题。我正在编写一个 PHP 脚本来响应 AJAX 查询。查询应该包含一些 XML 数据,PHP 脚本会处理这些数据,然后返回响应。我想考虑两种错误情况:

  1. 请求中没有 POST 数据;或者
  2. XML 中的错误数据(无效或格式正确的 XML,或者未通过某些模式检查)

在这种情况下,我相信我应该返回 4xx 响应代码。还有比400更合适的吗?

更多细节

为了进一步说明问题:客户端 Javascript 应用程序是用于教育目的的图表编辑器。用户需要创建一个正确模拟给定情况的图表。然后,学生可以提交图表,从而通过 AJAX 调用将图表的 XML 序列化发布到服务器。PHP 脚本分析图表 XML 并构造一个 XML 报告,该报告作为 AJAX 响应发送给客户端。我最初描述的两种情况(没有 XML POST 数据或其中的 XML 无效)在客户端请求时不应该发生,但我认为正确捕获和处理这些情况是谨慎的。因此,我认为 4xx 响应代码是合适的。XML 报表结构并不能满足这些情况,一个空的报表就相当于一个完美的图表,这显然是不合适的,

4

2 回答 2

6

根据TCP/IP 指南中代码的含义, 400 似乎是您的最佳选择。似乎没有什么符合你的例子。

于 2012-02-20T03:15:08.013 回答
1

我认为您提到的两种错误情况实际上会使用不同的 HTTP 状态代码。来自W3C 的状态代码定义

400 Bad Request - 由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。

409 Conflict - 由于与资源的当前状态发生冲突,请求无法完成......例如,如果正在使用版本控制并且被 PUT 的实体包含对资源的更改,这些更改与之前所做的冲突(第三方)请求,服务器可能会使用 409 响应来指示它无法完成请求....

因此 400 是针对由于语法问题甚至无法解析请求正文的情况。相比之下,409 似乎是针对请求正文被解析并且服务器可以理解请求但由于业务规则而拒绝执行的情况。

在模式验证失败或 XML 语法错误的情况下,我同意其他海报,400 是合适的。但是在没有 POST 数据的情况下,你说这是一个有效的图表,但由于其他原因不可接受,409 对我来说似乎更合适。

于 2012-03-12T23:03:04.477 回答