间歇性HTTP 403 Forbidden错误调用相同的Ajax代码

时间:2015-01-17 10:29:38

标签: javascript php ajax http-status-code-403

我使用我的JavaScript客户端(比如foo.js)在服务器中调用我的php Ajax代码(比如bar.php)。这在大多数情况下都能很好地工作,但偶尔我会回到HTTP 403(禁止)而不是通常的200(OK)。使用完全相同的代码,相同的参数等会发生这种情况。

为什么会这样?我该如何解决?由于我的bar.php代码内部,是否有可能发生这种情况?我该如何记录原因?

foo.js客户:

function postAjax(url, queryString, callback) {
  var x = new XMLHttpRequest();
  x.onreadystatechange = function() {
    if (x.readyState === 4) {  // 4=after HTTP response content finished loading
      if (x.status === 200) callback(true, x.responseText);
      else callback(false, x.status);
    }
  };
  x.open('POST', url, true);
  x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  x.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  x.send(queryString);
}

var params = 'aaa=xxx&bbb=yyy';
postAjax('bar.php', params, myCallback);

function myCallback(ajaxStatus, ajaxResponse) { /* do something */ }

bar.php服务器:

<?php
header('Content-Type: text/plain');
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
if ($isAjax) {
  /* Do something with $_POST['aaa'] and $_POST['bbb'] */
  echo 'Success';
}
else {
  echo 'Error';
}
?>

附加新信息:

浏览器控制台(在此示例中为Firefox):

一切都好(大部分时间):
+ POST http://example.com/bar.php 200 OK ZZZms

错误时(例如,在我最后一次尝试的第7次之后):
+ POST http://example.com/bar.php 403 Forbidden X ZZZms
我在ajaxResponse中找回403,它来自x.status

扩大&#39; +&#39;在Firefox控制台中,我看到了响应:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /bar.php
on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

查看Apache Raw Accwss Log(通过cPanel),我看到所有人都有类似的POST行,在第7次测试中状态从200变为404:

<my IP> - - [17/Jan/2015:09:55:50 -0500] "POST /bar.php HTTP/1.1" 404 - "<my test url>" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"

&#34;您无权访问&#34; ???
为什么我有6次但不是第7次获得许可?

同时查看Apache错误日志(通过cPanel),我看到了行:

[Sat Jan 17 09:55:50 2015] [error] [client <my IP>] File does not exist: /home/<my user>/public_html/403.shtml, referer: <my test url>

1 个答案:

答案 0 :(得分:2)

做了一些彻底的研究。它的...... mod_security !!!

查看http://www.opensourceforu.com/2011/08/securing-apache-part-10-mod_security/,搜索&#39; SecFilterScanPOST&#39;。我的&#39; aaa&#39; posted变量用作一些随机令牌,并且偶尔有一个由此mod_security机制过滤的值。

在与主机支持人员聊天后,这已得到修复。最初我以为我可以通过适当地编辑一些.htaccess文件来解决它,但最终看起来我需要他们的帮助。