Android開發之http協議解析,android開發協議

來源:互聯網
上載者:User

Android開發之http協議解析,android開發協議
HTTP請求模型


一、串連至Web伺服器一個用戶端應用(如Web瀏覽器)開啟到Web伺服器的HTTP連接埠的一個通訊端(預設為80)。


例如:http://www.myweb.com:8080/index.html
在Java中,這將等同於代碼:
Soceet socket=new Socket("www.myweb.com",8080);
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();


二、發送HTTP請求通過串連,用戶端寫一個ASCII文本請求行,後跟0或多個HTTP頭標,一個空行和實現請求的任意資料。
一個請求由四個部分組成:請求行、要求標頭標、空行和請求資料
1.請求行:請求行由三個標記組成:要求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1
HTTP規範定義了8種可能的要求方法:
GET            檢索URI中標識資源的一個簡單請求
HEAD            與GET方法相同,伺服器只返回狀態行和頭標,並不返回請求文檔
POST            伺服器接受被寫入用戶端輸出資料流中的資料的請求
PUT            伺服器儲存請求資料作為指定URI新內容的請求
DELETE            伺服器刪除URI中命名的資源的請求
OPTIONS        關於伺服器支援的要求方法資訊的請求
TRACE            Web伺服器反饋Http請求和其頭標的請求
CONNECT        已文檔化但當前未實現的一個方法,預留做隧道處理
2.要求標頭標:由關鍵字/值對組成,每行一對,關鍵字和值用冒號(:)分隔。
要求標頭標通知伺服器有關於用戶端的功能和標識,典型的要求標頭標有:
User-Agent        用戶端廠家和版本
Accept            用戶端可識別的內容類型列表
Content-Length    附加到請求的資料位元組數
3.空行:最後一個要求標頭標之後是一個空行,發送斷行符號符和退行,通知伺服器以下不再有頭標。
4.請求資料:使用POST傳送資料,最常使用的是Content-Type和Content-Length頭標。


三、服務端接受請求並返回HTTP響應Web伺服器解析請求,定位指定資源。伺服器將資源副本寫至通訊端,在此處由用戶端讀取。
一個響應由四個部分組成;狀態行、回應標頭標、空行、響應資料
1.狀態行:狀態行由三個標記組成:HTTP版本、響應代碼和響應描述。
HTTP版本:向用戶端指明其可理解的最高版本。
響應代碼:3位的數字代碼,指出請求的成功或失敗,如果失敗則指出原因。
響應描述:為響應代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應碼:
1xx:資訊,請求收到,繼續處理
2xx:成功,行為被成功地接受、理解和採納
3xx:重新導向,為了完成請求,必須進一步執行的動作
4xx:用戶端錯誤:
2.回應標頭標:像要求標頭標一樣,它們指出伺服器的功能,標識出響應資料的細節。
3.空行:最後一個回應標頭標之後是一個空行,發送斷行符號符和退行,表明伺服器以下不再有頭標。
4.響應資料:HTML文檔和映像等,也就是HTML本身。


四、伺服器關閉串連,瀏覽器解析響應1.瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態碼。
2.然後解析每一個回應標頭標,頭標告知以下為若干位元組的HTML。
3.讀取響應資料HTML,根據HTML的文法和語義對其進行格式化,並在瀏覽器視窗中顯示它。
4.一個HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進行額外的請求,此過程迴圈多次。


五、無狀態串連HTTP模型是無狀態的,表明在處理一個請求時,Web伺服器並不記住來自同一用戶端的請求。


六、執行個體1.瀏覽器發出請求GET /index.html HTTP/1.1
伺服器返迴響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Content-Length: 119
Content-Type: text/html


<HTML>
<HEAD>
<LINK REL="stylesheet" HREF="index.css">
</HEAD>
<BODY>
<IMG SRC="image/logo.png">
</BODY>
</HTML>


2.瀏覽器發出請求GET /index.css HTTP/1.1
伺服器返迴響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 70
Content-Type: text/plane


h3{
    font-size:20px;
    font-weight:bold;
    color:#005A9C;
}


3.瀏覽器發出請求GET image/logo.png HTTP/1.1
伺服器返迴響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 1280
Content-Type: text/plane


{Binary image data follows}




(附錄)
1.HTTP規範:Internet工程制定組織(IETF)發布的RFC指定Internet標準,這些RFC被Internet研究發展機構廣泛接受。因為它們是標準文檔,故一般用正規語言編寫,如立法文標一樣。
2.RFC:RFC一旦被提出,就被編號且不會再改變,當一個標準被修改時,則給出一個新的RFC。作為標準,RFC在Internet上被廣泛採用。
3.HTTP的幾個重要RFC:
    RFC1945    HTTP 1.0 描述
    RFC2068    HTTP 1.1 初步描述
    RFC2616    HTTP 1.1 標準
4.資源標識符URI(Uniform Resource Identifter,URI)




HTTP參考


一、HTTP碼應碼響應碼由三位十進位數字組成,它們出現在由HTTP伺服器發送的響應的第一行。


響應碼分五種類型,由它們的第一位元字表示:
1.1xx:資訊,請求收到,繼續處理
2.2xx:成功,行為被成功地接受、理解和採納
3.3xx:重新導向,為了完成請求,必須進一步執行的動作
4.4xx:用戶端錯誤,請求包含語法錯誤或者請求無法實現
5.5xx:伺服器錯誤,伺服器不能實現一種明顯無效的請求


下表顯示每個響應碼及其含義:
100            繼續
101            封包交換協
200            OK
201            被建立
202            被採納
203            非授權資訊
204            無內容
205            重設內容
206            部分內容
300            多選項
301            永久地傳送
302            找到
303            參見其他
304            未改動
305            使用代理
307            暫時重新導向
400            錯誤請求
401            未授權
402            要求付費
403            禁止
404            未找到
405            不允許的方法
406            不被採納
407            要求代理授權
408            請求逾時
409            衝突
410            到期的
411            要求的長度
412            前提不成立
413            請求執行個體太大
414            請求URI太大
415            不支援的媒體類型
416            無法滿足的請求範圍
417            失敗的預期
500            內部伺服器錯誤
501            未被使用
502            網關錯誤
503            停用服務
504            網關逾時
505            HTTP版本未被支援


二、HTTP頭標題標由主鍵/值對組成。它們描述用戶端或者伺服器的屬性、被傳輸的資源以及應該實現串連。


四種不同類型的頭標:
1.通用頭標:即可用於請求,也可用於響應,是作為一個整體而不是特定資源與事務相關聯。
2.要求標頭標:允許用戶端傳遞關於自身的資訊和希望的響應形式。
3.回應標頭標:伺服器和於傳遞自身資訊的響應。
4.實體頭標:定義被傳送資源的資訊。即可用於請求,也可用於響應。


頭標格式:<name>:<value><CRLF>


下表描述在HTTP/1.1中用到的頭標
Accept            定義用戶端可以處理的媒體類型,按優先順序排序;
                        在一個以逗號為分隔的列表中,可以定義多種類型和使用萬用字元。例如:Accept: image/jpeg,image/png,*/*
Accept-Charset        定義用戶端可以處理的字元集,按優先順序排序;
                 在一個以逗號為分隔的列表中,可以定義多種類型和使用萬用字元。例如:Accept-Charset: iso-8859-1,*,utf-8
Accept-Encoding        定義用戶端可以理解的編碼機制。例如:Accept-Encoding:gzip,compress
Accept-Language    定義用戶端樂於接受的自然語言列表。例如:Accept-Language: en,de
Accept-Ranges        一個回應標頭標,它允許伺服器指明:將在給定的位移和長度處,為資源群組成部分的接受請求。
            該頭標的值被理解為請求範圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: none
Age            允許伺服器規定自伺服器產生該響應以來所經過的時間長度,以秒為單位。
            該頭標主要用於緩衝響應。例如:Age: 30
Allow            一個回應標頭標,它定義一個由位於請求URI中的次源所支援的HTTP方法列表。例如:Allow: GET,PUT
aUTHORIZATION        一個回應標頭標,用於定義訪問一種資源所必需的授權(域和被編碼的使用者ID與口令)。
            例如:Authorization: Basic YXV0aG9yOnBoaWw=
Cache-Control        一個用於定義緩衝指令的通用頭標。例如:Cache-Control: max-age=30
Connection        一個用於表明是否儲存socket串連為開放的通用頭標。例如:Connection: close或Connection: keep-alive
Content-Base        一種定義基本URI的實體頭標,為了在實體範圍內解析相對URLs。
            如果沒有定義Content-Base頭標解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
            例如:Content-Base: Http://www.myweb.com
Content-Encoding    一種介質類型修飾符,標明一個實體是如何編碼的。例如:Content-Encoding: zip
Content-Language    用於指定在輸入資料流中資料的自然語言類型。例如:Content-Language: en
Content-Length        指定包含於請求或響應中資料的位元組長度。例如:Content-Length:382
Content-Location        指定包含於請求或響應中的資源定位(URI)。
            如果是一絕。對URL它也作為被解析實體的相對URL的出發點。
            例如:Content-Location: http://www.myweb.com/news
Content-MD5        實體的一種MD5摘要,用作校正和。
            發送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。
            例如:Content-MD5: <base64 of 128 MD5 digest>
Content-Range        隨部分實體一同發送;標明被插入位元組的低位與高位位元組位移,也標明此實體的總長度。
            例如:Content-Range: 1001-2000/5000
Contern-Type        標明發送或者接收的實體的MIME類型。例如:Content-Type: text/html
Date            發送HTTP訊息的日期。例如:Date: Mon,10PR 18:42:51 GMT
ETag            一種實體頭標,它向被發送的資源指派一個唯一的標識符。
            對於可以使用多種URL請求的資源,ETag可以用於確定實際被發送的資源是否為同一資源。
            例如:ETag: "208f-419e-30f8dc99"
Expires            指定實體的有效期間。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
Form            一種要求標頭標,給定控制使用者代理程式的人工使用者的電子郵件地址。例如:From: webmaster@myweb.com
Host            被請求資源的主機名稱。對於使用HTTP/1.1的請求而言,此域是強制性的。例如:Host: www.myweb.com
If-Modified-Since        如果包含了GET請求,導致該請求條件性地依賴於資源上次修改日期。
            如果出現了此頭標,並且自指定日期以來,此資源已被修改,應該反回一個304響應代碼。
            例如:If-Modified-Since: Mon,10PR 18:42:51 GMT
If-Match            如果包含於一個請求,指定一個或者多個實體標記。只發送其ETag與列表中標記區配的資源。
            例如:If-Match: "208f-419e-308dc99"
If-None-Match        如果包含一個請求,指定一個或者多個實體標記。資源的ETag不與列表中的任何一個條件匹配,操作才執行。
            例如:If-None-Match: "208f-419e-308dc99"
If-Range            指定資源的一個實體標記,用戶端已經擁有此資源的一個拷貝。必須與Range頭標一同使用。
            如果此實體自上次被用戶端檢索以來,還不曾修改過,那麼伺服器只發送指定的範圍,否則它將發送整個資源。
            例如:Range: byte=0-499<CRLF>If-Range:"208f-419e-30f8dc99"
If-Unmodified-Since    只有自指定的日期以來,被請求的實體還不曾被修改過,才會返回此實體。
            例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT
Last-Modified        指定被請求資源上次被修改的日期和時間。例如:Last-Modified: Mon,10PR 18:42:51 GMT
Location            對於一個已經移動的資源,用於重新導向要求者至另一個位置。
            與狀態編碼302(暫時移動)或者301(永久性移動)配合使用。
            例如:Location: http://www2.myweb.com/index.jsp
Max-Forwards        一個用於TRACE方法的要求標頭標,以指定代理或網關的最大數目,該請求通過網關才得以路由。
            在通過請求傳遞之前,代理或網關應該減少此數目。例如:Max-Forwards: 3
Pragma            一個通用頭標,它發送實現相關的資訊。例如:Pragma: no-cache
Proxy-Authenticate    類似於WWW-Authenticate,便是有意請求只來自請求鏈(代理)的下一個伺服器的認證。
            例如:Proxy-Authenticate: Basic realm-admin
Proxy-Proxy-Authorization    類似於授權,但並非有意傳遞任何比在即時伺服器鏈中更進一步的內容。
            例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
Public            列表顯示伺服器所支援的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
Range            指定一種度量單位和一個部分被請求資源的位移範圍。例如:Range: bytes=206-5513
Refener            一種要求標頭標域,標明產生請求的初始資源。對於HTML表單,它包含此表單的Web頁面的地址。
            例如:Refener: http://www.myweb.com/news/search.html
Retry-After        一種回應標頭標域,由伺服器與狀態編碼503(無法提供服務)配合發送,以標明再次請求之前應該等待多長時間。
            此時間即可以是一種日期,也可以是一種秒單位。例如:Retry-After: 18
Server            一種標明Web伺服器軟體及其版本號碼的頭標。例如:Server: Apache/2.0.46(Win32)
Transfer-Encoding    一種通用頭標,標明對應被接受方反向的訊息體實施變換的類型。例如:Transfer-Encoding: chunked
Upgrade        允許伺服器指定一種新的協議或者新的協議版本,與響應編碼101(切換協議)配合使用。
            例如:Upgrade: HTTP/2.0
User-Agent        定義用於產生請求的軟體類型(典型的如Web瀏覽器)。
            例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)
Vary            一個回應標頭標,用於表示使用伺服器驅動的協商從可用的響應表示中選擇響應實體。例如:Vary: *
Via            一個包含所有中間主機和協議的通用頭標,用於滿足請求。例如:Via: 1.0 fred.com, 1.1 wilma.com
Warning            用於提供關於響應狀態補充資訊的回應標頭標。例如:Warning: 99 www.myweb.com Piano needs tuning
www-Authenticate    一個提示使用者代理程式提供使用者名稱和口令的回應標頭標,與狀態編碼401(未授權)配合使用。響應一個授權頭標。
            例如:www-Authenticate: Basic realm=zxm.mgmt
是不是只要連網,就要用到http協議 ?Android開發

http是超文本協議 主要是跟我們的網頁有關
連網的話 應該是 TCP/IP協議了
HTTP是工作在TCP/IP協議體系中的TCP協議上的
 
http協議分析

www.java3z.com/...d=1093
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.