APP連接伺服器,所需要知道的一切事情

APP連接伺服器,所需要知道的一切事情

作者:邵勵治

一、2017年,人們如何連接伺服器與客戶端?

1.答:使用HTTP協議去連接伺服器與客戶端

我們把資源放在伺服器里(也就是你電腦中的一個文件夾),此時這個文件就會有一個它自己的名字(比如:192.168.199.3:80/fuck.txt,"192.168.199.3"是你主機的ip地址————當然一般不會是內網地址)

客戶端,通過程序,比如安卓使用HttpUrlConnection類,用該資源的名字(192.168.199.3:80/fuck.txt)作為輸入參數,發起HTTP請求,然後再用HttpUrlConnection類的接收HTTP響應的方法把伺服器返回的資源接收,就可以實現前端與後端的互聯了。

2.什麼叫客戶端,什麼叫伺服器端?

請求資源的一端稱為客戶端,提供資源的一端稱為伺服器端。

3.HTTP可以傳什麼?

答:HTTP什麼都可以傳。(別以為HTTP只能傳輸HTML)

4.舉例

(1)客戶端是瀏覽器,則傳的是HTML。(及其他資源,如CSS、JavaScript、圖片、音頻、視頻、其他一切格式的文件)

(2)客戶端是APP,則傳的是JSON或XML。(及其他資源,如圖片、音頻、視頻、其他一切格式的文件)

二、了解HTTP

1.整體流程

(1)客戶端想瀏覽fuck.com/

(2)客戶端將fuck.com/發送給DNS伺服器

(3)DNS伺服器告訴客戶端fuck.com/對應的IP是:201.96.114.112

(4)客戶端的HTTP協議:生成針對目標Web伺服器的「HTTP請求報文」

(5)客戶端的TCP協議:將「HTTP請求報文」分割成「報文段」並表上序號,把每個「報文段」準確無誤的傳給伺服器(實現準確的方式:三次握手)

(6)客戶端的IP協議:搜索對方的地址,一邊路由一邊傳送「報文段」

(7)伺服器端的TCP協議:根據序號重組「報文段」,組成「HTTP請求報文」

(8)伺服器端的HTTP協議:處理「HTTP請求報文」,將其中請求的資源,生成「HTTP響應報文」傳回去

2.請求報文和響應報文

(1)請求報文由五個部分構成:

請求方法:如GET、POST、DELETE

請求URI :如127.0.0.1/fuck.txt

協議版本:如HTTP/1.1或HTTP/2.0

首部欄位:(還請自行查詢,我不了解首部欄位)

內容實體:如登陸時提交的用戶名、密碼

(2)響應報文由五個部分組成:

協議版本:如HTTP/1.1或HTTP/2.0

狀態碼:如404

原因段語:如OK

首部欄位:(請自行查詢,我不了解首部欄位)

實體主體:如一個HTML文件或一個圖片文件

(有的水友要問了,楓哥楓哥,圖片怎麼用字元串表示呢?我說你們真是too young,二進位呀兄弟)

3.Cookie是什麼?

(1)首先,先看個例子:

例:HTTP無法讓用戶保持登陸,因為HTTP是一個不保存狀態的協議。

(2)解決方案:使用Cookie幫助HTTP。

(3)具體過程:

①客戶端第一次向伺服器發送請求,伺服器會為該客戶端生成一個新的Cookie存好。

②之後伺服器會通過set-Cookie指令把Cookie發給客戶端保存。

③當客戶端第二次請求時,將保存好的Cookie也一併發給伺服器。

④伺服器接到請求後,一查這Cookie對應的客戶端信息,就知道這個客戶端是誰了。

4.HTTP方法

(1)GET:請求已被URI識別的資源。指定的資源通過伺服器端解析之後返迴響應內容。也就是說,如果請求的是文本,那就保持原樣返回。如果請求的是程序,則返回經過執行後的輸出結果。

(2)POST:傳一些數據到伺服器端(如用戶名和密碼),讓伺服器端對這些數據進行解析並返回結果。

(3)PUT:傳輸文件。在請求報文的主體中包含文件內容,然後保存到請求URI指定的位置。

(4)HEAD:獲得報文首部。HEAD和GET一樣,只是不反回報文主體部分。用於確認資源更新時間及URI的有效性等。

(5)DELETE:刪除文件。DELETE方法按照請求URI刪除指定的資源。

(6)OPTIONS:詢問支持的方法。伺服器端返回的是:GET,POST,HEAD(返回伺服器支持的方法)

(7)TRACE:追蹤路徑。

(8)CONNECT:用隧道協議連接代理。使用SSL協議和TLS協議把通信內容加密後經網路隧道傳輸。

(注意:方法名區分大小寫,需要都用大寫字母。)

5.傳輸前要先壓縮——內容編碼

伺服器對要發送的內容進行內容編碼(也就是壓縮),之後進行傳輸,客戶端則負責解碼。

常見的內容編碼有以下幾種:

gzip

compress

deflate

identity

6.緩存,隧道

(1)緩存

會將資源保存一份在代理伺服器上(或者本地瀏覽器中),當代理伺服器再次接到相同資源的請求(或本地瀏覽器檢測到了又請求了同樣的資源),就不向源伺服器申請資源,而是直接傳送回去代理伺服器上的資源(或直接顯示本地中的資源)。

(2)緩存的問題

問題:源伺服器上的資源更新了,緩存伺服器上的資源沒及時的隨著更新。這樣用戶就會得到過期的資源。

解決方法:設立緩存有效期,若有效期到期了則去源伺服器那裡下載最新的資源。客戶端也可以主動請求不使用緩存,而是去源伺服器那裡下載最新的資源。

(3)隧道

使用SSL等加密手段進行通信,目的是安全

7.靜態頁面和動態頁面

事先準備好的叫靜態頁面

現由程序生成的叫動態頁面

8.CGI

CGI是指Web伺服器在接收到客戶端發送過來的請求後,轉發給伺服器端的程序的一組機制。

使用CGI的程序叫CGI程序,通常由PHP、Python、Java等編程語言編寫。

三、APP連接伺服器的「解決方案」大全

1.最基本的模型:直接用HTTP協議進行傳輸

伺服器端針對不同的GET請求,POST請求等方法寫一些程序。(即我們說的API)

客戶端(比如Android端)找一個能發送HTTP請求、能接收HTTP響應的類。

用這個類發送HTTP請求給伺服器。(調用API)

2.Web Service模型:2017年,基於HTTP協議的解決方案們

從大體上說,一共有三類,即:

(1)SOA模型 (面向消息)

(2)RPC模型 (面向方法)

(3)REST模型 (面向資源)

其中RPC模型,又分為三類:

①XML-RPC

②JSON-RPC

③SOAP+WSDL [SOAP本質上是XML-RPC的升級版]

3.一些常見問題

(1)問:什麼叫後端?我怎麼在後端編程?

答:關於這個問題,我之前寫了一個《在Windows下搭建一個具有「登陸」功能的網站》的PDF,諸位有興趣下載學習一下,就應該知道後端是什麼了。

下載地址:pan.baidu.com/s/1hrBNyt 密碼:ioo4

(2)問:Android端通過什麼向後端發數據呢?

答:

①HttpUrlConnection————HTTP協議傳輸的最靠譜選擇,推薦:選HTTP協議的就用它吧

②HttpClient————不如HttpUrlConnection好用

③OkHttp————被HttpUrlConnection當做底層實現部分了,可以自動處理常見網路問題

④volley————適用於通信頻繁的小數據網路操作,但不適合大數據的網路操作如下載文件

⑤Retrofit————基於REST模型的框架,其底層是OkHttp。推薦:選REST模型的就用它吧

⑥AsyncHttpClient————底層是HttpClient寫的,沒有OkHttp的自動錯誤處理常見網路問題的能力

4.個人Android技術選型

前端:Retrofit

中間:HTTP+JSON+REST

後端:Flask+Python+MySQL


推薦閱讀:

mixpanel為什麼能比talkingdata和友盟估值高出3-10倍?
談談學習方法
這個項目碉堡了
Google I/O 的規格和影響力比得上 WWDC 嗎?
小程序發布,你很方?

TAG:Android开发 | 后端技术 | 移动开发 |