您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS中HTTP傳輸協(xié)議

大?。?/span>0.3 MB 人氣: 2017-09-26 需要積分:1

  一、HTTP協(xié)議

  HTTP本質(zhì)上是一種協(xié)議,全稱是Hypertext Transfer Protocol,即超文本傳輸協(xié)議。從名字上可以看出該協(xié)議用于規(guī)定客戶端與服務(wù)端之間的傳輸規(guī)則,所傳輸?shù)膬?nèi)容不局限于文本(其實(shí)可以傳輸任意類型的數(shù)據(jù))。

  iOS中HTTP傳輸協(xié)議

  圖1.1傳輸示意圖.png

  二、HTTP請求與響應(yīng)的內(nèi)容

  當(dāng)我們往服務(wù)端發(fā)送一條HTTP請求時(shí)都發(fā)送了哪些東西過去呢?

  先看一個(gè)POST請求的示例圖:

  iOS中HTTP傳輸協(xié)議

  圖2.1 HTTP_POST請求示例.png

  注:本文使用Paw來模擬發(fā)送HTTP請求,使用Charles抓包,Charles選中“Request”以及“Raw”選項(xiàng)就可以看到請求的全部內(nèi)容

  以上示例圖中其實(shí)已經(jīng)包含了一個(gè)HTTP請求所必備的幾大要素:請求行、請求頭(headerField)、請求體(body);同理,響應(yīng)也有狀態(tài)行、響應(yīng)頭、實(shí)體內(nèi)容。接下來我們逐個(gè)展開。

  1、請求行

  請求行包含請求方法(Method)、請求統(tǒng)一資源標(biāo)識符(URI)、HTTP版本號,如圖2.1第一行所示:

  

  圖2.2 請求行.png

  請求方法就是我們所熟悉的POST、GET、HEAD、PUT等

  URI就是URL中排除掉Host剩下的部分,也就是資源在服務(wù)器本地上的路徑

  HTTP版本號,目前主流的版本是1.1(1999年開始采用),最新的版本是2.0(2015年5月發(fā)布)。不同版本之間差異下面會再展開

  2、請求頭

  請求頭主要存放對客戶端想給服務(wù)端的附加信息,下圖框框的部分就是請求頭:

  iOS中HTTP傳輸協(xié)議

  圖2.3 請求頭.png

  HTTP請求在iOS中用NSURLRequest與NSMutableRequest表示;HTTP響應(yīng)用NSHTTPURLResponse表示。

  Host: 目標(biāo)服務(wù)器的網(wǎng)絡(luò)地址

  Accept: 讓服務(wù)端知道客戶端所能接收的數(shù)據(jù)類型,如text/html */*

  Content-Type: body中的數(shù)據(jù)類型,如application/json; charset=UTF-8

  Accept-Language: 客戶端的語言環(huán)境,如zh-cn

  Accept-Encoding: 客戶端支持的數(shù)據(jù)壓縮格式,如gzip

  User-Agent: 客戶端的軟件環(huán)境,我們可以更改該字段為自己客戶端的名字,比如QQ music v1.11,比如瀏覽器Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Maxthon/4.5.2

  Connection: keep-alive,該字段是從HTTP 1.1才開始有的,用來告訴服務(wù)端這是一個(gè)持久連接,“請服務(wù)端不要在發(fā)出響應(yīng)后立即斷開TCP連接”。關(guān)于該字段的更多解釋將在后面的HTTP版本簡介中展開。

  Content-Length: body的長度,如果body為空則該字段值為0。該字段一般在POST請求中才會有。

  POST請求的body請求體也有可能是空的,因此POST中Content-Length也有可能為0

  Cookie: 記錄者用戶信息的保存在本地的用戶數(shù)據(jù),如果有會被自動附上

  值得一提的是,在iOS中當(dāng)你發(fā)送一個(gè)任意請求時(shí),不管你愿不愿意,NSURLRequest都會自動幫你記錄你所訪問的URL上設(shè)置的cookie。在iOS中用NSHTTPCookieStorage表示,是一個(gè)單例。通過

  NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (NSHTTPCookie *cookie in [cookieJar cookies]) { NSLog(@“%@”, cookie); }

  可以獲取目前被自動保存的所有cookie。對cookie的操作感興趣的請移步iOS中http請求使用cookie這篇文章。

?

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發(fā)表評論

      用戶評論
      評價(jià):好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?