【问题标题】:jquery-ajax DELETE request throws 403 access denied errorjquery-ajax DELETE 请求抛出 403 access denied 错误
【发布时间】:2013-06-21 21:34:06
【问题描述】:

当用户点击按钮时,会调用以下函数。

function clearTable() {
    $.ajax({
        url: 'cleartable.php',
        type: 'DELETE',
        success: function(result) {}
    });
}

当在我的本地主机服务器上测试时,这会按照我想要的方式工作,即clearTable() 调用cleartable.php,而TRUNCATE TABLE tablename 反过来又调用了TRUNCATE TABLE tablename

但是,当我在远程服务器上运行它时,Chrome 的 javascript 控制台会打印错误消息:

删除 URL_TO_MY_REMOTE_SERVER/cleartable.php 403(拒绝访问) jquery-1.9.1.min.js:5

一种解决方法是将type更改为POSTGET,然后它将成功调用php。但是,我想知道是什么导致 DELETE 请求失败。它适用于我的本地主机,那么为什么它不能在我的远程服务器上运行呢?另外,基于 REST,将请求类型设为 DELETE 更有意义,因为我正在删除服务器上的某些内容,对吧?

【问题讨论】:

  • 当你将它发送到远程服务器时,我猜它违反了same origin policy
  • 检查服务器配置。例如 apachemod_security 模块可能会过滤某些类型的请求。

标签: php jquery rest http-status-code-403


【解决方案1】:

首先 - 我的回答是基于我使用 Apache 的经验,尽管它可能与其他服务器软件相关。

我在客户的网站上遇到了同样的问题,并且他们的 httpd.conf 文件中的相关 VirtualDirectory 条目似乎拒绝了 DELETE 请求,因此出现了 403 Forbidden 错误。

我仍在等待他们的回复,看看是否允许 DELETE 请求解决了这个错误,但我想我会在这里发布我的发现,希望它可以解释你所看到的。

【讨论】:

  • 我也面临同样的问题。如果我对服务器有完全访问权限,有什么办法可以解决这个问题?
  • 如果您具有完全访问权限,但尚未检查您的 .conf 文件,我建议您首先确保该站点的 VirtualDirectory 条目允许删除请求。请记住,进行此类更改后,您需要重新启动 Apache。
  • 我尝试了很多建议允许删除请求的解决方案,但没有一个对我有用。我正在使用 laravelphp5,它使用 symphony 组件并且能够使用 POST 并在请求正文中指定 API 方法。参考 - laravel.io/forum/02-20-2014-sending-a-delete-request-via-ajax。这就是我解决问题的方法。我知道这是服务器配置,无法修复。添加信息:我在 AWS EC2 上使用带有 LAMP 堆栈的 Ubuntu 14.04。
猜你喜欢
  • 2018-02-21
  • 2018-01-11
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多