知道「3次握手」嗎?突然想起這個詞
什麼是3次握手?
tcp三次握手/四次揮手詳解 這裡是3次握手的詳解
3次握手就是為了可靠的傳送資料,tcp(什麼是tcp呢?tcp就是一種可靠傳輸的協議)在傳送資料之前。兩台主機之間進行3次握手。3次握手完畢後才傳送資料。
預備知識: 位碼即tcp標誌位,有6種標示:syn(synchronous建立聯機) ack(acknowledgement 確認) psh(push傳送) fin(finish結束) rst(reset重置) urg(urgent緊急)
sequence number(順序號碼) acknowledge number(確認號碼)
第一次握手:主機a傳送位碼為syn=1,隨機產生seq number=1234567的資料報到server,主機b由syn=1知道。a要求建立聯機。
第二次握手:主機b收到請求後要確認聯機資訊。向a傳送ack number=(主機a的seq+1),syn=1,ack=1,隨機產生seq=7654321的包
第三次握手:主機a收到後檢查ack number是否正確,即第一次傳送的seq number+1,以及位碼ack是否為1,若正確,主機a會再傳送ack number=(主機b的seq+1),ack=1,主機b收到後確認seq值與ack=1則連線建立成功。
完畢三次握手。主機a與主機b開始傳送資料。
進入正題:
ios 中首選的通訊方式是http。ios提供的最方便的網路api也是針對http的。
上文中說的「三次握手」就是為了建立乙個tcp連線,http請求和響應就是在tcp連線上來完畢的,tcp連線能夠重用,也就是說。並非每次http請求都須要建立tcp連線,僅僅要tcp連線不斷開,http請求就能夠一直使用。
http和https的區別在什麼地方?
安全。事實上https協議就是ssl+http協議。
https和http之間最重要的區別在於會話的建立階段。tcp連線建立好之後,http請求傳送之前。client與server之間必須建立ssl(那麼ssl又是什麼呢?以下說)會話。會話建立完畢後,在tcp連線之上傳輸的全部資料都是加密的。
ssl是什麼?
ssl (secure socket layer),是一種保證server和client安全通訊的協議。使用https協議。全部的http資料都是在ssl協議封裝之上傳輸的。突然冒出另外乙個詞tls,事實上tls是ssl標準化的產物,事實上我們如今用的都是tls。但由於歷史上習慣了ssl這個稱呼尋常還是以ssl為多。關於ssl的介紹看下這篇文章講的非常好ssl/tls協議執行機制的概述
ios 最高層的http api
nsurl 、nsurlrequest 、nsurlconnection 、nsurlresponse 物件
1 nsurl
通過nsurl 物件輕鬆方便的訪問url所指向的內容,nsurl 能夠指向檔案資源,也能夠指向網路資源。
nsurl *url = [nsurl urlwithstring:@」「];
nsdata *data = [nsdata datawithcontentsofurl:url];
即能夠獲取網路資源又能夠獲檔案資源。
nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url];
nsinputstream *instream = [nsinputstream inputstreamwithfileatpath:@"檔案路徑"];
[request sethttpbodystream:instream];
nsurl還提供了非常多方法來讀取url各個部分的值,比方url.port獲取一下url的埠。
在建立nsurl物件前須要對url字串進行百分號編碼。rfc3986文件規定,url中僅僅同意包括英文本母(a-za-z)、數字(0-9)、-_.~4個特殊字元以及全部保留字元。相關更具體的看百分號編碼
2 nsurlrequest
建立好nsurl物件後接下來就須要執行下一步:建立nsurlrequest物件。nsurlrequest 物件包括了載入url內容所需的資訊。ios中的url載入系統支援http 、https、ftp和file url內容的載入
url載入系統提供了一種擴充套件方式一處理新的協議,方式就是建立nsurlprotocol的子類。然後將返回的結果提供給url載入系統。
nsurlrequest *request = [nsurlrequest requestwithurl:url];採用預設的引數來建立物件。
假設是http或者https 那麼請求方法是get,而且使用作業系統提供的預設頭。
nsurlrequest *request = [nsurlrequest requestwithurl:url cachepolicy:nsurlrequestreloadignoringcachedata timeoutinterval:30];
設定快取策略和請求時間,nsurlrequest也提供了很多方法來獲取請求的屬性。可是不能設定,假設想要設定,那麼來用nsmutablerequest。
[request setallhttpheaderfields:@];nsmutablerequest 設定各種引數。
nsmutableurlrequest *request = [nsmutableurlrequest requestwithurl:url];
nsinputstream *instream = [nsinputstream inputstreamwithfileatpath:@"檔案路徑"];
nsurlconnection 物件是url載入統統活動的中心。用於連線server獲取響應。
提供了同步、非同步、佇列非同步的操作模式。
同步最簡單,可是會有阻塞執行緒等缺點。非同步模式下呼叫託付**來處理資料。
4 nsurlreponse
nsurlresponse 物件會在url載入請求完畢後返回。nserror物件與dsdata物件,假設請求出現故障或server問題會返回nserror物件,假設有響應返回nsdata物件就會包括響應體.
nsurlreponse提供了非常多屬性資訊。
mimetype 結果資料的mime型別。該值**於server。
expectedcontentlenth 返回內容的大小,可能與實際不符。
suggestedfilename 提供的檔名稱,要麼來自server提供的內容的檔名稱,要麼來自url和mime型別。
url 返回內容的url。
由於成定向的原因,url可能與請求提供的url不同。
textencodingname 最初資料來源所用的文字編碼名。
hshttpurlresponse 是nsurlresponse的子類,它包括特定於http請求的屬性。
響應頭 - allheaderfields
http狀態碼 - statuscode
iOS 讀書筆記 網路請求
知道 3次握手 嗎?突然想起這個詞 什麼是3次握手?tcp三次握手 四次揮手詳解 這裡是3次握手的詳細解釋 3次握手就是為了可靠的傳送資料,tcp 什麼是tcp呢?tcp就是一種可靠傳輸的協議 在傳送資料之前,兩台主機之間進行3次握手。3次握手完成後才傳送資料。預備知識 位碼即tcp標誌位,有6種標...
讀書筆記 iOS 網路 優化請求效能
一,度量網路效能 1,網路頻寬 用於描述無線網路效能的最常見度量指標就是頻寬。在數字無線通訊中,網路頻寬可以描述為兩個端點之間的通訊通道每秒鐘可以傳輸的位數。現代無線網路所能提供的理論頻寬是很高的。不過請記住,運營商與網路裝置提供商引用的頻寬數字常常是該項技術的理論最大值,網路裝置使用的實際頻寬可能...
讀書筆記 iOS 網路 HTTP 請求內容
一,get方法。從伺服器獲取一段內容,用http術語來說就是實體。get請求通常不包含請求體,不過也是可以包含的。有些網路快取設施只會快取get響應。get請求通常不會導致伺服器端的資料變化。二,post方法。使用客戶端提供的資料更新實體。post請求通常會在請求體中加入應用伺服器所需的資訊。pos...