发出 ajax Post 请求时出现 403 禁止错误

Posted

技术标签:

【中文标题】发出 ajax Post 请求时出现 403 禁止错误【英文标题】:403 Forbidden error when making an ajax Post request 【发布时间】:2018-02-25 20:09:07 【问题描述】:

我的代码在 localhost(wamp 服务器)上运行良好,但在将其移动到共享主机时,我收到错误 403(禁止)。 我首先尝试了这个:

    $.post('login.php?login',  user_email: user_email, user_password: user_password, user_remember: user_remember , function(data)
    
     // Some code here
    

然后我尝试了这个:

var http = new XMLHttpRequest();
var url = "login.php?login";
var params = "user_email="+user_email+"&user_password="+user_password+"&user_remember="+user_remember;
http.open("POST", url, true);

http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

http.onreadystatechange = function() 
    if(http.readyState == 4 && http.status == 200) 
        // Some code here
    

http.send(params);

但我仍然收到此错误:

POST http://domain_name/login.php?login403(禁止)

知道有什么问题吗?

【问题讨论】:

【参考方案1】:

这里有几种可能性。

    共享主机上的 403 通常意味着您尝试联系的文件存在权限问题。基本上,Web 服务器会说:“不,我不会允许你访问或运行 login.php。”您可能需要仔细检查该文件的所有者和权限,以防它上传不正确。

    您也极有可能拥有一个 .htaccess 文件,该文件设置为在某些情况下以 403 错误代码响应,因此,如果您有其中一个,请查找有关允许/的任何内容拒绝/授予,然后尝试注释掉这些行(暂时,只是看看是否是原因)并尝试再次访问 login.php。

    下一个可能性是您的 login.php 本身被编写为在某些情况下以 403 错误代码响应。例如,如果您没有向它发送适当的数据,或者由于某种原因它无法验证您的登录,它可能会以 403 HTTP 状态代码进行响应。在那种情况下,我会仔细检查以确保发送到 login.php 的数据是有效的,并且 login.php 在共享服务器上设置正确(例如检查数据库访问等)

    最后的可能性是您的原始文件与您的 login.php 不在同一个域中。换句话说,您正在使用http://domainA.com/page.html 并向http://domainB.com/login.php 进行AJAX 调用。这称为跨域调用,也可能导致 403,因为出于安全原因禁止跨域调用,除非您采取措施启用它们(您通常必须控制双方才能采取这些步骤)。因此,如果这就是您执行 AJAX 调用的方式,请尝试将原始文件 (page.html) 复制到 login.php 所在的 domainB.com,然后从那里尝试。

【讨论】:

添加到您的列表中。我通过发送和 http 请求遇到了这个问题,但它总是返回 403。然后我注意到他们有一个我试图复制的形式的 csrf 令牌。为了解决这个问题,我在使用 js 输入数据后提交了表单。

以上是关于发出 ajax Post 请求时出现 403 禁止错误的主要内容,如果未能解决你的问题,请参考以下文章

Grails spring security在向控制器操作发出ajax请求时出现403错误

发出 Ajax POST 请求时出现“parseerror”

Cakephp 3.4 AJAX 请求抛出 403 禁止错误

当我发送 POST 请求时被禁止 403

在 React 应用程序中使用 axios.post 到 Django 端点时出现 403 错误代码

在 Django 中使用 AJAX POST 请求进行 CSRF 检查期间禁止 403