HTTP 詳解

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是互聯網上應用最爲普遍的一種網絡協議,用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。css

HTTP是客戶端瀏覽器或其餘程序與Web服務器之間的應用層通訊協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機須要經過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不只可用於Web訪問,也能夠用於其餘因特網/內聯網應用系統之間的通訊,從而實現各種應用資源超媒體訪問的集成。html

HTTP協議工做流程

  1. 客戶端和服務器之間創建一條鏈接
  2. 鏈接創建後,客戶端向服務器發起一個請求(request)
  3. 服務器收到一個請求後,給客戶端一個響應(應答,response)
  4. 客戶端收到響應後作進一步處理

HTTP請求方法

  • GET請求會向數據庫發索取數據的請求,從而來獲取信息,該請求就像數據庫的select操做同樣,只是用來查詢一下數據,不會修改、增長數據,不會影響資源的內容,即該請求不會產生反作用。不管進行多少次操做,結果都是同樣的。
  • PUT請求是向服務器端發送數據的,從而改變信息,該請求就像數據庫的update操做同樣,用來修改數據的內容,可是不會增長數據的種類等,也就是說不管進行多少次PUT操做,其結果並無不一樣。
  • POST請求同PUT請求相似,都是向服務器端發送數據的,可是該請求會改變數據的種類等資源,就像數據庫的insert操做同樣,會建立新的內容。幾乎目前全部的提交操做都是用POST請求的。
  • DELETE請求顧名思義,就是用來刪除某一個資源的,該請求就像數據庫的delete操做

就像前面所講的同樣,既然PUT和POST操做都是向服務器端發送數據的,那麼二者有什麼區別呢。。。POST主要做用在一個集合資源之上的(url),而PUT主要做用在一個具體資源之上的(url/xxx),通俗一下講就是,如URL能夠在客戶端肯定,那麼可以使用PUT,不然用POST。
綜上所述,咱們可理解爲如下:數據庫

一、POST /url 建立  
二、DELETE /url/xxx 刪除 
三、PUT /url/xxx 更新
四、GET /url/xxx 查看

Http定義了與服務器交互的不一樣方法,最基本的方法有4種,分別是GET,POST,PUT,DELETE。URL全稱是統一資源定位符,咱們能夠這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操做瀏覽器

#### 請求方式: get與post請求緩存

  • GET提交的數據會放在URL以後,也就是請求行裏面,以?分割URL和傳輸數據,參數之間以&相連,如EditBook?name=test1&id=123456.(請求頭裏面那個content-type作的這種參數形式,後面講) POST方法是把提交的數據放在HTTP包的請求體中.
  • GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.
  • GET與POST請求在服務端獲取請求數據方式不一樣,就是咱們本身在服務端取請求數據的時候的方式不一樣了,這句廢話昂。

HTTP請求報文格式

HTTP請求報文由3部分組成(請求行+請求頭+請求體):安全

image
①是請求方法,HTTP/1.1 定義的請求方法有8種:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的兩種GET和POST,若是是RESTful接口的話通常會用到GET、POST、DELETE、PUT。服務器

②爲請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL網絡

③是協議名稱及版本號。post

④是HTTP的報文頭,報文頭包含若干個屬性,格式爲「屬性名:屬性值」,服務端據此獲取客戶端的信息。網站

⑤是報文體,它將一個頁面表單中的組件值經過param1=value1&param2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體能夠傳遞請求參數,請求URL也能夠經過相似於「/chapter15/user.html? param1=value1&param2=value2」的方式傳遞請求參數。

對照上面的請求報文,咱們把它進一步分解,你能夠看到一幅更詳細的結構圖:
image

HTTP響應報文格式

①報文協議及版本;

②狀態碼及狀態描述;

③響應報文頭,也是由多個屬性組成;

④響應報文體,即咱們真正要的「乾貨」。

和請求報文相比,響應報文多了一個「響應狀態碼」,它以「清晰明確」的語言告訴客戶端本次請求的處理結果。
image

image

HTTP狀態碼

全部HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。

狀態代碼的第一個數字表明當前響應的類型:

  • 1xx 消息(信息性狀態碼)——請求已被服務器接收,繼續處理
  • 2xx 成功(成功狀態碼)——請求已成功被服務器接收、理解、並接受
  • 3xx 重定向(重定向狀態碼)——須要後續操做才能完成這一請求
  • 4xx 請求錯誤(客戶端錯誤狀態碼)——請求含有詞法錯誤或者沒法被執行
  • 5xx 服務器錯誤(服務端錯誤狀態碼)——服務器在處理某個正確請求時發生錯誤

HTTP和Https

HTTP:是互聯網上應用最爲普遍的一種網絡協議,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可使瀏覽器更加高效,使網絡傳輸減小。

HTTPS:是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。

HTTPS協議的主要做用能夠分爲兩種:一種是創建一個信息安全通道,來保證數據傳輸的安全;另外一種就是確認網站的真實性。

HTTP協議傳輸的數據都是未加密的,也就是明文的,所以使用HTTP協議傳輸隱私信息很是不安全,爲了保證這些隱私數據能加密傳輸,因而網景公司設計了SSL(安全套接字層協議)(Secure Sockets Layer)協議用於對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來講,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。

HTTPS和HTTP的區別主要以下:

一、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。

二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。

三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。

四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

在瀏覽器中輸入網址以後執行會發生什麼?

(1). 瀏覽器查詢 DNS,獲取域名對應的IP地址:具體過程包括瀏覽器搜索自身的DNS緩存、搜索操做系統的DNS緩存、讀取本地的Host文件和向本地DNS服務器進行查詢等。對於向本地DNS服務器進行查詢,若是要查詢的域名包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析(此解析具備權威性);若是要查詢的域名不禁本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析(此解析不具備權威性)。若是本地域名服務器並未緩存該網址映射關係,那麼將根據其設置發起遞歸查詢或者迭代查詢;

(2). 瀏覽器得到域名對應的IP地址之後,瀏覽器向服務器請求創建連接,發起三次握手;

(3). TCP/IP連接創建起來後,瀏覽器向服務器發送HTTP請求;

(4). 服務器接收到這個請求,並根據路徑參數映射到特定的請求處理器進行處理,並將處理結果及相應的視圖返回給瀏覽器;

(5). 瀏覽器解析並渲染視圖,若遇到對js文件、css文件及圖片等靜態資源的引用,則重複上述步驟並向服務器請求這些資源;

(6). 瀏覽器根據其請求到的資源、數據渲染頁面,最終向用戶呈現一個完整的頁面。

相關文章
相關標籤/搜索