筆記

          way

          HTTP GET/POST請求區別

          1. HTTP 定義了與服務器交互的不同方法,最基本的方法是 GET 和 POST。事實上 GET 適用于多數請求,而保留 POST 僅用于更新站點。根據 HTTP 規范,GET 用于信息獲取,而且應該是 安全的和 冪等的。所謂安全的意味著該操作用于獲取信息而非修改信息。換句話說,GET 請求一般不應產生副作用。冪等的意味著對同一 URL 的多個請求應該返回同樣的結果。完整的定義并不像看起來那樣嚴格。從根本上講,其目標是當用戶打開一個鏈接時,她可以確信從自身的角度來看沒有改變資源。比如,新聞站點的頭版不斷更新。雖然第二次請求會返回不同的一批新聞,該操作仍然被認為是安全的和冪等的,因為它總是返回當前的新聞。反之亦然。POST 請求就不那么輕松了。POST 表示可能改變服務器上的資源的請求。仍然以新聞站點為例,讀者對文章的注解應該通過 POST 請求實現,因為在注解提交之后站點已經不同了(比方說文章下面出現一條注解);
          2. 在FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之后,以?分開與url分開。字母數字字符原樣發送,但空格轉換為“+“號,其它符號轉換為%XX,其中XX為該符號以16進制表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
          3. GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

          Web 上最常用的兩種 Http 請求就是 Get 請求和 Post 請求了。我們在做 java web 開發時,也總會在 servlet 中通過 doGet 和 doPost 方法來處理請求;更經常地,我們會在 doGet 方法的實現中調用 doPost 方法。盡管做了近兩年的 web 開發,我對諸如 Get 請求和 Post 請求的基本概念仍不是十分了解。近日閱讀《 javascript 高級程序設計》重新整理了一下 Get 請求和 Post 請求的概念,算是讀書筆記吧。

          Get 是從服務器上獲取數據,這是最常見的請求類型。每次在瀏覽器中輸入 URL 打開頁面時,就是向服務器發送一個 Get 請求。 Get 請求的參數是用問號追加到 URL 結尾,后面跟著用&連接起來的名稱/值對。比如網址 http://bt.neupioneer.com/viewthread.php?tid=87813 ,其中 tid 為參數名, 87813 為參數的值。在編程中,使用 Get 最多的地方就是超鏈接列表,其中的參數多是從數據庫讀出的字段拼接而成。在 Ajax 中,我們也經常使用 Get ,通過提取出頁面的標簽值,拼成串后構造一個 URL 。 Get 在使用上是有限制的, URL 的最大長度為 2KB ,因此,如果表單中包含textarea這樣的大文本段,就不要用Get了。對于表單來說, Get 是把參數數據隊列加到提交表單的 ACTION 屬性所指的 URL 中,值和表單內各個字段一一對應,通過 URL 可以看到中傳遞的參數。因此,相比于 Post ,它是不安全的。

          Post 的使用場合多是在表單提交的地方,因為和 Get 相比, Post 可以發送更多的數據,《 javascript 高級程序設計》中說最多可以發送 2GB ,這多少讓我不太相信,網上一些文章說 IIS4 中最大量為 80KB , IIS5 中為 100KB ,不知道 Tomcat 中的情況如何。 Post 是通過 HTTP Post 機制,將表單內各個字段與其內容放置在 HTML Header 內一起傳送到 ACTION 屬性所指的 URL 地址。 和 Get 相比, Post 的內容是不會在 URL 中顯現出來的,這多少是安全一些的。 我在做登錄這樣的表單時,只是將請求方式設為 Post ,使得用戶名和密碼信息不在瀏覽器中顯現,但不清楚的是,是否有更好的方法加密密碼等信息(實在不知道如果請求不傳到服務器的話,怎么對未知的請求加密,清楚的朋友不妨給個解決方案)。在 Ajax 中,如果要和服務器交互,記得加上 request.setRequestHeader(“Content-Type”,”application/x-www-urlencoded”); 這一腳本,盡管很多 Ajax 教材中都提到了這一點。另外要說的是,被傳遞的參數是要經過編碼的。在 javascript 中,編碼函數是 encodeURIComponent(xx) 。  
              以上轉自 http://blog.csdn.net/yoland/archive/2009/03/19/4005740.aspx
          一個get的發送請求例子:
          GET /select/selectBeerTaste.jsp?color=dark&taste=malty HTTP/1.1
          Host: www.wickedlysmart.com
          User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/
          20030624 Netscape/7.1
          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
          plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
          Accept-Language: en-us,en;q=0.5
          Accept-Encoding: gzip,deflate
          Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
          Keep-Alive: 300
          Connection: keep-alive

          一個post的發送請求例子:
          POST /advisor/selectBeerTaste.do HTTP/1.1
          Host: www.wickedlysmart.com
          User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4) Gecko/
          20030624 Netscape/7.1
          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/
          plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
          Accept-Language: en-us,en;q=0.5
          Accept-Encoding: gzip,deflate
          Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
          Keep-Alive: 300
          Connection: keep-alive
          color=dark&taste=malty (Request headers 后面有一個傳參數的body)
          兩個例子的紅色的部分很好的看出了get和post傳參數區別

          posted on 2009-11-22 21:12 yuxh 閱讀(1726) 評論(0)  編輯  收藏 所屬分類: j2ee

          導航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          收藏夾

          博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜兴市| 根河市| 岫岩| 泰州市| 迁西县| 格尔木市| 石屏县| 沈阳市| 榆中县| 濮阳县| 个旧市| 渭源县| 灵石县| 阿巴嘎旗| 三门县| 临猗县| 韩城市| 罗田县| 罗山县| 东源县| 江永县| 衢州市| 徐州市| 临沧市| 怀集县| 虎林市| 房产| 湛江市| 太仓市| 辰溪县| 司法| 湄潭县| 土默特左旗| 石柱| 句容市| 富锦市| 嵊泗县| 望奎县| 福鼎市| 睢宁县| 芦溪县|