Web 服務器上的請求篩選被配置為拒絕該請求,因為查詢字符串過長


eg:

var selectArr = [];

for (var i = 0; i < 300; i++) {
selectArr.push(“78946565885555”);
}

var arr = selectArr || {};

 url: 'url?arr=' + arr.toString(),

ajax傳參時候會導致報異常:

Web 服務器上的請求篩選被配置為拒絕該請求,因為查詢字符串過長  

等類似信息。

解決方案:

1、確認 applicationhost.config 或 web.config 文件中的 configuration/system.webServer/security/requestFiltering/requestLimits@maxQueryString 設置。

<system.web>
    <compilation targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" maxRequestLength="102400" maxQueryStringLength="102400"/>

 </system.web>

來自MSDN解釋:
     httpRuntime是配置asp.net http運行時設置,以確定如何處理對asp.net應用程序的請求。
     executionTimeout:表示允許執行請求的最大時間限制,單位為秒
     maxRequestLength:指示 ASP.NET 支持的最大文件上載大小。該限制可用於防止因用戶將大量文件傳遞到該服務器而導致的拒絕服務攻擊。指定的大小以 KB 為單位。默認值為 4096 KB (4 MB)。
     useFullyQualifiedRedirectUrl:表示指示客戶端重定向是否是完全限定的(采用 "http://server/path" 格式,這是某些移動控件所必需的),或者指示是否代之以將相對重定向發送到客戶端。如果為 True,則所有不是完全限定的重定向都將自動轉換為完全限定的格式。false 是默認選項。
     minFreeThreads:表示指定允許執行新請求的自由線程的最小數目。ASP.NET 為要求附加線程來完成其處理的請求而使指定數目的線程保持自由狀態。默認值為 8
    minLocalRequestFreeThreads:表示ASP.NET 保持的允許執行新本地請求的自由線程的最小數目。該線程數目是為從本地主機傳入的請求而保留的,以防某些請求在其處理期間發出對本地主機的子請求。這避免了可能的因遞歸重新進入 Web 服務器而導致的死鎖。
    appRequestQueueLimit:表示ASP.NET 將為應用程序排隊的請求的最大數目。當沒有足夠的自由線程來處理請求時,將對請求進行排隊。當隊列超出了該設置中指定的限制時,將通過“503 - 服務器太忙”錯誤信息拒絕傳入的請求。
    enableVersionHeader:表示指定 ASP.NET 是否應輸出版本標頭。Microsoft Visual Studio 2005 使用該屬性來確定當前使用的 ASP.NET 版本。對於生產環境,該屬性不是必需的,可以禁用。

 

2、以數組方式傳參,如

方法一:

var arr={params:['param','param2']};
url: 'url?arr=' + arr.toString(),
post方式時
$.ajax({url:請求地址, data:arr, type:"POST", success:function(){ //do something } });

方法二:ajax提交添加”traditional:true”參數

traditional:是否使用傳統的方式淺層序列化。

數組或jQuery對象會按照name/value對進行序列化,普通對象按照key/value對進行序列化。

var arr=new Array();
arr[0]='param';
arr[1]='param2';
$.ajax({url:請求地址,
            data:{params:arr},
            type:"POST",
            traditional:true, //默認false
            success:function(){
                //do something
            }
        });

通過ajax提交數組時,會自動在所設定的參數后面增加中括號:“[]”,導致后端spring MVC中的@RequestParam獲取不到參數。

解決方法:

ajax請求時增加:traditional: true 就可以正常提交了。原因如下:

jQuery會調用jQuery.param序列化參數,jQuery.param( obj, traditional ),默認的話,traditional為false,即jquery會深度序列化參數對象,以適應如PHP和Ruby on Rails框架,但servelt api無法處理,我們可以通過設置traditional 為true阻止深度序列化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM