Drupal 中的 Ajax 请求给出 403

Posted

技术标签:

【中文标题】Drupal 中的 Ajax 请求给出 403【英文标题】:Ajax request in Drupal gives 403 【发布时间】:2017-11-11 12:34:26 【问题描述】:

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

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

我的 Post 请求如下所示:

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 错误(据我所知)。

【问题讨论】:

【参考方案1】:

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

    1234563采取任何进一步的行动。 HTTP status code 403 响应是 Web 服务器被配置为拒绝客户端访问所请求资源的结果。

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


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

    可能是因为你没有定义page callback属性,对此你可以查看hook_menu()here的文档。如果相关菜单项的父项不存在,则返回Access denied。这甚至发生在当前用户对您的菜单项的访问被解决之前;所以access callback 并不重要。

    解决方案可能是:

    将此添加到ajax post

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

    降级您的Jquery在您的管理主题中。 如果这些解决方案都不起作用,您可能想看看here。

【讨论】:

非常感谢您的详细回答! :) 对不起,如果我有点慢。我应该在哪里添加“访问回调”=>“用户访问”? @superhenke 把它放在type 的下面,再加上它could 是一个解决方案,不是 100% 保证的,但当然希望他们有所帮助。 好的,我明白了。我将在星期一对此进行测试。再次感谢你的帮助。如果可行,我会记得检查您的答案是否正确! @superhenke no probelm :) 希望它能帮到你。 @Umair 我的错,被我自己的想法包裹着,所以我读错了这个问题。另外提出一个单独的问题会更好【参考方案2】:

原来是我们的 ModSecurity 防火墙阻止了 POST 请求。我的主人帮我解决了这个问题。

【讨论】:

以上是关于Drupal 中的 Ajax 请求给出 403的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求:/wp-admin/admin-ajax.php 403

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

ajax请求拥有域的403

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

错误 403 禁止通过 ajax 请求服务器

Django - 使用 ExtJS 发布 ajax 请求禁止 403