Get與POST的理解

  針對GET& POST的掌握能夠說是迷迷糊糊的,今天特地拿出來好好整理一下,便於掌握理解。html

  在服務器端都有一個用來標識資源位置的符號,被稱爲統一資源標識(URL)。web

  URI有兩種形式。分別爲URL何URN. 數據庫

  URL瀏覽器

  統一資源定位符(URL,英語UniformResourceLocator的縮寫)也被稱爲網頁地址,是因特網上標準的資源的地址。 緩存

  URL的格式由下列三部分組成: (協議)://(主機名):(端口號) / (文件路徑)/(文件名) 安全

  第一部分是協議(或稱爲服務方式);服務器

  第二部分是存有該資源的主機IP地址(有時也包括端口號);網絡

  第三部分是主機資源的具體地址。,如目錄和文件名等。架構

  第一部分和第二部分之間用「://」符號隔開,第二部分和第三部分用「/」符號隔開。第一部分和第二部分是不可缺乏的,第三部分有時能夠省略。如今幾乎全部的URI都是URL。框架

 URN

  統一資源名稱 (Uniform Resource Name, URN),惟一標識一個實體的標識符,可是不能給出實體的位置。系統能夠先在本地尋找一個實體,在它試着在Web上找到該實體以前。它也容許Web位置改變,然而這個實體卻仍是可以被找到。URN 能夠提供一種機制,用於查找和檢索定義特定命名空間的架構文件。儘管普通的 URL 能夠提供相似的功能,可是在這方面,URN 更增強大而且更容易管理,由於 URN 能夠引用多個 URL。與 URL 不一樣,URN 與地址無關。URN 和 URL 都屬於 URI。URN在web中主要應用是下拉菜單的製做。使用URN時下拉菜單的易擴展性將會獲得很大的提升。

  HTTP

  Http定義了與服務器交互的不一樣方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是資源描述符,咱們能夠這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操做。到這裏,你們應該有個大概的瞭解了,GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息。

  1.根據HTTP規範,GET用於信息獲取,並且應該是安全的和冪等的。

  (1).所謂安全的意味着該操做用於獲取信息而非修改信息。換句話說,GET 請求通常不該產生反作用。就是說,它僅僅是獲取資源信息,就像數據庫查詢同樣,不會修改,增長數據,不會影響資源的狀態。

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

  (2).冪等的意味着對同一URL的多個請求應該返回一樣的結果。

  2.根據HTTP規範,POST表示可能修改變服務器上的資源的請求。繼續引用上面的例子:仍是新聞以網站爲例,讀者對新聞發表本身的評論應該經過POST實現,由於在評論提交後站點的資源已經不一樣了,或者說資源被修改了。

 對於HTTP原理性的東西,人們在實際項目中並無遵照:  

  1.不少人貪方便,更新資源時用了GET,由於用POST必需要到FORM(表單),這樣會麻煩一點。

  2.對資源的增,刪,改,查操做,其實均可以經過GET/POST完成,不須要用到PUT和DELETE。

  3.另一個是,早期的Web MVC框架設計者們並無有意識地將URL看成抽象的資源來看待和設計,因此致使一個比較嚴重的問題是傳統的Web MVC框架基本上都只支持GET和POST兩種HTTP方法,而不支持PUT和DELETE方法。

GET & POST區別

  1.請求數據的位置,

    GET 請求會把請求的數據放在url的後面用?分割,提交的每一項使用&來分割,也就是將請求的數據放在請求的頭部。若是是中文或者其餘字符使用BASE64來加密;而POST藉助form將請求的數據放在請求的請求體。

  2.長度的限制

    針對這個長度的限制,是很是有爭議的說法。HTTP協議明確地指出了,HTTP頭和Body都沒有長度的要求。而對於URL長度上的限制,有兩方面的緣由形成:

    a.瀏覽器。聽說早期的瀏覽器會對URL長度作限制。聽說IE對URL長度會限制在2048個字符內(統一承認)

    b.服務器。URL長了,對服務器處理也是一種負擔。

  3.安全性

    因爲GET是將參數放在url的後面,直接暴露出來,因此會相對不安全。這是由於使用GET的數據可能會被緩存起來,這樣就會致使所謂的不安全。知乎中總結的一些使用GET的場景:

  - 請求中的URL能夠被手動輸入

  - 請求中的URL能夠被存在書籤裏,或者歷史裏,或者快速撥號裏面,或者分享給別人。
  - 請求中的URL是能夠被搜索引擎收錄的。
  - 帶雲壓縮的瀏覽器,好比Opera mini/Turbo 2, 只有GET才能在服務器端被預取的。
  - 請求中的URL能夠被緩存。

  絕大部分的get請求會被CDN緩存,這樣一來就會減緩服務的負載。

【參考】

  1.http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

  2.http://blog.csdn.net/csh624366188/article/details/8568621

  3.http://www.nowamagic.net/librarys/veda/detail/1919

相關文章
相關標籤/搜索