[ASP.NET] AJAX 傳遞參數II

  • 8424
  • 0
  • 2012-07-27

摘要:AJAX 傳遞參數II

參考之前一篇http://www.dotblogs.com.tw/aquarius6913/archive/2010/12/04/19901.aspx

使用get方式,直接附加再url後面的,因爲有url有長度限制

POST數據量存在128K的大小限制。

1)URL不存在參數上限的說法。該問題實際是IE對URL有長度限制的問題。
2)HTTP協議規範也沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操作系統的支持。[參1]
3)「可變長度的參數通過URL方式傳遞」實際是說提交表單時使用了GET方法,而不是POST方法。造成這種潛在錯誤的是使用GET方法提交表單數據。因為GET方法將數據放在URL裡傳遞給服務器處理。
4)注意這個限制是整個URL長度,而不僅僅是你的參數值數據長度。
5)既然是IE對URL長度的限制,那麼不管是GET方法還是POST方法都存在這個限制。
(關於FORM的GET和POST方法具體內容請參考相關資料[參2]) 
建議:
1)瞭解應用程序所在的環境,如Web應用的瀏覽器、服務器環境,瞭解其特定的參數限制情況。
2)提交複雜數據儘量使用POST方法。注意FORM不寫method屬性時默認是使用GET方法。
結論(寫入Checklist):
對使用GET方法提交數據時,在IE環境下,需要考慮URL長度2083字節的限制。 
2、第二個:
1)理論上講,POST是沒有大小限制的。HTTP協議規範也沒有進行大小限制。
2)「POST數據量存在128K的大小限制」不夠準確,POST數據是沒有限制的,起限制作用的是服務器的處理程序的處理能力。
3)對於ASP程序,Request對象處理每個表單域時存在100K的數據長度限制。但如果使用Request.BinaryRead則沒有這個限制。對於需要處理超過100K表單域數據的解決辦法,請參考後面的[參3]。
4)由這個延伸出去,對於IIS 6.0,微軟出於安全考慮,加大了限制[參4]。我們還需要注意:
IIS 6.0默認ASP POST數據量最大為200KB,每個表單域限制是100KB。
IIS 6.0默認上傳文件的最大大小是4MB。
IIS 6.0默認最大請求頭是16KB。
IIS 6.0之前沒有這些限制。
建議:
1)弄清楚運行環境的默認設定值有助於你的設計及對出現的問題做快速的解決。
2)應該考慮服務器版本。各個版本的IIS對這些參數的默認設定都不一樣,有必要的話,找資料整理出一份對照表。這樣開發與測試時都有個參考。
3)IIS 6.0的這些限制實際只是它的默認設定值而已,實際應用環境你可以修改它們。
在WINNT\system32\inetsrv\MetaBase.xml裡默認定義了:
AspBufferingLimit="4194304" 對應於上傳文件最大大小
AspMaxRequestEntityAllowed="204800" 對應於POST最大數據量

 

// 前端JavaScript傳入
function Test_Complete(s_info)
{
    createXMLHttpRequest();    
    var url = "jTestAjax.aspx";
    xmlHttp.onreadystatechange = callback;
    xmlHttp.open("POST", url, true);
    xmlHttp.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.send("myInfo=" + s_info);
}
 
 
// 後端C#接收端
System.IO.Stream instream = Page.Request.InputStream;
System.IO.BinaryReader br = new System.IO.BinaryReader(instream, System.Text.Encoding.UTF8);
byte[] byt = br.ReadBytes((int)instream.Length);
string args = System.Text.Encoding.UTF8.GetString(byt);
args即你傳入的參數。

 






Y2J's Life:http://kimenyeh.blogspot.tw/