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)客戶端想瀏覽http://www.fuck.com/
(2)客戶端將http://www.fuck.com/發送給DNS伺服器
(3)DNS伺服器告訴客戶端http://www.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 :如http://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,諸位有興趣下載學習一下,就應該知道後端是什麼了。
下載地址:http://pan.baidu.com/s/1hrBNytA 密碼: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 嗎?
※小程序發布,你很方?