我有几个页面设计用AJAX调用 - 如果它们无法显示,我会让它们返回异常状态代码,并且我的javascript会相应地显示错误框。
例如,如果用户未经过身份验证或其会话超时且他们尝试调用其中一个AJAX页面,则会返回401 Unathorized
。
如果在服务器端发生了奇怪的事情,我也有一些返回500 Internal Server Error
。
如果在没有必要参数的情况下调用其中一个页面,我应该返回什么状态代码? (因此无法返回任何内容)。
我查看了wikipedia article on HTTP status codes,但我能找到的最接近我正在寻找的代码的是:
422无法处理的实体
该请求格式正确,但由于语义错误而无法遵循。
编辑:以上代码是特定于WebDAV的,因此在这种情况下不太合适
有人能想到要返回的适当代码吗?
答案 0 :(得分:39)
如果在没有必要参数的情况下调用其中一个页面,我应该返回什么状态代码? (因此不能返回任何内容)。
您可以选择404 Not Found
:
服务器未找到与Request-URI 匹配的任何内容[假设您的所需参数是URI的一部分,即
$_GET
] 。没有说明该病症是暂时的还是永久性的。如果服务器通过一些内部可配置的机制知道旧资源永久不可用且没有转发地址,则应该使用410(Gone)状态代码。当服务器不希望明确拒绝请求的原因,或者没有其他响应适用时,通常会使用此状态代码。
(由我突出)
404 Not Found
是400 Bad Request
的一个子集,也可以使用,因为它非常清楚这是什么:
由于语法格式错误,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。
我实际上无法建议您选择使用超文本的HTTP客户端不存在的WEBDAV响应代码,但您可以,它是完全有效的,您是服务器编码器,您实际上可以获取任何HTTP共振状态代码您认为适合您的HTTP客户端也是您的设计者:
11.2。 422不可处理的实体
422(不可处理实体)状态代码表示服务器 了解请求实体的内容类型(因此a 415(不支持的媒体类型)状态代码不合适),和 请求实体的语法是正确的(因此是400(错误请求) 状态代码不合适但是无法处理包含的内容 说明。例如,如果是XML,则可能会出现此错误情况 请求正文包含格式正确(即语法正确),但是 语义错误的XML指令。
IIRC请求实体是请求正文。因此,如果您正在使用请求主体,那么Julian写道可能是合适的。
您评论道:
恕我直言,400的文字说的语法格式不正确。我假设这里的语法与客户端发送到服务器的HTTP字符串的语法有关。
可能是,但它可以是语法表达的任何内容,整个请求,只有一些请求标头,或特定的请求标头,请求URI等.400不具体关于“HTTP字符串语法”,它实际上是对客户端错误的一般回答:
4xx类状态代码适用于客户端似乎有错误的情况。除了在响应HEAD请求时,服务器应该包括一个实体,其中包含错误情况的解释,以及它是临时或永久条件。这些状态代码适用于任何请求方法。用户代理应该向用户显示任何包含的实体。
重要的是,你必须告诉客户出了什么问题。状态代码只是告诉某些内容出错(在4xx类中),但HTTP并未专门设计为使缺少的query-info部分参数可作为错误条件记录。事实上,URI只知道有一个查询信息部分而不是它的含义。
如果您认为400太宽,我建议您选择404,如果问题与URI相关,例如$_GET
变量。
答案 1 :(得分:8)
我不知道RFC编写者的意图,但我在这种情况下看到的状态代码是 400 Bad Request 。
答案 2 :(得分:7)
422是常规HTTP状态代码;并且 在WebDAV之外使用。与其他人所说的相反,这没有问题; HTTP有一个状态代码注册表。
答案 3 :(得分:1)
引用400
的描述由于格式错误的语法,服务器无法理解该请求。客户不应该在没有修改的情况下重复请求。
(强调我的)
这说明语法格式不正确,而浏览器向服务器发送请求则不然。它只是缺少参数的情况(虽然没有格式错误的语法)。
我建议坚持使用404:)
(如果我在任何地方都错了,专家会纠正我:))
答案 4 :(得分:0)
仔细阅读:
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
422是特定于WebDAV的东西,我还没有看到它用于其他任何东西。
400,即使不是为了这个特殊目的,似乎也是一种常见的选择。
如果你的API是RESTful或类似的,那么404也是一个可行的选择(使用URI的路径部分来表示搜索参数)