日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)javascript|JQuery → Ajax中的應(yīng)用中的GET、POST方法原理分析

      Ajax中的應(yīng)用中的GET、POST方法原理分析

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/4/21 14:13:15字體大。A-A+

      作者:西西點(diǎn)擊:502次評(píng)論:3次標(biāo)簽: Ajax

      • 類型:編程控件大。6.8M語(yǔ)言:中文 評(píng)分:2.5
      • 標(biāo)簽:
      立即下載
      昨天項(xiàng)目經(jīng)理讓我做了一塊小功能,是關(guān)于異步刷新頁(yè)面內(nèi)容的,之前對(duì)Ajax的操作僅限于post的請(qǐng)求操作,會(huì)應(yīng)用但是說(shuō)到具體的原理就有點(diǎn)模糊了為了搞明白其原理,遂寫(xiě)下這篇隨筆:

      Http定義了與服務(wù)器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,我們可以這樣認(rèn)為:一個(gè)URL地址,它用于描述一個(gè)網(wǎng)絡(luò)上的資源,而HTTP中的GET,POST,PUT,DELETE就對(duì)應(yīng)著對(duì)這個(gè)資源的查,改,增,刪4個(gè)操作。到這里,大家應(yīng)該有個(gè)大概的了解了,GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。
      HTTP/1.1協(xié)議中共定義了八種方法(有時(shí)也叫“動(dòng)作”)來(lái)表明Request-URI指定的資源的不同操作方式:

      OPTIONS
      返回服務(wù)器針對(duì)特定資源所支持的HTTP請(qǐng)求方法。也可以利用向Web服務(wù)器發(fā)送'*'的請(qǐng)求來(lái)測(cè)試服務(wù)器的功能性。
      HEAD
      向服務(wù)器索要與GET請(qǐng)求相一致的響應(yīng),只不過(guò)響應(yīng)體將不會(huì)被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。
      GET
      向特定的資源發(fā)出請(qǐng)求。注意:GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中。
      POST
      向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
      PUT
      向指定資源位置上傳其最新內(nèi)容。
      DELETE
      請(qǐng)求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。
      TRACE
      回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷。
      CONNECT
      HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
        1.根據(jù)HTTP規(guī)范,GET用于信息獲取,而且應(yīng)該是安全的和冪等的。

        (1)所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說(shuō),GET 請(qǐng)求一般不應(yīng)產(chǎn)生副作用。就是說(shuō),它僅僅是獲取資源信息,就像數(shù)據(jù)庫(kù)查詢一樣,不會(huì)修改,增加數(shù)據(jù),不會(huì)影響資源的狀態(tài)。

        * 注意:這里安全的含義僅僅是指是非修改信息。

        (2)冪等的意味著對(duì)同一URL的多個(gè)請(qǐng)求應(yīng)該返回同樣的結(jié)果。

      冪等(idempotent、idempotence)是一個(gè)數(shù)學(xué)或計(jì)算機(jī)學(xué)概念,常見(jiàn)于抽象代數(shù)中。
        冪等有一下幾種定義:
        對(duì)于單目運(yùn)算,如果一個(gè)運(yùn)算對(duì)于在范圍內(nèi)的所有的一個(gè)數(shù)多次進(jìn)行該運(yùn)算所得的結(jié)果和進(jìn)行一次該運(yùn)算所得的結(jié)果是一樣的,那么我們就稱該運(yùn)算是冪等的。比如絕對(duì)值運(yùn)算就是一個(gè)例子,在實(shí)數(shù)集中,有abs(a)=abs(abs(a))。
        對(duì)于雙目運(yùn)算,則要求當(dāng)參與運(yùn)算的兩個(gè)值是等值的情況下,如果滿足運(yùn)算結(jié)果與參與運(yùn)算的兩個(gè)值相等,則稱該運(yùn)算冪等,如求兩個(gè)數(shù)的最大值的函數(shù),有在在實(shí)數(shù)集中冪等,即max(x,x) = x。

      2.根據(jù)HTTP規(guī)范,POST表示可能修改變服務(wù)器上的資源的請(qǐng)求。

      但在實(shí)際的做的時(shí)候,很多人卻沒(méi)有按照HTTP規(guī)范去做,導(dǎo)致這個(gè)問(wèn)題的原因有很多,比如說(shuō):
        1.很多人貪方便,更新資源時(shí)用了GET,因?yàn)橛肞OST必須要到FORM(表單),這樣會(huì)麻煩一點(diǎn)。

        2.對(duì)資源的增,刪,改,查操作,其實(shí)都可以通過(guò)GET/POST完成,不需要用到PUT和DELETE。

      表面分析GET和POST的區(qū)別:

        (1)首先是"GET方式提交的數(shù)據(jù)最多只能是1024字節(jié)",因?yàn)镚ET是通過(guò)URL提交數(shù)據(jù),那么GET可提交的數(shù)據(jù)量就跟URL的長(zhǎng)度有直接關(guān)系了。而實(shí)際上,URL不存在參數(shù)上限的問(wèn)題,HTTP協(xié)議規(guī)范沒(méi)有對(duì)URL長(zhǎng)度進(jìn)行限制。這個(gè)限制是特定的瀏覽器及服務(wù)器對(duì)它的限制。IE對(duì)URL長(zhǎng)度的限制是2083字節(jié)(2K+35)。對(duì)于其他瀏覽器,如Netscape、FireFox等,理論上沒(méi)有長(zhǎng)度限制,其限制取決于操作系統(tǒng)的支持。

        注意這是限制是整個(gè)URL長(zhǎng)度,而不僅僅是你的參數(shù)值數(shù)據(jù)長(zhǎng)度。

        (2)理論上講,POST是沒(méi)有大小限制的,HTTP協(xié)議規(guī)范也沒(méi)有進(jìn)行大小限制,說(shuō)“POST數(shù)據(jù)量存在80K/100K的大小限制”是不準(zhǔn)確的,POST數(shù)據(jù)是沒(méi)有限制的,起限制作用的是服務(wù)器的處理程序的處理能力。

        對(duì)于ASP程序,Request對(duì)象處理每個(gè)表單域時(shí)存在100K的數(shù)據(jù)長(zhǎng)度限制。但如果使用Request.BinaryRead則沒(méi)有這個(gè)限制。

        由這個(gè)延伸出去,對(duì)于IIS 6.0,微軟出于安全考慮,加大了限制。我們還需要注意:

           1)IIS 6.0默認(rèn)ASP POST數(shù)據(jù)量最大為200KB,每個(gè)表單域限制是100KB。
           2)IIS 6.0默認(rèn)上傳文件的最大大小是4MB。
           3)IIS 6.0默認(rèn)最大請(qǐng)求頭是16KB。
         IIS 6.0之前沒(méi)有這些限制。

        一般說(shuō)的80K,100K可能只是默認(rèn)值而已,但肯定是可以自己設(shè)置的。由于每個(gè)版本的IIS對(duì)這些參數(shù)的默認(rèn)值都不一樣,具體請(qǐng)參考相關(guān)的IIS配置文檔。

        3.在ASP.NET中,服務(wù)端獲取GET請(qǐng)求參數(shù)用 Request.QueryString,獲取POST請(qǐng)求參數(shù)用Request.Form。在JSP中,用 request.getParameter(\"XXXX\")來(lái)獲取,雖然jsp中也有request.getQueryString()方法,但使用起來(lái)比較麻煩,比如:傳一個(gè)test.jsp?name=hyddd&password=hyddd,用 request.getQueryString()得到的是:name=hyddd&password=hyddd。在PHP中,可以用$_GET和$_POST分別獲取GET和POST中的數(shù)據(jù),而$_REQUEST則可以獲取GET和POST兩種請(qǐng)求中的數(shù)據(jù)。值得注意的是,JSP 中使用request和PHP中使用$_REQUEST都會(huì)有隱患。

        4.POST的安全性要比GET的安全性高。注意:這里所說(shuō)的安全性和上面GET提到的“安全”不是同個(gè)概念。上面“安全”的含義僅僅是不作數(shù)據(jù)修改,而這里安全的含義是真正的Security 的含義,比如:通過(guò)GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上,因?yàn)?1)登錄頁(yè)面有可能被瀏覽器緩存,(2)其他人查看瀏覽器的歷史紀(jì)錄,那么別人就可以拿到你的賬號(hào)和密碼了,除此之外,使用GET提交數(shù)據(jù)還可能會(huì)造成Cross-site request forgery攻擊。

        Get是向服務(wù)器發(fā)索取數(shù)據(jù)的一種請(qǐng)求,而Post是向服務(wù)器提交數(shù)據(jù)的一種請(qǐng)求,在FORM(表單)中,Method默認(rèn)為"GET",實(shí)質(zhì)上,GET和POST只是發(fā)送機(jī)制不同,并不是一個(gè)取一個(gè)發(fā)!

      下面演示一個(gè)例子:

      //這段代碼是一個(gè)注冊(cè)的Ajax異步提交的過(guò)程,寫(xiě)的簡(jiǎn)單些
      function Registers() {
                      $.ajax({
                          type:
      'POST',
                          url:
      "../AjaxPro.aspx?_Action=Registers",
                          data: {
      "Email": Email, "loginId": loginId, "password": password },
                          success:
      function (Msg) {
                              alert(Msg);
                          }
                      });
                  }

      這里用到的是POST的方式,在后臺(tái)接受處理的代碼如下

      protectedvoid Page_Load(object sender, EventArgs e)
      {
      //在這里Action的值是在URL地址欄中的所以通過(guò)Request.QueryString來(lái)獲取
      string Action = Request.QueryString["_Action"].ToString();
      switch (Action)
      {
      case"Registers":
      Msg
      = Registers();
      Response.Write(Msg);
      break;
      default:
      break;
      }

      }
      publicstring Registers()
      {
      //Email是POST過(guò)來(lái)的所以用Request來(lái)獲取值
      string Email = Request["Email"].ToString();
      string loginId = Request["loginId"].ToString();
      string password = Request["password"].ToString();
      DateTime date
      = DateTime.Now;
      //下面就是對(duì)數(shù)據(jù)庫(kù)的操作了
      StringBuilder strSql =new StringBuilder();
      strSql.Append(
      "insert into Tab_Reg(");
      strSql.Append(
      "UserName,Pwd,Email,Date)");
      strSql.Append(
      " values (");
      strSql.Append(
      "@UserName,@Pwd,@Email,@Date)");
      strSql.Append(
      ";select @@IDENTITY");
      SqlParameter[] parameters
      = {
      new SqlParameter("@UserName", SqlDbType.VarChar,30),
      new SqlParameter("@Pwd", SqlDbType.VarChar,30),
      new SqlParameter("@Email", SqlDbType.VarChar,30),
      new SqlParameter("@Date", SqlDbType.DateTime)};
      parameters[
      0].Value = loginId;
      parameters[
      1].Value = password;
      parameters[
      2].Value = Email;
      parameters[
      3].Value = date;
      using (SqlConnection conn =new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString.ToString()))
      {
      using (SqlCommand cmd =new SqlCommand())
      {
      try
      {
      if (conn.State != ConnectionState.Open)
      conn.Open();
      cmd.Connection
      = conn;
      cmd.CommandText
      = strSql.ToString();
      cmd.CommandType
      = CommandType.Text;//cmdType;
      if (parameters !=null)
      {
      foreach (SqlParameter parameter in parameters)
      {
      if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && (parameter.Value ==null))
      {
      parameter.Value
      = DBNull.Value;
      }
      cmd.Parameters.Add(parameter);
      }
      }
      object obj = cmd.ExecuteScalar();
      cmd.Parameters.Clear();
      if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
      {
      Msg
      ="添加失!";
      return Msg;
      }
      else
      {
      Msg
      ="添加成功!";
      return Msg;
      }
      }
      catch(Exception ex)
      {
      return ex.ToString();
      }
      finally
      {
      conn.Close();
      }
      }
      }
      }

      這只是Post值的是后,待續(xù)GET

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門(mén)評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(3)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)