问题 对于仅针对AJAX的URL的非AJAX请求,我应该返回什么状态代码?


如果请求URL不使用AJAX,应该返回什么状态代码? 400?


6867
2018-03-14 12:05


起源

你怎么知道如何请求URL? Ajax与否它只是一个URL - djna
如果HTTP_X_REQUESTED_WITH等于请求头中的XMLHttpRequest,则它是一个AJAX请求。在Django中,您可以使用request.is_ajax()进行检查 - Neil
我想处理非AJAX请求。例如,如果有人向该URL发出标准GET请求,我想显示一个包含正确状态代码的错误页面。 - Neil


答案:


我不相信你通过监管这个价值来帮助任何人。我更喜欢在所有情况下尝试发送有用数据的理念。然而,想象我们确实需要政策的类似情况并不是一件容易的事。例如,假设我们有一个可以根据mime类型返回JSON或XML的服务,如果指定了一个意外的mime类型,最好返回一个明确的响应代码。

W3

4xx代码适用于案例   客户似乎有   错误,以及案件的5xx代码   其中服务器知道的   服务器有错误。这是不可能的   一般来说,区分这些情况,所以   差异只是信息性的。

身体部分可能包含一个   描述人类错误的文件   可读的形式。该文档是MIME   格式,可能只在text / plain中,   text / html或格式的一个   指定为可接受的   请求。

所以很明显,响应应该是4xx,而不是客户端提供无效请求。我会选择400 BAD REQUEST并确保返回的文本解释了为什么请求被认为是错误的。

W3说400: 请求语法错误或本质上不可能满足,确实情况确实如此。


5
2018-03-15 07:48





我认为 403 Forbidden 最好的。

501 Not Implemented 不合适,因为资源  实施,但不适合这种要求。

400 Bad Request 也不是一个好的选择,因为根据规范,这意味着“由于语法格式错误,服务器无法理解请求”,这不是这里的情况。


6
2018-03-14 12:23



同意,这似乎是共识的观点。也可以看看 stackoverflow.com/questions/11723548/... - Dave Sag


我走了 400 Bad Request,因为它暗示不重试请求。

没错, 418 I'm a teapot,只是为了迷惑'em :)


0
2018-03-14 12:30



很高兴知道 ;-) - sebhaase