Android HTTP協議請求網路(一)之認識探索
Android HTTP協議請求網路(二)之HttpClient方式
Android HTTP協議請求網路(三)之HttpURLConnection方式
gitHup整合Demo地址:https://github.com/aiyangtianci/NetworkRequestDemo
一、HTTP協議初級探索:
1、HTTP(Hypertext Transfer Protocol)中文 “超文字傳輸協議”,是一種為分散式,合作式,多媒體資訊系統服務,面向應用層的協議,是Internet上目前使用最廣泛的應用層協議,它基於傳輸層的TCP協議進行通訊,HTTP協議是通用的、無狀態的協議。
這幾個名詞有一種通俗的解釋:
- 通訊協議:雙方對話的標準
- 通用的:用了都說好,誰用誰知道
- 無狀態的:翻臉不認人
- 超文字:除了文字,還可以是音訊、視訊
2、HTTP與Android之間的關係:
3、HTTP學習的知識點:
Http協議基礎概念、請求響應模型、提交請求的不同方法、響應狀態判斷、獲取響應以及解析響應、資料下載的實現方法、資料上傳的實現方法、請求頭詳細內容、響應頭詳細內容等二、HTTP協議概念:
1、HTTP協議定義:
WWW是以Internet作為傳輸媒介的一個應用系統,WWW網上基本的傳輸單位是Web網頁。WWW的工作是基於客戶機/伺服器計算模型,由Web瀏覽器和Web伺服器構成,兩者之間採用超文字傳輸協議HTTP進行通訊。
HTTP協議時基於TCP/IP協議之上的協議,是Web瀏覽器和Web伺服器之間的應用層的協議,是通用的、無狀態的物件導向的協議。
如果要實現網路互聯我們要思考兩個需要解決的技術問題:
- 第一:瀏覽器和伺服器是通過什麼來連線的。
- 第二:這種連線方式是怎麼實現的。
- 第一種:HTTP協議,也是在工作中最常用的,是建立在TCP/IP基礎上實現的。
- 第二種:FTP協議
- 第三種:TCP/IP協議,它也是最底層的協議,其它的方式必須是要通過它,但是要想實現這種協議必須要實現socket程式設計,這種方法是用來上傳一些比較大的檔案,視訊,進行斷點續傳的操作。
分析上圖,步驟如下:
- 第一步:在瀏覽器客戶端中得到使用者輸入的內容。
- 第二步:瀏覽器得到這個網址之後,內部會將這個域名傳送到DNS上,進行域名解析。得到它的IP之後就會連結到指定的伺服器上,假如伺服器的地址是:221.104.13.32:80,從瀏覽器到伺服器埠它使用到最底層的TCP/IP協議。
- 第三步:實現TCP/IP協議用Socket來完成,使用了Socket的套接字。
- 第四步:伺服器端的80埠監聽客戶端的連結,這樣客戶端到伺服器就連結上了。
- 伺服器接收到這些內容之後,並按照這些請求的路徑找到對應的頁面,進一步找到對應的網頁內容,返回給客戶端。
HTTP返回請求資料的三種方式:
- 1、以HTML程式碼內容返回。
- 2、以XML字串的形式返回,在以後的android開發中這種形式返回資料比較多。
- 3、以JSON物件形式返回,在網路流量上考慮JSON要比XML方式要好一些,便於解析。
三、使用HTTP協議訪問網路:
Android中的WebView控制元件已經在後臺幫我們處理好了傳送HTTP請求、接收服務響應、解析返回資料,以及最終的頁面展示這幾步工作,不過由於它封裝得太好了,反而不能直觀地看出HTTP協議是如何工作的。因此需要我們通過手動傳送HTTP請求的方式,來更加深入的瞭解這一過程。
在Android上傳送HTTP請求的方式一般有兩種:HttpURLConnection和HttpCient。接下來幾篇文章將陸續講解實戰用法並附帶原始碼demo。
四、HTTP協議請求詳解:
客戶端->伺服器
客戶端向伺服器傳送請求主要包含以下資訊:請求的Url地址、請求頭以及可選的請求體,開啟百度首頁,客戶端向伺服器傳送的資訊如下所示:請求URL(Request URL)
上圖中的Request URL就是請求的Url地址,即https://www.baidu.com,該Url沒有附加其他的引數。其實可以通過?和&符向URL地址後面追加一系列的鍵值對引數,比如地址https://www.baidu.com/s?ie=utf-8&wd=Android,該Url包含兩個鍵值對,ie=utf-8,以及wd=Android,ie和wd是key,utf-8和Android分別是其對應的value,服務端可以獲取ie和wd所對應的value的值。由此我們可以看出,Url可以攜帶額外的資料資訊。一般情況下,URL的長度不能超過2048個字元,即2KB,超過此限制的話伺服器可能就不識別。請求頭(Request Headers)
上圖中Request Headers部分就是請求頭,請求頭其實也是一些鍵值對,不過這些鍵值通常都是W3C定義了的一些標準的Http請求頭的名稱,請求頭包含了客戶端想告訴服務端的一些後設資料資訊,注意是後設資料,而不是資料,比如請求頭User-Agent會告訴伺服器這條請求來自於什麼瀏覽器,再比如請求頭Accept-Encoding會告訴伺服器客戶端支援的壓縮格式。除了這些標準的請求頭,我們還可以新增自定義的請求頭。請求體(Request Body)
之前我們提到,URL的最大長度就是2048個字元,如果我們傳送的資料很大,超過了2KB怎麼辦?我們可以將很大的資料放到請求體中,GET請求不支援請求體,只有POST請求才能設定請求體。請求體中可以放置任意的位元組流,從而可以很方便地傳送任意格式的資料,服務端只需要讀取該輸入流即可。
伺服器->客戶端
伺服器接收到客戶端發來的請求後,會進行相應的處理,並向客戶端輸出資訊,輸出的資訊包括響應頭和響應體。響應頭 (Response Headers)
響應頭也是一些鍵值對,如下所示:響應頭包含了伺服器想要告訴客戶端的一些後設資料資訊,注意不是資料,是後設資料,比如通過響應頭Content-Encoding告訴客戶端伺服器所採用的壓縮格式,響應頭Content-Type告訴客戶端響應體是什麼格式的資料,再比如服務端可以通過多個Set-Cookie響應頭向客戶端寫入多條Cookie資訊,等等。剛剛提到的幾個請求頭都是W3C規定的標準的請求頭名稱,我們也可以在服務端向客戶端寫入自定義的響應頭。
響應體 (Response Body)
響應體是服務端向客戶端傳輸的實際的資料資訊,本質就是一堆位元組流,可以表示文字,也可以表示圖片或者其他格式的資訊,如下所示:
GET vs POST
Http協議支援的操作有GET、POST、HEAD、PUT、TRACE、OPTIONS、DELETE,其中最最常用的還是GET和POST操作,下面我們看一下GET和POST的區別。
GET:
- GET請求可以被快取。
- 我們之前提到,當傳送鍵值對資訊時,可以在URL上面直接追加鍵值對引數。當用GET請求傳送鍵值對時,鍵值對會隨著URL一起傳送的。
- 由於GET請求傳送的鍵值對時隨著URL一起傳送的,所以一旦該URL被黑客截獲,那麼就能看到傳送的鍵值對資訊,所以GET請求的安全性很低,不能用GET請求傳送敏感的資訊(比如使用者名稱密碼)。
- 由於URL不能超過2048個字元,所以GET請求傳送資料是有長度限制的。
- 由於GET請求較低的安全性,我們不應該用GET請求去執行增加、刪除、修改等的操作,應該只用它獲取資料。
POST:
- POST請求從不會被快取。
- POST請求的URL中追加鍵值對引數,不過這些鍵值對引數不是隨著URL傳送的,而是被放入到請求體中傳送的,這樣安全性稍微好一些。
- 應該用POST請求傳送敏感資訊,而不是用GET。
- 由於可以在請求體中傳送任意的資料,所以理論上POST請求不存在傳送資料大小的限制。
- 當執行增減、刪除、修改等操作時,應該使用POST請求,而不應該使用GET請求。
相關文章
- 快速認識HTTP協議HTTP協議
- http協議請求方法有哪些?網路安全技術入門HTTP協議
- Swift:面向協議的網路請求Swift協議
- HTTP協議如何發起請求HTTP協議
- HTTP 協議六種請求方法HTTP協議
- Python 之requests封裝通用http協議介面請求Python封裝HTTP協議
- Swift 網路請求 : Moya初步認識Swift
- 網路安全網路協議知識點中,http協議是什麼?協議HTTP
- HTTP網路請求原理HTTP
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- 協議層的攻擊:HTTP請求走私協議HTTP
- CTFHub web前置技能HTTP協議請求方式WebHTTP協議
- 計算機網路之十二:HTTP協議計算機網路HTTP協議
- Android網路請求(2)Android
- HTTP協議的請求與資料抓包HTTP協議
- 解密協議層的攻擊——HTTP請求走私解密協議HTTP
- HTTP的協議頭內容的認識HTTP協議
- 極光HTTP之什麼是網路協議HTTP協議
- 網路通訊協議-HTTP協議詳解!協議HTTP
- 網路基礎之HTTP協議HTTP協議
- Http協議什麼時候發生options請求?HTTP協議
- 前端必知必會HTTP請求系列(二)簡單一點的HTTP協議前端HTTP協議
- 網路請求優化之取消請求優化
- Http網路協議包 (快速理解)HTTP協議
- Qt - http網路請求與響應QTHTTP
- 網路協議 - TCP/IP、HTTP、HTTPS、HTTP2.0協議TCPHTTP
- 造輪子 | 如何設計一個面向協議的 iOS 網路請求庫協議iOS
- Android中用Kotlin Coroutine(協程)和Retrofit進行網路請求和取消請求AndroidKotlin
- HTTP協議請求工作流程是什麼?linux學習HTTP協議Linux
- Http協議常用知識HTTP協議
- 軟體測試必須掌握的 http 網路協議知識HTTP協議
- 軟體測試必須掌握的http網路協議知識HTTP協議
- 網路通訊協議自動轉換之thrift到http協議HTTP
- 網路協議之:socket協議詳解之Datagram Socket協議
- android 網路請求時,顯示progrossBarAndroidROS
- 01 前端HTTP協議(圖解HTTP) 之 網路基礎前端HTTP協議圖解
- 網路基礎之網路協議協議