一次HTTP操作稱為一個事務,其工作過程可分為四步:
- 首先客戶端與服務器需要建立連接。只要單機某個超級鏈接,HTTP的工作就開始了。
- 建立連接后,客戶端發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,后邊是MIME信號包括請求修飾符、客戶端信息和其他內容。
- 服務器接到請求后,給予相應的響應信息,其格式為一個狀態行,包括信息的協議版本號、一個成功或者失敗的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內容。
- 客戶端接收到服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏幕上,然后客戶端和服務器斷開連接。
HTTP協議永遠都是客戶端發起請求,服務器回送相應。
這樣就限制了使用HTTP協議,無法實現在客戶端沒有發起請求的時候,服務器將消息推送給客戶端。
HTTP協議是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有關系的。
URL(統一資源定位符)也被稱為網頁地址,是因特網上標準的資源的地址。
例如:http://www.imooc.com/index.jsp,URL的格式由三部分組成:
- 第一部分是協議(或稱為服務方式)。例如“http”或者“https”;
- 第二部分是存有該資源的主機IP地址(有時候也包括端口號)。例如“www.imooc.com”;
- 第三部分是主機資源和具體地址,例如目錄和文件名。例如“index.jsp”;
第一部分和第二部分用“://”隔開,第二部分和第三部分用“/”隔開。第一部分和第二部分不可缺少。
HTTP協議建立在TCP/IP協議之上。
TCP/IP三次握手:
客戶端要和服務端建立連接時,客戶端向服務端發送SYN消息,服務器收到消息后向客戶端發送SYN+ACK消息,最后客戶端再以ACK消息響應,如此一來才會在客戶端和服務端之間建立起可靠的TCP連接,數據才可以在客戶端和服務器之間傳遞。
SYN:synchronous,握手信號。
ACK:Acknowledgment,確認字符。接收站發送給發送站的一種傳輸類控制字符,表示發來是數據已接收、確認無誤。
OSI (Open System Interconnection)七層協議
由低到高分別是:
物理層
數據鏈路層
網絡層
傳輸層
會話層
表示層
應用層
如下摘自網絡:
- 物理層的作用是實現相鄰計算機節點之間比特流的透明傳送,盡可能屏蔽掉具體傳輸介質和物理設備的差異。
- 數據鏈路層(Data Link Layer)是OSI模型的第二層,負責建立和管理節點間的鏈路。
- 網絡層(Network Layer)是OSI模型的第三層,它是OSI參考模型中最復雜的一層。它在下兩層的基礎上向資源子網提供服務。其主要任務是:通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑。
- 傳輸層(Transport Layer)是OSI模型的第4層。因此該層是通信子網和資源子網的接口和橋梁,起到承上啟下的作用。該層的主要任務是:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
- 會話層(Session Layer)是OSI模型的第5層,是用戶應用程序和網絡之間的接口,主要任務是:向兩個實體的表示層提供建立和使用連接的方法。
- 表示層(Presentation Layer)是OSI模型的第六層,它對來自應用層的命令和數據進行解釋,對各種語法賦予相應的含義,并按照一定的格式傳送給會話層。其主要功能是“處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密”等。
- 應用層(Application Layer)是OSI參考模型的最高層,它是計算機用戶,以及各種應用程序和網絡之間的接口,其功能是直接向用戶提供服務,完成用戶希望在網絡上完成的各種工作。
后來有人將此簡化為 TCP/IP 四層協議
http/1.0和1.1區別
HTTP/1.0每次請求都需要建立新的TCP連接,連接不能復用。
HTTP/1.1新的請求可以在上次請求建立的TCP連接之上發送,連接可以復用。優點是減少重復進行TCP三次握手的開銷,提高效率。
HTTP1.1在Request消息頭里頭多了一個Host域,HTTP1.0則沒有這個域。Host:www.w3.org
HTTP1.1增加了OPTIONS,PUT,DELETE,TRACE,CONNECT這些Request方法等
HttpClient比HttpURLConnection更加的強大和豐富。所以建議使用這個來開發Android的http客戶端。
但從android sdk(6.0)開始,Google在官方文檔里已經不推薦用HttpClient。
話說Google廢棄了HttpClient,卻沒有新的網絡框架作為替代……而實際開發中又并不會用HttpURLConnection,所以一般都是用開源網絡請求框架,比如 loopj和 Volley。