Drupal中的Ajax请求给出了403

时间:2017-06-09 13:08:16

标签: php jquery ajax drupal http-status-code-403

我正在Drupal中执行Ajax请求。我正在对一个将压缩文件的自定义PHP文件发出POST请求。但是,当我发送一个长文件名数组时,我在控制台中收到一条错误消息;

POST http://www.example.com/url/zip-file.php 403 (Forbidden)

我的帖子请求如下:

files_array[]:/long_url/really%20long%20filename.pdf
files_array[]:/long_url/really%20long%20filename.pdf
files_array[]:/long_url/really%20long%20filename.pdf
files_array[]:/long_url/really%20long%20filename.pdf
files_array[]:/long_url/really%20long%20filename.pdf

它适用于一些文件名,但随着我添加更多,403错误出现,我的功能失败。

有没有人知道它可能是什么?

我的.htaccess文件中有这些值

php_value upload_max_filesize 200M
php_value post_max_size 200M
php_value memory_limit 200M
php_value max_input_vars 2500

我检查了phpinfo()以确保它们正常工作

javascript请求如下所示:

$.ajax({
    type: 'POST',
    url: Drupal.settings.basePath + Drupal.settings.pathToTheme + '/includes/zip-file.php',
    data: {
        'files_array': files_array
    },
    success: function(data) {
        var result = JSON.parse(data);

        files_array = [];
        if(result.success) {
            window.location.href = Drupal.settings.basePath + result.file_path;
        } else {
            alert('Failed to create zip file.');
        }
        $('#table-actions').find('.ajax-load').hide();
    }
})

编辑:我也试图完全清空PHP文件,以确保它不是PHP错误(据我所知)。

2 个答案:

答案 0 :(得分:1)

  1. 首先,我将在wiki页面后解释Forbidden 403的含义:

    • 网络服务器可能会返回HTTP 403 Forbidden状态,以响应来自request网页的client,或者可能表示可以访问服务器并处理该请求,但refuses采取进一步行动。 HTTP status code 403响应是Web服务器配置为拒绝客户端访问所请求资源的结果。

    • 可能导致403 Forbidden response的常见请求是由网络浏览器执行的网页的HTTP GET request,以检索在浏览器窗口中向用户显示的页面。 Web服务器也可以为其他类型的请求返回403 Forbidden状态。

    1. 您可能获得403状态的原因:

      • 可能是因为您没有定义page callback属性,为此您可以查看hook_menu() here的文档。如果相关菜单项的父项不存在,则返回Access denied。甚至在当前用户对菜单项的访问权限得到解决之前就会发生这种情况;所以access callback并不重要。
      1. 解决方案可能是:

        • 将此添加到ajax post
            

          '访问回调'=> 'user_access',

        • 降低管理主题中的Jquery
        • 如果这些解决方案都不起作用,您可能需要查看here

答案 1 :(得分:0)

结果是我们的ModSecurity firefall阻止了POST请求。我的主人帮我解决了。