哪个HTTP状态码用于不提供所需的参数?
我有几个页面devise用AJAX调用 – 我让他们返回一个不正常的状态代码,如果他们不能显示,我的JavaScript将显示相应的错误框。
例如,如果用户没有通过身份validation,或者他们的会话超时,他们尝试调用其中一个AJAX页面,则会返回401 Unathorized
。
我也有一些返回500 Internal Server Error
如果真的发生奇怪的事情发生在服务器端。
如果其中一个页面被调用而没有需要的参数,我应该返回哪个状态码? (因此不能返回任何内容)。
我查看了关于HTTP状态代码的维基百科文章 ,但是我能find的最接近的代码是:
422不可处理的实体
请求格式良好,但由于语义错误无法遵循。
编辑:上面的代码是WebDAV特定的,因此在这种情况下不太合适
任何人都可以想到一个合适的代码返回?
如果其中一个页面被调用而没有需要的参数,我应该返回哪个状态码? (因此不能返回任何内容)。
你可以select404 Not Found
:
服务器没有find与Request-URI匹配的任何东西[假设你所需的参数是URI的一部分,即
$_GET
] 。 没有迹象表明病情是暂时的还是永久性的。 如果服务器通过一些内部可configuration的机制知道旧资源永久不可用并且没有转发地址,则应该使用410(Gone)状态码。 当服务器不希望揭示为什么请求被拒绝,或者没有其他响应适用时,通常使用这种状态码。
(突出我)
404 Not Found
是400 Bad Request
一个子集,可以采取,因为它是非常清楚这是什么:
由于格式错误,服务器无法理解请求。 客户端不应该不加修改地重复请求。
我实际上不能build议你select一个WEBDAV响应代码,这个代码对于使用超文本的HTTP客户端来说是不存在的,但是你可以,这是完全有效的,你是服务器编码器,实际上你可以接受任何你认为合适的HTTP响应代码对于你也是devise者的HTTP客户端来说:
11.2。 422不可处理的实体
422(不可处理的实体)状态码意味着服务器理解请求实体的内容types(因此415(不支持的媒体types)状态码是不合适的),并且请求实体的语法是正确的(因此400 )状态码不合适),但无法处理包含的说明。 例如,如果XML请求主体包含格式正确(即,语法正确),但语义错误的XML指令,则可能会出现此错误情况。
IIRC请求实体是请求主体。 所以,如果你正在与请求机构合作,那么朱利安写道可能是合适的。
你评论说:
恕我直言,400的文字说话格式不正确。 我会假设这里的语法涉及到客户端发送到服务器的HTTPstring的语法。
这可能是,但它可以是任何语法expression的,整个请求,只有一些请求头,或者一个特定的请求头,请求的URI等。400不是专门关于“HTTPstring语法”,它实际上是一般的答案客户端错误:
4xx类状态码用于客户端似乎有错误的情况。 除了响应HEAD请求外,服务器应该包含一个包含错误情况说明的实体,以及它是临时还是永久状态。 这些状态码适用于任何请求方法。 用户代理应该向用户显示任何包含的实体。
重要的是在这里,你必须告诉客户出了什么问题。 状态码只是告诉出了什么地方出了问题(在4xx类中),但是HTTP并没有专门devise成使缺less的查询信息部分参数成为错误条件。 事实上,URI只知道有一个查询信息部分,而不是它的意思。
如果你认为400太宽泛,我build议你select404如果问题是URI相关的,例如$_GET
variables。
我不知道RFC编写者的意图,但是我所见过的状态代码在这种情况下是400错误请求 。
422是一个常规的HTTP状态码; 它在WebDAV之外使用。 与其他人所说的相反,这是没有问题的。 HTTP有一个状态码registry的原因。
描述为400
由于格式错误 ,服务器无法理解请求。 客户端不应该不加修改地重复请求。
(强调我的)
这就说明格式错误,当浏览器向服务器发送请求时不是这种情况。 它只是缺less参数的情况下(虽然没有格式错误)。
我会build议坚持404)
(专家纠正我,如果我错了任何地方:))
仔细阅读:
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
422是一个WebDAV的具体事情,我还没有看到它用于其他任何事情。
400,即使不是为了这个特定的目的,似乎是一个普遍的select。
404也是一个可行的select,如果你的API是RESTful或类似的(使用URI的path部分来指示search参数)