2012-02-20 143 views
3

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

  1. 请求中没有POST数据;或在XML
  2. 坏数据(无效,或者良好的XML,或失败一些架构检查)

在这种情况下,我相信我应该返回一个4XX响应代码。有什么比400更合适吗?

更多详细信息

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

回答

4

根据TCP/IP Guide中代码的含义,似乎400是最好的选择。似乎没有什么能够满足你的例子。

+0

是的,我也会和400一起去。大多数HTTP状态代码处理与HTTP本身相关的问题,而不是处理请求的内容,除非内容与HTTP标头定义的期望相冲突。 – SpliFF 2012-02-20 03:38:43

+0

够公平的,我猜我会和400一起住。非常感谢。 – beldaz 2012-02-20 04:04:11

1

我认为你提到的两个错误情况实际上会与不同的HTTP状态代码一起提供。来自W3C's Status Code Definitions

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

409冲突 - 请求无法完成,因为与资源的当前状态的冲突....例如,如果版本正在使用,并陆续投放实体包括改革资源这与先前(第三方)请求所做的冲突,服务器可能会使用409响应来指示它无法完成请求....

因此,400是用于请求由于语法问题,身体甚至不能被解析。相比之下,409似乎适用于解析请求主体并且服务器理解请求的情况,但由于业务规则而拒绝履行请求的情况。

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