发出 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 禁止错误