valums Ajax文件上传器+406不可接受

valums Ajax file uploader+406 not acceptable Error In Firbug

本文关键字:+406 不可接受 Ajax 文件 valums      更新时间:2023-09-26

我在我的网站上使用Valums Ajax Uploader。在我的本地计算机上一切正常,但当我在我的网站主服务器上尝试相同的上传器时,Firbug显示此错误:

POST http://www.myexampledomain.com/upload.php?qqfile=201004151821387.1.flv 406不接受8.37秒
fileuploader.js (line 1204)

响应主体

<title>406 Not Acceptable</title>
<p>An appropriate representation of the requested resource /upload.php could not be found on this server.</p>
<p>Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.</p>

所有请求&响应头在这里,在fileuploader.js文件代码靠近第1204行是:

 params = params || {};
 params['qqfile'] = name;
 var queryString = qq.obj2url(params, this._options.action);
 xhr.open("POST", queryString, true);
 xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
 xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
 xhr.setRequestHeader("Content-Type", "application/octet-stream");
 xhr.send(file); //line 1204

我已经在谷歌和这个网站上搜索过了,但没有发现任何有用的东西,所以请告诉我如何解决这个问题?

我的另一个问题关于这个问题- 406错误的firebug只有

问题出在mod_security.

如果内容编码与表单不同(不是multipart/form-data或form-urlencoded),您可能有规则阻止所有文件上传请求。

首先,你可以在apache配置文件中注释这一行。

第二(对于valums上传器来说更方便)-在你的fileuploader中添加encoding: 'multipart'选项-这将为Content-Encoding添加multipart/form-data,这样apache将允许该请求。

我有同样的问题,我通过在。htaccess文件中禁用mod_security解决了这个问题

<IfModule mod_security.c> 
   # Turn off mod_security filtering. 
   SecFilterEngine Off 
   # The below probably isn't needed, 
   # but better safe than sorry. 
   SecFilterScanPOST Off 
</IfModule>

请自行承担上述风险,因为禁用mod_security可能会导致服务器端出现一些安全漏洞。

我认为mod_security在碍事。似乎一个(只有?)解决这个问题的方法是通过添加以下.htaccess来禁用POST扫描:

<ifmodule mod_security.c>
SecFilterScanPOST Off
</ifmodule>

我会尝试添加一个.htaccess到您的应用程序的根目录,并希望它的工作作为托管提供商可能不允许用户特定的.htaccess文件。

相关文章- http://tech.shantanugoel.com/2008/05/01/http-406-errors-galore.html

我不确定这是否有助于解决您的问题,但我最近在使用JQuery $.ajax进行POST时遇到了同样的问题。我也有一个类似的问题使用JQuery Qaptcha也使用一点ajax和POST。

在这两种情况下,我都能够将POST更改为GET(包括在正在调用的php文件中),然后它将在我的主机的实时服务器上工作。

我还没有完全理解这样做的好处或坏处,因为我在这方面很没有经验,所以如果有人有任何想法,如果这是一件坏事,那么我将不胜感激。

的例子:

    if($cust_acceptance == 'yes') {
    $.ajax({
        type: "GET", //Swapped out a POST for a GET.
        url: "/scripts/php/update_shortlist.php",
        data: "action=add&shortlist_id="+shortlist_id+"&rb_ref="+rb_ref,
        success: function(msg){
            //alert ("success: "+rb_ref);

我认为其他人是正确的,这是mod_security的权限问题,但你不太可能说服你的托管公司为你改变这些设置——如果你使用的是共享服务。显然,如果您在VPS或专用服务器上,您可以自己进行所需的更改。

希望对你有帮助。