我有一个JSON请求,我张贴到一个HTTP URL。

如果requestdresource字段存在,但“Roman”是这个字段的无效值,这应该被视为400吗?

[{requestedResource:"Roman"}] 

这应该被视为400的“blah”字段不存在吗?

[{blah:"Roman"}]

当前回答

这让我想起了和别人的对话,“我理解-我只是不同意”

400表示服务器没有理解

200表示服务器完全理解并完全处理了请求。

当服务器返回200时,它就在说:“我理解您的请求,我处理了它,没有出现意外错误,这是我的正确响应。”

200表示您可以信任响应中发送的答案。也许答案是“罗马人是不被允许的”——但这仍然是一个正确的答案,没有任何意想不到的问题。

200没有表达关于预期错误或已处理异常的任何信息——因为这不是消息传输过程的一部分。这些是关于HTTP的状态代码,即传输本身的状态。

我认为应该避免模糊“运输/通信”和“处理”之间的界限。

对于那些喜欢用HTTP代码来表示处理中的问题(“我不同意”部分)的人来说,409冲突似乎最适用于“罗马人不允许”。 RFC 7231 409冲突

冲突在很大程度上意味着“缺乏一致”,对吧?

无论您选择什么HTTP响应代码,似乎每个人都同意您的响应应该解释为什么失败,以及如何解决它。在罗曼的情况下,可能返回字段可接受的值列表?

其他回答

从w3.org

10.4.1 400个错误请求 由于格式错误,服务器无法理解请求 语法。客户端不应该重复请求 修改。

想想期望。

作为客户端应用程序,您希望知道服务器端是否出现了问题。如果服务器需要在blah缺失或requestedResource值不正确时抛出错误,那么400错误将是合适的。

这让我想起了和别人的对话,“我理解-我只是不同意”

400表示服务器没有理解

200表示服务器完全理解并完全处理了请求。

当服务器返回200时,它就在说:“我理解您的请求,我处理了它,没有出现意外错误,这是我的正确响应。”

200表示您可以信任响应中发送的答案。也许答案是“罗马人是不被允许的”——但这仍然是一个正确的答案,没有任何意想不到的问题。

200没有表达关于预期错误或已处理异常的任何信息——因为这不是消息传输过程的一部分。这些是关于HTTP的状态代码,即传输本身的状态。

我认为应该避免模糊“运输/通信”和“处理”之间的界限。

对于那些喜欢用HTTP代码来表示处理中的问题(“我不同意”部分)的人来说,409冲突似乎最适用于“罗马人不允许”。 RFC 7231 409冲突

冲突在很大程度上意味着“缺乏一致”,对吧?

无论您选择什么HTTP响应代码,似乎每个人都同意您的响应应该解释为什么失败,以及如何解决它。在罗曼的情况下,可能返回字段可接受的值列表?

作为补充,对于那些可能遇到与我相同问题的人,我使用$。ajax post表单数据到服务器,我也得到了400错误在第一次。

假设我有一个javascript变量,

var formData = {
    "name":"Gearon",
    "hobby":"Be different"
    }; 

不要像下面这样直接使用变量formData作为关键数据的值:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: formData,
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

相反,使用JSON。stringify封装formData如下:

$.ajax({
    type: "post",
    dataType: "json",
    url: "http://localhost/user/add",
    contentType: "application/json",
    data: JSON.stringify(formData),
    success: function(data, textStatus){
        alert("Data: " + data + "\nStatus: " + status); 
    }
});

无论如何,正如其他人所说明的那样,错误是因为服务器无法识别请求导致语法错误,我只是在实践中提出一个实例。希望对大家有所帮助。

首先检查URL,它可能是错误的,如果是正确的,然后检查你正在发送的请求体,可能的原因是你正在发送的请求缺少正确的语法。

要详细说明,请检查请求字符串中的特殊字符。如果使用的是(特殊字符),则是此错误的根本原因。

尝试复制请求并分析每个标签数据。