iOS 讀書筆記 網路請求

2021-07-04 09:24:40 字數 3871 閱讀 3682

知道「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的資料報到伺服器,主機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請求傳送之前,客戶端與伺服器之間必須建立ssl(那麼ssl又是什麼呢?下面說)會話。會話建立完畢後,在tcp連線之上傳輸的所有資料都是加密的。

ssl是什麼?

ssl (secure socket layer),是一種保證伺服器和客戶端安全通訊的協議。使用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。

nsinputstream *instream = [nsinputstream inputstreamwithfileatpath:@"檔案路徑"];

nsurlconnection 物件是url載入統統活動的中心。用於連線伺服器獲取響應。提供了同步、非同步、佇列非同步的操作模式。同步最簡單,但是會有堵塞執行緒等缺點。非同步模式下呼叫委託**來處理資料。

4 nsurlreponse

nsurlresponse 物件會在url載入請求完畢後返回。nserror物件與dsdata物件,如果請求出現問題或伺服器問題會返回nserror物件,如果有響應返回nsdata物件就會包含響應體.

nsurlreponse提供了很多屬性資訊。

mimetype 結果資料的mime型別。該值**於伺服器。

expectedcontentlenth 返回內容的大小,可能與實際不符。

suggestedfilename 提供的檔名,要麼來自伺服器提供的內容的檔名,要麼來自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...