1. 程式人生 > >HTTP的GET請求和POST請求

HTTP的GET請求和POST請求

1、HTTP請求概述

        在前面有一篇文章對HTTP協議有詳細的描述,這裡就不再過多的做說明,只是簡單的作為這篇文章的引子。

        HTTP協議又被稱為超文字傳輸協議,它的的設計目的是保證客戶機與伺服器之間的通訊。HTTP 的工作方式是客戶端與伺服器之間的請求-應答協議。在客戶端和伺服器之間進行請求-響應時,有兩個最基本的請求方式:GET 和 POST。

        其中,GET請求表示從指定的資源請求資料,POST請求表示向指定的資源提交要被處理的資料。

2、HTTP請求格式

        在HTTP請求中,首先是請求行,注意這裡的請求行一定要放在最前面;其次,是請求頭,英文表示為header;然後會空一行,緊接著就可以是請求的具體內容了,一般稱之為請求體,request-body。給出一個圖示如下:


3、GET請求與POST請求對比

        GET請求與POST請求有一些異同點,主要有以下幾點問題:

(1)、GET請求和POST請求都是客戶端與伺服器之間互動,請求--應答模式的協議

(2)、GET請求是通過URL直接請求資料,資料資訊可以在URL中直接看到,比如瀏覽器訪問;而POST請求是放在請求頭中的,我們是無法直接看到的;

(3)、GET提交有資料大小的限制,一般是不超過1024個位元組,而這種說法也不完全準確,HTTP協議並沒有設定URL位元組長度的上限,而是瀏覽器做了些處理,所以長度依據瀏覽器的不同有所不同;POST請求在HTTP協議中也沒有做說明,一般來說是沒有設定限制的,但是實際上瀏覽器也有預設值。總體來說,少量的資料使用GET,大量的資料使用POST。

(4)、GET請求因為資料引數是暴露在URL中的,所以安全性比較低,比如密碼是不能暴露的,就不能使用GET請求;POST請求中,請求引數資訊是放在請求頭的,所以安全性較高,可以使用。在實際中,涉及到登入操作的時候,儘量使用HTTPS請求,安全性更好。

        下面給出一副圖示,說明一下HTTP中GET與POST請求的差異:


4、使用步驟:

        在Android中使用HTTP請求,主要步驟如下:

(1)、例項化一個HttpGet(或HttpPost)物件,將請求的URL地址通過構造方法傳給HttpGet(或HttpPost)物件;
(2)、使用DefaultHttpClient類的execute方法傳送GET或POST 請求,並返回HttpResponse物件;
(3)、通過HttpResponse介面的getEntity方法返回響應資訊。

5、例項程式碼

       給出一個在實際應用中的一個POST請求的程式碼片段:

params = new LinkedList<BasicNameValuePair>(); 
params.add(new BasicNameValuePair("param1", "Post方法")); 
params.add(new BasicNameValuePair("param2", "第二個引數")); 

try { 
	HttpPost post = new HttpPost(baseUrl); 
	post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將引數填入POST Entity中 

	HttpResponse response = httpClient.execute(post); //執行POST方法 
	resCode = response.getStatusLine().getStatusCode()); //獲取響應碼 
	result = EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容 

} catch (UnsupportedEncodingException e) { 
	// TODO Auto-generated catch block 
	e.printStackTrace(); 
} catch (ClientProtocolException e) { 
	// TODO Auto-generated catch block 
	e.printStackTrace(); 
} catch (IOException e) { 
	// TODO Auto-generated catch block 
	e.printStackTrace(); 
} 

6、HTTP請求狀態碼意義

        HTTP請求中,主要有這樣幾個型別:1XX:表示資訊提示,2XX:表示成功,3XX:表示重定向,4XX:表示客戶端請求錯誤,5XX:表示伺服器錯誤。常見的幾個HTTP請求狀態碼意義如下:

200 OK: 找到了該資源,並且一切正常。
304 NOT MODIFIED: 該資源在上次請求之後沒有任何修改。這通常用於瀏覽器的快取機制。
401 UNAUTHORIZED: 客戶端無權訪問該資源。這通常會使得瀏覽器要求使用者輸入使用者名稱和密碼,以登入到伺服器。
403 FORBIDDEN: 客戶端未能獲得授權。這通常是在401之後輸入了不正確的使用者名稱或密碼。
404 NOT FOUND: 在指定的位置不存在所申請的資源。
505 NOT SUPPORTED:伺服器不支援請求中所指明的HTTP版本