HTTP原理 請求方法


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

HTTP的工作過程

一次HTTP操作稱為一個事務,其工作過程分為四步:

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

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

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

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

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

HTTP協議的主要特點:

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

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的性能更好一些。

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

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

2、異步請求不會阻塞主線程,而會建立一個新的線程來操作,用戶發出異步請求后,依然可以對UI進行操作,程序可以繼續運行

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

4、POST請求,將參數放到body里面。POST請求操作相對復雜,需要將參數和地址分開,不過安全性高,參數放在body里面,不易被捕獲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM