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)客戶端想瀏覽

(2)客戶端將發送給DNS服務器

(3)DNS服務器告訴客戶端對應的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 :如

協議版本:如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.一些常見問題

問: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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章