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页面之后的含义:
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错误