【问题标题】:What status code should I return for a non AJAX request to an AJAX only URL?对于仅 AJAX URL 的非 AJAX 请求,我应该返回什么状态代码?
【发布时间】:2011-03-15 15:48:30
【问题描述】:

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

【问题讨论】:

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

标签: ajax http http-status-codes


【解决方案1】:

我认为403 Forbidden 最好。

501 Not Implemented 不太适合,因为资源实现,但不适合那种请求。

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

【讨论】:

【解决方案2】:

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

W3say

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

正文部分可能包含一个 描述人为错误的文件 可读形式。文档在 MIME 中 格式,并且只能是文本/纯文本, text/html 或格式之一 指定为可接受的 请求。

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

W3 对 400 表示:请求的语法错误或天生无法满足,似乎确实如此。

【讨论】:

    【解决方案3】:

    我会去400 Bad Request,因为它意味着不重试请求。

    失败了,418 I'm a teapot,只是为了迷惑他们 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-20
      • 2014-12-22
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2019-05-18
      • 2011-01-01
      相关资源
      最近更新 更多