構建http請求
1.1簡介
berners-lee最終體案上有三個主要的創新:html、http、url。html定義了向文字新增樣式的一種方式;http定義了伺服器與客戶端之間傳輸資料的一種方式、url定義了再網路機器中定位唯一資源的方式。
1.2 http請求與響應
對於計算機通訊來說,http請求遵循著客戶端-伺服器正規化,如下圖所示就是乙個簡單的http請求步驟,客戶端建立乙個到伺服器的tcp連線,然後傳送http請求,伺服器隨後通過同乙個tcp連線上傳送乙個http響應來響應該請求。接下來,客戶端可以重用這個tcp連線,傳送請求或者將連線關閉。早期版本只允許在乙個tcp上傳送請求,http1.1則允許客戶端重用連線。
http與https之間的區別在於會話的連線建立階段。在tcp連線建立好、http請求傳送前,客戶端與伺服器之間必須建立ssl會話,ssl會話包括:客戶端與伺服器協商使用何種密碼、交換公鑰、驗證協商以及驗證身份。但ssl會話完畢後,在tcp連線上傳輸的所有資料都是加密的。
1.2.1 url結構
url 為internet上的任何資源與內容提供了乙個全域性唯一的位置名。作為原則,單個資源可以通過多個url定位,但單個url不能引用不同的資源,在ios中,使用nsurl來管理url物件。
url由5個部分組成:http(協議)://user:password@(認證)hostname(主機名):port(埠):/absolute_path(絕對路徑)?query(查詢字串)
1、協議:協議部分指定了使用哪個應用層的協議。ios常用的協議還有file協議,file請求用於在應用沙盒中取得本地檔案系統中的資源。如果使用字串而沒有使用協議建立nsurl物件,那麼預設就是file協議。
2、認證:的某些http伺服器支援在url中傳輸使用者認證以實現basic認證,認證部分包括認證使用者名稱和密碼。該方式使用較少,安全效能偏低。
3、主機名:url的主機名部分指定了包含請求資源的的主機的tcp主機名和ip位址。如果url的協議是file,那這部分和埠號必須省略。雖然url要引用唯一的資源,但對於相對本地的主機名時就會有例外,如果使用localhost作為主機名,url就會引用本地的機器,因此相同的url在不同的機器上回得到不同資源。
4、埠:url的埠指定了客戶端連線的tcp埠,http 80埠 https 443埠(預設狀態時,認為也可以做修改)
5、絕對路勁:指定了網路資源的路徑。絕對路徑不可以包含問號、空格、回車換行符
6、查詢字串:多個查詢引數通過&字元分割。
絕對路勁和查詢字串的內容是受到限制的,因此url通常使用百分號進行編碼。
1.2.2 請求內容
http 請求包含3個部分:請求行、請求頭、請求體。請求行與請求頭是文字行,通過回車/換行 符分割(值為13的位元組、或是0x0d 值為10的位元組或是0xa)在http請求中使用這樣文字值,使得他們很容易構建、解析、除錯。空行 將請求頭和請求體劃分開來。
請求行包括3個方面的主要資訊:http請求方法、url、http的版本
方法
標準方法
get
從伺服器獲取一段內容,通常不包括請求體。get請求通常不會導致伺服器資料發生變化
post
使用客戶端提供的資料更新實體。post請求通常會在請求體中加入應用服務所需的資訊。post請求是非冪等的,意味著當處理多個請求時,其結果和處理單個請求時時不同的。
head
獲取響應元素資料而無需檢索響應的全部內容。該方法用於檢查伺服器最近的內容變化而無需檢索全部內容
put使用客戶端提供的資料新增實體,put請求將應用伺服器所需的請求資訊放在請求體中,來建立新的實體,put是冪等的
delete
根據uri的內容或客戶端提供的請求體來刪除實體,delete請求是rest服務介面中使用最頻繁的
http 規範允許http客戶端與伺服器之間新增、刪除、重排以及修改http頭,雖然使用了有狀態的tcp傳輸層,但http取是乙個無狀態的協議,,意味著http伺服器並不會保留關於某個請求的任何訊息以用在未來的請求中,cookie提供了一種方式可以將一些簡單的狀態資訊儲存到客戶端,並在後續的請求中與伺服器進行通訊。
http頭之後是可選的請求體,請求體可以是任意位元組的序列,通過乙個空行與頭分割開。請求體必須遵循客戶端與伺服器之間預先確定的資料編碼。該編碼通常是xml或者是json。在ios中,nsurlrequest 及其子類nsmutablerequest提供了必要的方法和屬性。
1.2.3 響應內容
在http伺服器與應用伺服器處理完請求後,http響應會通過同乙個tcp socket返回給客戶端。http響應的結構類似於http請求,第一行是狀態行,接著是頭,響應體。狀態行包括3個域,第乙個是:響應的http版本、請求結果的狀態值。首先是3位整數,包含了請求結果的狀態碼,後面接的是說明短語。
緊接的狀態行的是響應頭,響應頭之間通過回車換行進行分割。每個頭都包含了關於響應的元資料,包括資料的修改時間、客戶端可以快取資料多長時間,資料的編碼方式、以及在隨後的請求中提交的狀態資訊。
響應體是通過空行與響應行分開的。響應體可以包含任意數量的二進位制字元,與客戶端通訊的響應體的長度可以通過請求的content-length頭或者通過編碼實現。塊編碼響應包括:transfer-encoding頭,並帶有chunked值。塊編碼包含乙個或者多個體片段。每個片段都有起始行,指定塊中的位元組數量。
讀書筆記 iOS 網路 HTTP 請求內容
一,get方法。從伺服器獲取一段內容,用http術語來說就是實體。get請求通常不包含請求體,不過也是可以包含的。有些網路快取設施只會快取get響應。get請求通常不會導致伺服器端的資料變化。二,post方法。使用客戶端提供的資料更新實體。post請求通常會在請求體中加入應用伺服器所需的資訊。pos...
iOS開發之HTTP與HTTPS網路請求
http是網際網路中應用最為廣泛的一種網路協議,在進入正文之前,先解釋什麼是網路協議?網路協議為計算機網路中進行資料交換而建立的規則 標準或約定的集合。網路協議是由以下三個要素組成 語義 語法 時序。國際標準化組織 iso 在1978年提出了 開放系統互聯參考模型 即著名的osi rm模型 open...
iOS 讀書筆記 網路請求
知道 3次握手 嗎?突然想起這個詞 什麼是3次握手?tcp三次握手 四次揮手詳解 這裡是3次握手的詳細解釋 3次握手就是為了可靠的傳送資料,tcp 什麼是tcp呢?tcp就是一種可靠傳輸的協議 在傳送資料之前,兩台主機之間進行3次握手。3次握手完成後才傳送資料。預備知識 位碼即tcp標誌位,有6種標...