1. 程式人生 > >網路程式設計概述及Http協議

網路程式設計概述及Http協議

(一)概述
本節開始我們來學習Android網路程式設計相關的一些東西:Android端網路程式設計要幹嘛?Http協議 的學習,使用自帶扣腳Json解析類解析Json,XML解析的幾種常用方式,HttpUrlConnection和 HttpClient的使用,檔案的上傳,下載;WebService的使用,WebView,Socket通訊的使用等!

最低要求是: 能夠掌握獲取與解析伺服器反饋的資料的能力!

(二)Android網路程式設計
1.Android與網際網路互動的三種方式
這裡寫圖片描述
2.初識Http協議

實際開發中我們和服務端打交道一般用得都是基於Http協議的通訊,所以學好Http協議是非常 重要的,當然,我們不用過於考究一些細節的東西,有個大體的瞭解即可!都是一些概念性的東西!

1)什麼是Http協議?

答:hypertext transfer protocol(超文字傳輸協議),TCP/IP協議的一個應用層協議,用於 定義WEB瀏覽器與WEB伺服器之間交換資料的過程。客戶端連上web伺服器後,若想獲得web伺服器 中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web伺服器通迅的格式。

2)Http 1.0 與 Http 1.1的區別

答:1.0協議,客戶端與web伺服器建立連線後,只能獲得一個web資源! 而1.1協議,允許客戶端與web伺服器建立連線後,在一個連線上獲取多個web資源!

3)Http協議的底層工作流程:

答:我們先要知道兩個名詞:

    SYN(synchronous):TCP/IP建立連線時使用的握手訊號
    ACK(Acknowledgement):確認字元,確認發來的資料已經接受無誤

接著就到TCP/IP三次握手的概念:

    客戶端傳送syn包(syn = j)到伺服器,進入SYN_SEND狀態,然後等待伺服器確認
    伺服器收到syn包,確認客戶的syn(ack = j + 1),同時在自己也傳送一個SYN包(syn=k), 即SYN + ACK包,伺服器進入SYN_RECV狀態
    客戶端收到SYN + ACK包,向伺服器傳送確認包ACK(ack = k +1),傳送完畢後,客戶端與服務端 進入ESTABLISHED狀態,完成三次握手,然後兩者開始傳送資料

如果還不是很清晰,我們再來看三次握手的示意圖:

這裡寫圖片描述
瞭解了是吧,然後我們就來看看Http操作的一個流程了:

使用者點選瀏覽器上的url(超連結),Web瀏覽器與Web伺服器建立連線
建立連線後,客戶端傳送請求給伺服器,請求的格式為: 統一資源識別符號(URL)+協議版本號(一般是1.1)+MIME資訊(多個訊息頭)+一個空行
服務端收到請求後,給予相應的返回資訊,返回格式為: 協議版本號 + 狀態行(處理結果) + 多個資訊頭 + 空行 + 實體內容(比如返回的HTML)
客戶端接收服務端返回資訊,通過瀏覽器顯示出來,然後與服務端斷開連線;當然如果中途 某步發生錯誤的話,錯誤資訊會返回到客戶端,並顯示,比如:經典的404錯誤!

對於上面的流程如果還不清晰,我們可以使用HttpWatch或者firefox抓下包: PS:測試網站是小豬的學校的教務系統,輸入賬號密碼後請求登陸,我們可以看到下述資訊:

HTTP請求包含的內容:
這裡寫圖片描述
HTTP響應包括的內容:
這裡寫圖片描述
這就一目瞭然了是吧!

4)Http協議的業務流程
這裡寫圖片描述
5)Http的幾種請求方式

實際開發中我們用得較多的方式是Get和Post,但是實際開發可能還會用到其他請求方式,比如PUT, 小豬的實際專案中就用到了,下面為了方便大家,就把所有的請求方式列出來吧:

    Get:請求獲取Request-URI所標識的資源
    POST:在Request-URI所標識的資源後附加新的資料
    HEAD 請求獲取由Request-URI所標識的資源的響應資訊報頭
    PUT:請求伺服器儲存一個資源,並用Request-URI作為其標識
    DELETE:請求伺服器刪除Request-URI所標識的資源
    TRACE:請求伺服器回送收到的請求資訊,主要用於測試或診斷
    CONNECT:保留將來使用
    OPTIONS:請求查詢伺服器的效能,或者查詢與資源相關的選項

6)Get和Post的對比

用得最多的兩個,當然要做下對比啦!

    GET:在請求的URL地址後以?的形式帶上交給伺服器的資料,多個數據之間以&進行分隔, 但資料容量通常不能超過2K,比如:http://xxx?username=…&pawd=…這種就是GET
    POST: 這個則可以在請求的實體內容中向伺服器傳送資料,傳輸沒有數量限制
    另外要說一點,這兩個玩意都是傳送資料的,只是傳送機制不一樣,不要相信網上說的 "GET獲得伺服器資料,POST向伺服器傳送資料"!!另外GET安全性非常低,Post安全性較高, 但是執行效率卻比Post方法好,一般查詢的時候我們用GET,資料增刪改的時候用POST!!

7)Http狀態碼合集

當然,這些狀態碼只是要給參考,實際上決定權在伺服器端(後臺的)手上,一種方案是請求後, 伺服器返回給我們的是狀態,或者另一種,在應用不用弄多語言版本的時候最好用,直接返回 一串結果資訊的Json給我們,我們直接顯示就好,這樣可以偷懶不少!下面列下狀態碼合集,參考 下就好:

    100~199 : 成功接受請求,客戶端需提交下一次請求才能完成整個處理過程
    200: OK,客戶端請求成功
    300~399:請求資源已移到新的地址(302,307,304)
    401:請求未授權,改狀態程式碼需與WWW-Authenticate報頭域一起使用
    403:Forbidden,伺服器收到請求,但是拒絕提供服務
    404:Not Found,請求資源不存在,這個就不用說啦
    500:Internal Server Error,伺服器發生不可預期的錯誤
    503:Server Unavailable,伺服器當前不能處理客戶端請求,一段時間後可能恢復正常

8)Http協議的特點

概念性的東西,知道就好,別去背,百度百科的東西,直接複製貼上:

1. 支援客戶/伺服器模式。

2. 簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、 HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。 由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。

3. 靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

4. 無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求, 並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

5. 無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。 缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每 次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

本節講解了我們在Android開發中涉及到網路方面的要完成的工具,以及講解了Http協議的 相關概念,相信大家對Android移動端與伺服器互動已經有了個模糊的映像,下節我們來研究 Http協議的請求頭與響應頭!

相關推薦

網路程式設計概述Http協議

(一)概述 本節開始我們來學習Android網路程式設計相關的一些東西:Android端網路程式設計要幹嘛?Http協議 的學習,使用自帶扣腳Json解析類解析Json,XML解析的幾種常用方式,HttpUrlConnection和 HttpClient的使

Linux網路程式設計---詳解HTTP協議

HTTP 簡介 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議。。 HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案,

IOS —— 網路那些事(上) - http協議

作為一名並不太合格的程式設計師,今天要分享學習的成果,竟然講的是網路相關HTTP協議的事情。(也算是複習了) 乍看HTTP協議的內容著實是十分複雜的,涉及到十分多網際網路"底層"框架的東西。今天就先撇開這部分詳細內容。 簡單的來說說HTTP協議,以及連線的事項。 HTTP協議發展至今也有二十多年曆史,版

python爬蟲學習筆記二:Requests庫詳解HTTP協議

Requests庫的安裝:https://mp.csdn.net/postedit/83715574 r=requests.get(url,params=None,**kwargs) 這個r是Response物件 url :擬獲取頁面的url連結 params:url中的額外引數

網路爬蟲筆記之http協議

   http協議和https協議: HTTP協議:HyperText Transfer Protocol,超文字傳輸協議,是一種釋出和接收HTML頁面的方法。伺服器埠號是80。 HTTPS協議:是HTTP協議的加密版本,在HTTP下加入了SSL層。伺服器埠號是443。

Qt網路程式設計概述(一)

Qt網路程式設計概述 QtNetWork模組提供了若干類支援TCP/IP客戶端伺服器端的開發。有如下兩類: 低階網路操作:QTcpSocket/QTcpServer/QUdpSocket 高階網路操作:QNetworkRequest/QNetworkReply

_145_Java_Java網路程式設計概述

一、概述 二、計算機網路 1.網路協議 2.網路體系結構 三、OSI參考模型 四、TCP/IP參考模型 五、常見網路協議 1.TCP協議 2.UDP協議 3.HTTP協議 六、計網常見問題 七、Java網路程式設計 一、概述 計算機網路是

python網路程式設計之——osi7層協議

每層執行常見的物理裝置 網際網路=物理連線介質+網際網路協議 應用層:http協議等等 自己定義 傳輸層:tcp/udp協議 應用軟體埠協議 網路層: IP協議+子網掩碼 arp協議:地址解析協議,根據ip解析mac地址 資料報:報頭+內容

java網路程式設計(一)使用TCP協議完成客戶端與服務端的資料傳遞

在正式進入網路程式設計之前先簡單介紹一個網路程式設計的基本概念。 網路程式設計就是兩個或多個裝置之間的資料交換,其實更具體的說,網路程式設計就是兩個或多個程式之間的資料交換即可以理解為一次網路通訊過程。在網路通訊中,第一次主動發起通訊

python(三)Requests庫方法HTTP協議

學習框架:1.Requests 自動爬取HTML頁面 自動網路請求提交2. robots.txt 網路爬蟲排除標準3.Beautiful Soup 解析HTML頁面4.Projects實戰專案A/B5.Re 正則表示式詳解  提取頁面關鍵資訊6.Scrapy 網路爬蟲原理介紹

網路程式設計 - join守護執行緒

一、Join例項(join理解為等待)import threading,timedef run(n): time.sleep(3) print ("task",n)start = time.time()tem_list=[]for i in range(50): t = threading.

[原始碼]OKHttpHttp協議筆記

目的有二:學習一下著名開源專案的架構;大致瞭解一下http 硬知識 Cache-Control:RFC 可以放在Cache-Control(http1.1以後)下,也可以放到Pragma(相

計算機網路學習1:HTTP協議中URL和URI的區別

國際慣例膜dalao,dalao部落格讓我學習到了新姿勢 首先,先來了解一下這些單詞的全稱: HTTP = Hyper Text Transfer Protocol(超文字傳輸協議) URI

JAVAEE真實課堂之TomcatHttp協議-劉志遠-專題視訊課程

JAVAEE真實課堂之Tomcat及Http協議—4915人已學習 課程介紹        本課程介紹JAVAEE開發中的的Tomcat基本配置及Http協議的協議原理知識課程收益    讓學習人員掌握Tomcat的配置方式,瞭解Http協議的內容知識講師介紹    劉志遠更

高效能網路程式設計總結《TCP/IP Sockets程式設計(C語言實現) (第2版)》 程式碼下載(連結以及檔案打包)

這篇文章將試圖說明應用程式如何接收網路上傳送過來的TCP訊息流,由於篇幅所限,暫時忽略ACK報文的回覆和接收視窗的滑動。 為了快速掌握本文所要表達的思想,我們可以帶著以下問題閱讀: 1、應用程式呼叫read、recv等方法時,socket套接字可以設定為阻塞或者非阻塞,這兩種方式是如何工作的? 2、

Android 網路(一) HTTP協議

前言 現如今,網路無處不在。對於Android開發者而言,免不了涉及到對網路的訪問。於是挖個坑= = ,介紹一下Android下關於網路程式設計的方方面面,本文將講述HTTP協議的一些必備知識。 HTTP協議簡介 超文字傳輸協議(HTTP,HyperT

計算機網路(三)HTTP協議相關基礎

A錯誤,http是無狀態的 B錯誤,後面的是request 頭 C正確,GET表示獲取資源,POST表示新增一個資源,PUT表示更新資源,DELETE 表示刪除資源等等 D

(筆記)Linux下網路程式設計,採用TCP協議實現的C/S架構

TCP/UDP介紹 TCP(Transfer Control Protocol)傳輸控制協議是一種面向連線的協議, 當我們的網路程式使用這個協議的時候,可以保證我們的客戶端和服務端的通訊是可靠的,安全的,適合於傳輸大批量資料的情況. UDP(User Da

Linux下網路程式設計之自定義協議進行併發多客戶端與伺服器的通訊(多程序處理併發)不足佔用資源太多

自定義協議訊息體*********msg.h*************#ifndef _MSG_H_#define _MSG_H_struct msg{ char head[10]; //頭部 char msg_chck; //效驗碼 char buff[512];/

JAVA網路程式設計實現基於TCP協議的時間服務(向伺服器查詢當前時間)

服務端程式: package doc_02_tcp.server; import java.io.PrintWriter; import java.net.InetAddress; import