1. 程式人生 > >詳解HTTP中GET和POST的區別

詳解HTTP中GET和POST的區別

除了GET和POST這兩種方式以後,還有哪些呢?我接下來就先對HTTP中定義的操作進行總結一下。

HTTP中定義的有哪些?

我們都知道,使用URL可以確定一個資源所在的位置,那麼我們確定這個資源以後,是如何對這個資源進行處理的呢?

Http協議定義了客戶端與伺服器互動的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL定位了這個資源,而HTTP中的GET,POST,PUT,DELETE就是對應著對這個資源的查,改,增,刪4個操作。到這裡,大家應該有個大概的瞭解了,GET一般用於獲取/查詢資源資訊,而POST一般用於更新資源資訊。那麼,除了上面說的四種方法,HTTP還有其它方法麼?其實HTTP中定義了以下幾種請求方法:

  • GET方法;
  • HEAD方法;
  • PUT方法;
  • POST方法;
  • TRACE方法;
  • OPTIONS方法;
  • DELETE方法。

現在就對上述的所有方法都介紹一下,增加大家對這些方法的一個總體認識。

Get是最常用的方法,通常用於請求伺服器傳送某個資源。

HEAD方法與GET方法的行為很類似,但伺服器在響應中只返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查,使用HEAD,我們可以更高效的完成以下工作:

  1. 在不獲取資源的情況下,瞭解資源的一些資訊,比如資源型別;
  2. 通過檢視響應中的狀態碼,可以確定資源是否存在;
  3. 通過檢視首部,測試資源是否被修改。

PUT方法是讓伺服器用請求的主體部分來建立一個由所請求的URL命名的新文件;如果那個文件存在的話,就用這個主體來代替它。

POST方法向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理。

TRACE方法會在目的伺服器端發起一個“迴環”診斷,我們都知道,客戶端在發起一個請求時,這個請求可能要穿過防火牆、代理、閘道器、或者其它的一些應用程式。這中間的每個節點都可能會修改原始的HTTP請求,TRACE方法允許客戶端在最終將請求傳送伺服器時,它變成了什麼樣子。由於有一個“迴環”診斷,在請求最終到達伺服器時,伺服器會彈回一條TRACE響應,並在響應主體中攜帶它收到的原始請求報文的最終模樣。這樣客戶端就可以檢視HTTP請求報文在傳送的途中,是否被修改過了。

OPTIONS方法用於獲取當前URL所支援的方法。若請求成功,則它會在HTTP頭中包含一個名為“Allow”的頭,值是所支援的方法,如“GET, POST”。

DELETE方法就是請求伺服器刪除指定URL所對應的資源。但是,客戶端無法保證刪除操作一定會被執行,因為HTTP規範允許伺服器在不通知客戶端的情況下撤銷請求。

上面對HTTP所支援的所有方法大體上進行了介紹,但是在實際開發中,我們使用的更多的是GET和POST,而且在面試的時候,也經常會問GET和POST的區別,這裡就著重對GET和POST的區別進行總結。

我們的誤區

我記得我上大學那會,就問過老師,GET和POST有啥區別,老師就簡單的告訴我,POST比GET安全,後來,我才發現,我被老師騙了。那麼,對於GET和POST我們究竟還有哪些誤區呢?

  • 誤區一:POST可以比GET提交更多更長的資料? 由於使用GET方法提交資料時,資料會以&符號作為分隔符的形式,在URL後面新增需要提交的引數,有人就會說了,瀏覽器位址列輸入的引數是有限的,而POST不用再位址列輸入,所以POST就比GET可以提交更多的資料。難道真的是這樣的麼?

    而實際上,URL不存在引數上限的問題,HTTP協議規範沒有對URL長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。 同時,POST是沒有大小限制的,HTTP協議規範也沒有進行大小限制。POST資料是沒有限制的,起限制作用的是伺服器的處理程式的處理能力。 總歸一句話,這個限制是針對所有HTTP請求的,與GET、POST沒有多少關係。

  • 誤區二:POST比GET安全? 首先,我們要承認安全的概念有很多種,要是從最基本的肉眼看到就不安全,肉眼看不到那就是安全的概念說呢,GET確實沒有POST安全,畢竟小白使用者確實可以看到在URL中帶有的資料資訊,這個你無法狡辯。那麼要是往嚴謹了說呢,POST是不是要比GET安全呢?其實不是的。

    上面也說了,GET將提交到伺服器的資料新增到URL中了,可見;雖然POST的資料,你肉眼看不到,你抓個包看看,在HTTP包的包體中,我們提交的資料時仍然可見的;所以說,從這方面來說,POST也是以五十步笑百步了。

抓個包看看

我們來抓個包看看,做個試驗:

  1. 開啟這個連結,去cn.cocos2d-x.org註冊個賬號;
  2. 填好註冊資訊;
  3. 開啟Wireshare進行抓包;
  4. 在註冊頁面,提交註冊資訊。

檢視抓包資訊並分析,以下是我抓到的包的一些資訊:

"192.168.199.125","117.121.57.62","HTTP","1304","POST /sso/signup?client_id=9&url=http://cn.cocos2d-x.org/main/sso_return HTTP/1.1  (application/x-www-form-urlencoded)"

192.168.199.125是我的本機地址;117.121.57.62是請求的目的地址。1304是包的長度;接下來的資料才是我們需要關注的重點,可以很明顯的看到,是以POST的方式向伺服器傳送註冊資訊的。我們再來看看傳送了那些資訊,由於使用的POST方法,我們無法從URL中得到任何有用的東西,那我們就從HTTP包體中看看。內容如下:

username=JellyThink&password=e10adc3949ba59abbe56e057f20f883e&repassword=e10adc3949ba59abbe56e057f20f883e&email=jellythink%40163.com&vcode=5gp8&rgpermit=1

看到了嗎?裡面都是我輸入的資訊,具體如下:

  1. username=JellyThink
  2. password=e10adc3949ba59abbe56e057f20f883e(MD5碼)
  3. repassword=e10adc3949ba59abbe56e057f20f883e
  4. [email protected]
  5. vcode=5gp8(驗證碼)

現在你還覺POST安全嗎?關於GET方式,我這裡就不再舉例說明了。你也趕緊動手去抓個包看看吧。

最後呢?

最後呢,很多時候,大家都覺的使用GET很方便,畢竟使用POST要用到Form,但是,你要知道,你使用GET方法時,瀏覽器可能會快取你的地址等資訊,還會留下歷史記錄,而對於POST方法呢,則不會進行快取。以後在開發中,一定要分清楚GET和POST的使用場合,什麼時候要使用GET,什麼時候要使用POST,自己做到心中有數。

可能,你在Google類似的文章的時候,可能會看到分析POST和PUT區別的文章,這又是一類糾結的東西,更多的時候,我們分析這種東西都是分實際情景,結合設計者的語義去使用,慢慢體會吧。至少我現在也不知道如何準確的區分POST和PUT。當然了,我還是要推薦一位大牛的文章,有時間去拜讀一下吧,《REST當中為什麼要使用HTTP PUT》。

各位,聖誕快樂。

果凍想,玩程式碼,玩技術!

2014年12月25日 於深圳。


相關推薦

HTTPGETPOST區別

除了GET和POST這兩種方式以後,還有哪些呢?我接下來就先對HTTP中定義的操作進行總結一下。 HTTP中定義的有哪些? 我們都知道,使用URL可以確定一個資源所在的位置,那麼我們確定這個資源以後,是如何對這個資源進行處理的呢? Http協議定義了客戶端與伺服器互動的不同方法,最基本的方法有4種,分別是G

HTTPGETPOST區別,不是你看過的標準答案!

防吐槽宣告:本文適合程式設計師新人,自認閱文無數、技術超叼的大神不用看。 GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。 你

HTTPGETPOST方法的區別

HTTP請求的方法有很多:GET、POST、HEAD、TRACE、OPTIONS等,但是GET和POST是兩個最常用的方法。 GET是最簡單的一種請求方法,其主要功能是從伺服器端獲取使用者所需資源,並將其作為響應返回給客戶端,需要注意的是:GET方法的作用主要用來獲取伺

HTTP 請求 Get Post 區別

一、原理區別 一般我們在瀏覽器輸入一個網址訪問網站都是GET請求;再FORM表單中,可以通過設定Method指定提交方式為GET或者POST提交方式,預設為GET提交方式。 HTTP定義了與伺服器互動的不同方法,其中最基本的四種:GET,POST,PUT,DELETE,H

【Java】——httpgetpost請求的區別

          GET和POST請求都是http的請求方式,使用者通過不同的http請求方式完成對資源(URL)的操作,GET、POST、PUT、DELETE就是對應著對這個資源的查,該,增,刪四個操作,具體點來講GET一般用於獲取|查詢資源資訊,而POST一般用於更新

HttpGETPOST區別

轉載 1: GET請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),以?分割URL和傳輸資料,引數之間以&相連。 POST把提交的資料則放置在是HTTP包的包體中。 2: GET是通過URL提交資料,那麼GET可提交的資料量就跟URL的長度有直接關係了

【面試】HTTPgetpost請求的區別

面試時候遇到的一個問題。面試官想聽我說二者有什麼主要區別,二者均作為請求方法,使用場合為什麼不一致,在安全性上為什麼get比post要弱等等。這道題其實多多少少都能說一些,但本著追其根由的想法,回來順手查了查資料,總結如下。如果下次面試的你和我一樣碰到這個問題,

PHPgetpost區別

在這裡為大家整理了兩種get和post的區別。 第一種: GET在瀏覽器回退時是無害的,而POST會再次提交請求。 GET產生的URL地址可以被Bookmark(標記),而POST不可以。  GET請求會被瀏覽器主動cache(儲存),而POST不會,除非手動設定。&nbs

HTTPGETPOST對比

HTTP中GET和POST對比 0x01 摘要 網上有不少文章直接拿出結論即GET比POST快,但是POST比GET安全,卻沒有給出詳細的解釋,我查了一些資料同大家分享下。 0x02 效率 GET操作有快取,可以使多次客戶端相同請求值會對伺服器傳送一個請求。

HTTP GETPOST區別

我們都知道GET和POST是HTTP請求的兩種基本方法,最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。 很多權威網站總結出的他們的區別: GET在瀏覽器回退時是無害的,而POST會再次提交請求。 GET產生的URL地址可以被Bookmark,而POST不可以。

http協議getpost區別

httpHttp定義了與服務器交互的不同方法,最基本的方法有4種,分別是GET,POST,PUT,DELETEURL全稱是資源描述符,我們可以這樣認 為:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應著對這個資源的查 ,改 ,增 ,刪 4個操作。到這裏,

Http協議GETPOST請求方法的區別

出場 請求參數 底層 情況下 -type 過去 firefox url sym GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。 最直觀的區別就是GET把參數包含在URL中,POST通過request body傳遞

HTTP請求協議GETPOST兩種基本請求方法的區別

GET在瀏覽器回退時是無害的,而POST會再次提交請求。   GET產生的URL地址可以被Bookmark,而POST不可以。   GET請求會被瀏覽器主動cache,而POST不會,除非手動設定。   GET請求只能進行url編碼

HTTP協議GETPOST兩種基本請求方法的區別

GET和POST兩種基本請求方法的區別 GET和POST是HTTP請求的兩種基本方法,要說它們的區別,接觸過WEB開發的人都能說出一二。   最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。   你可能自己寫過無數個G

AJAXgetpost請求

一、get()和post()基本區別1.get 是把引數資料佇列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬

HTTP方法GETPOST區別

HTTP1.1中的八個方法: 1.GET     請求獲取Request-URI所標識的資源 2.POST    在Request-URI所標識的資源後附加新的資料 3.HEAD    請求獲取由

http協議getpost區別(轉)

1.HTTP請求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP請求中,第一行必須是一個請求行(request line),用來說明請

PHP常用的超全局變量 表單getpost提交方式的區別 session與cookie的區別 GD庫是做什麽用的

屬性 過程 生成報表 用戶訪問 服務器 接收 file pla request PHP中常用的超全局變量 $_GET ----->get傳送方式$_POST ----->post傳送方式$_REQUEST ----->可以接收到get和post兩種方式的值

Http 請求 GETPOST區別

瀏覽器 pos 因此 header 區別 數據 服務 ref 需要 GET和POST還有一個重大區別,簡單的說: GET產生一個TCP數據包;POST產生兩個TCP數據包。 長的說: 對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應2

form表單getpost兩種提交方式的區別

name bsp inpu get div post input 普通 表單 一、form表單中get和post兩種提交方式的區別?   1.get提交表單中的內容在鏈接處是可見的。post不可見   2.post相比於get是安全的   3.post不收限制大小,get有