http是網際網路中應用最為廣泛的一種網路協議,在進入正文之前,先解釋什麼是網路協議?網路協議為計算機網路中進行資料交換而建立的規則、標準或約定的集合。網路協議是由以下三個要素組成:語義、語法、時序。國際標準化組織(iso)在2023年提出了「開放系統互聯參考模型」,即著名的osi/rm模型(open system interconnection/reference model)。它將計算機網路體系結構的通訊協議劃分為七層,自下而上依次為:物理層(physics layer)、資料鏈路層(data link layer)、網路層(network layer)、傳輸層(transport layer)、會話層(session layer)、表示層(presentation layer)、應用層另外還有一種參考模型,tcp/ip參考模型(tcp/ip reference model)。是首先由arpanet所使用的網路體系結構。這個體系結構在它的兩個主要協議出現以後被稱為tcp/ip參考模型。這一網路協議共分為四層:網路訪問層、網際網路層、傳輸層和應用層。需要注意的一點是,tcp/ip協議不是tcp和ip這兩個協議的合稱,而是指網際網路整個tcp/ip協議族。
下面一幅**釋兩種分層之間對應關係:
從上圖中可以看出,http是應用層中的一種協議。那麼http到底是什麼呢?
http是乙個客戶端和伺服器端請求和應答的標準。http是客戶端瀏覽器或其他程式與web伺服器之間的應用層通訊協議。在internet上的web伺服器上存放的都是超文字資訊,客戶機需要通過http協議傳輸所要訪問的超文字資訊。http包含命令和傳輸資訊,不僅可用於web訪問,也可以用於其他網際網路/內聯網應用系統之間的通訊,從而實現各類應用資源超**訪問的整合。
通常http訊息包括客戶機向伺服器的請求訊息和伺服器向客戶機的響應訊息。這兩種型別的訊息由乙個起始行,乙個或者多個頭域,乙個指示頭域結束的空行和可選的訊息體組成。http的頭域包括通用頭,請求頭,響應頭和實體頭四個部分。每個頭域由乙個網域名稱,冒號(:)和域值三部分組成。網域名稱是大小寫無關的,域值前可以新增任何數量的空格符,頭域可以被擴充套件為多行,在每行開始處,使用至少乙個空格或製表符。
http通訊的基本單位是報文,http報文由從客戶機到伺服器的請求和從伺服器到客戶機的響應構成。包括請求報文和響應報文。請求報文格式如下:
請求行 - 通用資訊頭 - 請求頭 - 實體頭 - 報文主體
請求行以方法字段開始,後面分別是 url 欄位和 http 協議版本字段,並以 crlf 結尾。
響應報文格式如下:
狀態行 - 通用資訊頭 - 響應頭 - 實體頭 - 報文主體
其中狀態碼元由3位數字組成,表示請求是否被理解或被滿足。
常見的狀態碼對應的含義
http請求方法包括get、post、put、delete、patch、head、
options、trace。其中get和post最為常用。
get和post的區別
從語義角度來說,get是從指定的資源請求資料,post是向指定的資源提交要被處理的資料。通俗點將,get是獲取資料,post是更新資料。
具體區別可以大致總結為一下幾點:
(1) get的url可見,post的url不可見;
(2) get請求可以被快取,post不會被快取;
(3) get請求可以保留在瀏覽器歷史記錄中,post不會;
(4) get請求有長度限制,2048個位元組,post長度沒有限制;
(5) get請求是冪等性的,post是非冪等性的;
(6) get請求的安全性沒有post高。
在http工作之前,web瀏覽器通過網路和web伺服器建立鏈連線,該連線是通過tcp來完成的,上文說過,tcp協議和ip共同組成了internet,即著名的tcp/ip協議族,http是比tcp更高的應用層協議,一般tcp介面的埠號是80。
tcp被稱為「面向連線」的傳輸層協議,需知道的是,傳輸層主要有兩個協議,分別是 tcp 和 udp。
下面一張圖來解釋tcp連線流程:
連線的建立需要通過三次握手,連線的斷開需要通過四次揮手。
三次握手:第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_send狀態,等待伺服器確認;
第二次握手:伺服器收到syn包,必須確認客戶syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established狀態,完成三次握手。 完成三次握手,客戶端與伺服器開始傳送資料。
四次揮手:第一次握手:tcp傳送乙個fin(結束),用來關閉客戶到服務端的連線。
第二次握手:服務端收到這個fin,他發回乙個ack(確認),確認收到 序號為收到序號+1,和syn一樣,乙個fin將占用乙個序號。
第三次握手:服務端傳送乙個fin(結束)到客戶端,服務端關閉客戶端的連線。
第四次握手:客戶端傳送ack(確認)報文確認,並將確認的序號+1,這樣關閉完成。
https是以安全為目標的http通道,簡單講是http的安全版,即http+ssl/tsl
https使用埠443,而不是象http那樣使用埠80來通訊。
ssl使用40位關鍵字作為rc4流加密演算法,這對於商業資訊的加密是合適的。
https的建立流程
(1)客戶使用https的url訪問伺服器,要求與伺服器建立ssl連線。
(2)伺服器收到客戶端請求後,會將**的證書資訊(證書中包含公鑰)傳送乙份給客戶端。
(3)客戶端的瀏覽器與伺服器開始協商ssl連線的安全等級,也就是資訊加密的等級。
(4)客戶端的瀏覽器根據雙方同意的安全等級,建立會話金鑰,然後利用**的公鑰將會話金鑰加密,並傳送給**。
(5)伺服器利用自己的私鑰解密出會話金鑰。
(6)伺服器利用會話金鑰加密與客戶端之間的通訊。
如下圖所示:
https和http的區別主要如下:
1、https協議需要到ca申請證書,一般免費證書較少,因而需要一定費用。
2、http是超文字傳輸協議,資訊是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
3、http和https使用的是完全不同的連線方式,用的埠也不一樣,前者是80,後者是443。
4、http的連線很簡單,是無狀態的;https協議是由ssl+http協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。
iOS開發之http協議
一 url 1.基本介紹 url的全稱是uniform resource locator 統一資源定位符 通過1個url,能找到網際網路上唯一的1個資源 url就是資源的位址 位置,網際網路上的每個資源都有乙個唯一的url 2.url中常見的協議 超文字傳輸協議,訪問的是遠端的網路資源,格式是htt...
iOS開發之 網路 HTTP協議
http的全稱是hypertext transfer protocol,超文字傳輸協議 1.http協議簡介 不管是移動客戶端還是pc端,訪問遠端的網路資源經常使用http協議 獲得大眾點評的 資料 2.http協議的作用 1 規定客戶端和伺服器之間的資料傳輸格式 2 讓客戶端和伺服器能有效地進行資...
iOS 開發之https和http
https和http的區別 超文字傳輸協議http協議被用於在web瀏覽器和 伺服器之間傳遞資訊。http協議以明文方式傳送內容,不提供任何方式的資料加密,如果攻擊者擷取了web瀏覽器和 伺服器之間的傳輸報文,就可以直接讀懂其中的資訊,因此http協議不適合傳輸一些敏感資訊,比如信用卡號 密碼等。為...