2 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
1、HTTP請(qǐng)求概述
在前面有一篇文章對(duì)HTTP協(xié)議有詳細(xì)的描述,這里就不再過多的做說明,只是簡(jiǎn)單的作為這篇文章的引子。
HTTP協(xié)議又被稱為超文本傳輸協(xié)議,它的的設(shè)計(jì)目的是保證客戶機(jī)與服務(wù)器之間的通信。HTTP 的工作方式是客戶端與服務(wù)器之間的請(qǐng)求-應(yīng)答協(xié)議。在客戶端和服務(wù)器之間進(jìn)行請(qǐng)求-響應(yīng)時(shí),有兩個(gè)最基本的請(qǐng)求方式:GET 和 POST。
其中,GET請(qǐng)求表示從指定的資源請(qǐng)求數(shù)據(jù),POST請(qǐng)求表示向指定的資源提交要被處理的數(shù)據(jù)。
2、HTTP請(qǐng)求格式
在HTTP請(qǐng)求中,首先是請(qǐng)求行,注意這里的請(qǐng)求行一定要放在最前面;其次,是請(qǐng)求頭,英文表示為header;然后會(huì)空一行,緊接著就可以是請(qǐng)求的具體內(nèi)容了,一般稱之為請(qǐng)求體,request-body。給出一個(gè)圖示如下:
3、GET請(qǐng)求與POST請(qǐng)求對(duì)比
GET請(qǐng)求與POST請(qǐng)求有一些異同點(diǎn),主要有以下幾點(diǎn)問題:
(1)、GET請(qǐng)求和POST請(qǐng)求都是客戶端與服務(wù)器之間交互,請(qǐng)求--應(yīng)答模式的協(xié)議
(2)、GET請(qǐng)求是通過URL直接請(qǐng)求數(shù)據(jù),數(shù)據(jù)信息可以在URL中直接看到,比如瀏覽器訪問;而POST請(qǐng)求是放在請(qǐng)求頭中的,我們是無法直接看到的;
(3)、GET提交有數(shù)據(jù)大小的限制,一般是不超過1024個(gè)字節(jié),而這種說法也不完全準(zhǔn)確,HTTP協(xié)議并沒有設(shè)定URL字節(jié)長(zhǎng)度的上限,而是瀏
覽器做了些處理,所以長(zhǎng)度依據(jù)瀏覽器的不同有所不同;POST請(qǐng)求在HTTP協(xié)議中也沒有做說明,一般來說是沒有設(shè)置限制的,但是實(shí)際上瀏覽器也有默認(rèn)
值??傮w來說,少量的數(shù)據(jù)使用GET,大量的數(shù)據(jù)使用POST。
(4)、GET請(qǐng)求因?yàn)閿?shù)據(jù)參數(shù)是暴露在URL中的,所以安全性比較低,比如密碼是不能暴露的,就不能使用GET請(qǐng)求;POST請(qǐng)求中,請(qǐng)求參數(shù)信息是放在請(qǐng)求頭的,所以安全性較高,可以使用。在實(shí)際中,涉及到登錄操作的時(shí)候,盡量使用HTTPS請(qǐng)求,安全性更好。
下面給出一副圖示,說明一下HTTP中GET與POST請(qǐng)求的差異:
4、使用步驟:
在Android中使用HTTP請(qǐng)求,主要步驟如下:
(1)、實(shí)例化一個(gè)HttpGet(或HttpPost)對(duì)象,將請(qǐng)求的URL地址通過構(gòu)造方法傳給HttpGet(或HttpPost)對(duì)象;
(2)、使用DefaultHttpClient類的execute方法發(fā)送GET或POST 請(qǐng)求,并返回HttpResponse對(duì)象;
(3)、通過HttpResponse接口的getEntity方法返回響應(yīng)信息。
5、實(shí)例代碼
給出一個(gè)在實(shí)際應(yīng)用中的一個(gè)POST請(qǐng)求的代碼片段:
[java] view plain copy print?
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二個(gè)參數(shù)"));
try {
HttpPost post = new HttpPost(baseUrl);
post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數(shù)填入POST Entity中
HttpResponse response = httpClient.execute(post); //執(zhí)行POST方法
resCode = response.getStatusLine().getStatusCode()); //獲取響應(yīng)碼
result = EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應(yīng)內(nèi)容
} 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請(qǐng)求狀態(tài)碼意義
HTTP請(qǐng)求中,主要有這樣幾個(gè)類型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客戶端請(qǐng)求錯(cuò)誤,5XX:表示服務(wù)器錯(cuò)誤。常見的幾個(gè)HTTP請(qǐng)求狀態(tài)碼意義如下:
200 OK: 找到了該資源,并且一切正常。
304 NOT MODIFIED: 該資源在上次請(qǐng)求之后沒有任何修改。這通常用于瀏覽器的緩存機(jī)制。
401 UNAUTHORIZED: 客戶端無權(quán)訪問該資源。這通常會(huì)使得瀏覽器要求用戶輸入用戶名和密碼,以登錄到服務(wù)器。
403 FORBIDDEN: 客戶端未能獲得授權(quán)。這通常是在401之后輸入了不正確的用戶名或密碼。
404 NOT FOUND: 在指定的位置不存在所申請(qǐng)的資源。
505 NOT SUPPORTED:服務(wù)器不支持請(qǐng)求中所指明的HTTP版本
- 2 回答
- 0 關(guān)注
- 1982 瀏覽
添加回答
舉報(bào)