HTTP原理 請求方法

———————————————————————————————————————ios

HTTP的工做過程json

一次HTTP操做稱爲一個事務,其工做過程分爲四步:瀏覽器

1.客戶機與服務器創建鏈接:客戶單擊某個超級連接,HTTP的工做開始,接下來進行TCP鏈接的三次握手過程。安全

2.創建鏈接後,客戶幾發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號、MIME信息(包括請求修飾符、客戶機信息和可能的內容)。服務器

3.服務器接到請求後,給予相應的響應信息,其格式爲:一個狀態行(包括信息的協議版本號)、一個成功或錯誤的代碼、後面的是MIME信息(包括服務器信息、實體信息、可能的內容)。網絡

4.客戶端接收到服務器所返回的信息,經過瀏覽器顯示在用戶的顯示屏上,而後客戶機與服務器斷開鏈接。客戶端收到服務器信息後,向服務器發送一個確認包,此包發送完畢,表示完成三次握手。架構

———————————————————————————————————————框架

HTTP協議的主要特色:異步

1.支持客戶/服務器模式-》過程post

2.簡單快速:客戶向服務器請求服務時,只需發送請求方法(經常使用的有GET/POST/HEAD)和路徑。每種請求方法規定了客戶與服務器聯繫的類型不一樣,因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度快。

3.靈活:HTTP容許傳輸任意類型的數據對象,正在傳輸的類型用Content-Type加以標記。

4.無鏈接:限制每次鏈接只處理一個請求,服務器處理完客戶端的請求,並收到客戶的應答後,斷開鏈接。

5.無狀態:協議對於事務處理沒有記憶能力。缺乏狀態意味着後續處理須要前面的信息,則它必須重傳,這樣致使1.每次鏈接傳送的數據量增大 2.服務器不須要先前的信息,它的應答速度較快。

———————————————————————————————————————

HTTP請求過程

HTTP請求: 短鏈接:一次鏈接,服務器只處理一個請求!請求處理完畢以後,會自動斷開鏈接!

HTTP請求是一個特殊處理的Socket(TCP/IP)

{

    一個完整的HTTP請求分爲兩個過程:

    

    1. 請求

    {

        請求行: 包含了請求方法、請求資源路徑、HTTP協議版本

GET(請求方法) /resources/vedios.json(資源路徑) HTTP/1.1(http協議版本)

        

        請求頭:包含了對客戶端的環境描述、客戶端請求的主機地址等信息

User-Agent (在請求頭中設置一些信息,這些信息是告訴服務器的一些數據!),請求方法通常都是在請求頭中設置!

        

        請求體: 客戶端發給服務器的具體數據,好比文件數據

只有 POST 請求才有請求體 ,GET 請求是沒有請求體的. 若是這個請求須要附帶一些參數(經過參數告訴服務器返回什麼數據),POST請求將參數封裝在請求體中,GET請求直接將參數拼接在url中.

    }

    2. 響應

    {

        響應行: HTTP/1.1(http協議版本) 304(網絡鏈接狀態碼) Not Modified(網絡鏈接狀態碼簡要說明)

        響應頭: 會返回服務器信息,還會返回本次請求數據(實體內容)的信息.

        

        實體內容: 就是客戶端想要的數據!

    }

}

———————————————————————————————————————

常見的響應狀態碼:

200          請求成功

400客戶端請求的語法錯誤,服務器沒法解析

404服務器沒法根據客戶端的請求找到資源

500服務器內部錯誤,沒法完成請求

———————————————————————————————————————

發送HTTP請求的方法

1.簡單說明

在HTTP/1.1協議中,定義了8種發送http請求的方法

GET、POST、OPTIONS、HEAD(只得到響應頭信息,不獲取實體內容)、PUT、DELETE、TRACE、CONNECT、PATCH

根據HTTP協議的設計初衷,不一樣的方法對資源有不一樣的操做方式

PUT :增

DELETE :刪

POST:改

GET:查

提示:最經常使用的是GET和POST(實際上GET和POST都能辦到增刪改查)

 

2.get和post請求                   

要想使用GET和POST請求跟服務器進行交互,得先了解一個概念:參數就是傳遞給服務器的具體數據,好比登陸時的賬號、密碼

GET和POST對比:GET和POST的主要區別表如今數據傳遞上

GET

在請求URL後面以?的形式跟上發給服務器的參數,多個參數之間用&隔開,好比http://ww.test.com/login?username=123&pwd=234&type=JSON

注意:因爲瀏覽器和服務器對URL長度有限制,所以在URL後面附帶的參數是有限制的,一般不能超過1KB

POST

發給服務器的參數所有放在請求體中

理論上,POST傳遞的數據量沒有限制(具體還得看服務器的處理能力)

                     

3.GET和POST的選擇

選擇GET和POST的建議

(1)若是要傳遞大量數據,好比文件上傳,只能用POST請求

(2)GET的安全性比POST要差些,若是包含機密\敏感信息,建議用POST

(3)若是僅僅是索取數據(數據查詢),建議使用GET

(4)若是是增長、修改、刪除數據,建議使用POST    

                     

4.iOS中發送HTTP請求的方案

在iOS中,常見的發送HTTP請求(GET和POST)的解決方案有

(1)蘋果原生(自帶)

NSURLConnection:用法簡單,最古老最經典最直接的一種方案,可發送同步請求,也可發送異步請求。

NSURLSession:iOS 7新出的技術,功能比NSURLConnection更增強大,NSUrlSession 沒有提供同步請求的方法. 全部關於 NSUrlSession 發送的網絡請求都是異步的.

CFNetwork:NSURL*的底層,純C語言

(2)第三方框架

ASIHttpRequest:外號「HTTP終結者」,功能極其強大,惋惜早已中止更新

AFNetworking:簡單易用,提供了基本夠用的經常使用功能

建議:

爲了提升開發效率,企業開發用的基本是第三方框架

5.ASI和AFN架構對比

說明:AFN基於NSURL,ASI基於CFHTTP,ASI的性能更好一些。

———————————————————————————————————————

一、同步請求能夠從因特網請求數據,一旦發送同步請求,程序將中止用戶交互,直至服務器返回數據完成,才能夠進行下一步操做,

二、異步請求不會阻塞主線程,而會創建一個新的線程來操做,用戶發出異步請求後,依然能夠對UI進行操做,程序能夠繼續運行

三、GET請求,將參數直接寫在訪問路徑上。操做簡單,不過容易被外界看到,安全性不高,地址最多255字節;

四、POST請求,將參數放到body裏面。POST請求操做相對複雜,須要將參數和地址分開,不過安全性高,參數放在body裏面,不易被捕獲。

相關文章
相關標籤/搜索