【问题标题】:How should an Ajax endpoint respond to a non-ajax request?Ajax 端点应该如何响应非 ajax 请求?
【发布时间】:2012-09-14 16:59:28
【问题描述】:

我正在编写后端以响应 ajax 查询。我正在使用 Codeigniter,而我的控制器由这些函数组成。

public function name_change()
{
    if($this->input->is_ajax_request())
    {
        //Grab the Inputs
        //Do something
        //Respond
    }
    else
    {

    }           
}

我唯一的问题是我应该如何处理不是 Ajax 请求的情况?没有理由让非 ajax 请求访问这些控制器功能。我能想到的选项是。

  • 不发送响应
  • 抛出一个错误页面(我假设我会使用状态码 200 或 403)

【问题讨论】:

  • 首先问自己:“那又怎样?”如果没有绕过安全措施、丢失金钱或写入数据,那么它是否是 AJAX 连接可能并不重要。
  • 注意:CodeIgnitor is_ajax_request() 方法只检查 HTTP 标头 HTTP_X_REQUESTED_WITH 是否表明它是通过 xmlhttprequest 发送的,因此很容易被欺骗......并且在开发过程中您可能想要访问 ( REST?) 端点通过浏览器地址栏进行测试。例如小心你基于这种“有问题”的方法有多少逻辑。
  • 我自己也经常想知道这一点——我只是渲染了一个自定义的 404 视图,但我考虑过用 Apache 捕获它以减少 CodeIgniter 调用的数量,从而减少内存。我很想看到这样的解决方案。
  • @JordanArseno 我想知道扔一个 404 但不确定这是否合适。
  • 我会使用重定向到控制器索引并让它刷新页面

标签: php ajax codeigniter jquery


【解决方案1】:

黄金法则是永远不要相信用户输入

因此,无论数据来自 ajax 请求 - 还是只是发送到函数 - 您的控制器都应假定它已被污染并进行全面验证、用户身份验证等。

因此,如果有人在没有 ajax 请求(有意或无意)的情况下最终到达该控制器并不重要 - 所以如果他们提交的数据是有效的,那就让它通过吧。

如果不是 - 只需向客户抛出一个有用的错误消息(尤其是如果他们不小心到达那里)。

【讨论】:

  • 是的,我正在验证输入,但我的想法是,如果它不是通过 ajax 输入的,那它就不是我的应用程序的预期行为。所以因此我应该忽略它,而不是浪费时间和资源处理输入。如果我抛出一个错误,我应该返回一个状态码吗? 200?阅读 http 状态代码 403 的描述似乎是要返回的适当代码。
猜你喜欢
  • 2020-12-20
  • 2015-04-14
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2014-04-24
  • 1970-01-01
相关资源
最近更新 更多