http協議概述

資源推薦

1.HTTP權威指南。html

HTTP權威指南》由古爾利所著,《HTTP權威指南》詳細解釋了HTTP協議,包括HTTP是如何工做的,如何用HTTP來開發基於Web的應用程序,核心的因特網協議如何與架構構建塊交互,如何正確實現因特網客戶和服務器等。後端

這個pdf高清無碼的(非掃描版),是我在網上購買的,特來分享。鏈接以下:安全

HTTP權威指南下載  http://pan.baidu.com/s/1bnz1dMn服務器

2.網絡基礎系列博客。網絡

http協議分析工具  http://www.cnblogs.com/klguang/p/4624333.html
http報文詳解  http://www.cnblogs.com/klguang/p/4618526.html
架構

URL與資源  http://www.cnblogs.com/klguang/p/4595599.htmlsocket

http協議概述  http://www.cnblogs.com/klguang/p/4594910.html工具

介紹

HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。 加密

載體:     報文 spa

______|______

|     |      |

    起始行 標頭 主體

過程:鏈接->請求->迴應->斷開

1.支持客戶/服務器模式。

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

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

4.無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。

5.無狀態:HTTP 協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

在TCP/IP協議棧中的位置

HTTP協議一般承載於TCP協議之上,有時也承載於TLSSSL協議層之上,這個時候,就成了咱們常說的HTTPS

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。

即HTTP下加入SSL層,HTTPS的安全基礎是SSL,所以加密的詳細內容就須要SSL。

HTTPS和HTTP的區別主要爲如下四點:

1、https協議須要到ca申請證書,通常免費證書不多,須要交費。

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

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

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

以下圖所示:

   

   

HTTP的請求響應模型

HTTP協議永遠都是客戶端發起請求,服務器回送響應。

這樣就限制了使用HTTP協議,沒法實如今客戶端沒有發起請求的時候,服務器將消息推送給客戶端。 HTTP協議是一個無狀態的協議,同一個客戶端的此次請求和上次請求是沒有對應關係。

推送 (輪詢) 表象的推送實際上是客戶端定時請求服務器的。

1.輪詢:客戶端定時向服務器發送Ajax請求,服務器接到請求後立刻返回響應信息並關閉鏈接。

優勢:後端程序編寫比較容易。

缺點:請求中有大半是無用,浪費帶寬和服務器資源。

實例:適於小型應用。

2.長輪詢:客戶端向服務器發送Ajax請求,服務器接到請求後hold住鏈接,直到有新消息才返回響應信息並關閉鏈接,客戶端處理完響應信息後再向服務器發送新的請求。

優勢:在無消息的狀況下不會頻繁的請求。

缺點:服務器hold鏈接會消耗資源。

實例:WebQQHi網頁版、Facebook IM

 

另外,對於長鏈接和socket鏈接也有區分:

1.長鏈接:在頁面裏嵌入一個隱蔵iframe,將這個隱蔵iframesrc屬性設爲對一個長鏈接的請求,服務器端就能源源不斷地往客戶端輸入數據。

優勢:消息即時到達,不發無用請求。

缺點:服務器維護一個長鏈接會增長開銷。

實例:Gmail聊天

2.Flash Socket:在頁面中內嵌入一個使用了Socket類的 Flash 程序JavaScript經過調用此Flash程序提供的Socket接口與服務器端的Socket接口進行通訊,JavaScript在收到服務器端傳送的信息後控制頁面的顯示。

優勢:實現真正的即時通訊,而不是僞即時。

缺點:客戶端必須安裝Flash插件;非HTTP協議,沒法自動穿越防火牆。

實例:網絡互動遊戲。

   

工做流程

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

1)首先客戶機與服務器須要創建鏈接。只要單擊某個超級連接,HTTP的工做開始。

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

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

4)客戶端顯示響應消息而後客戶機與服務器斷開鏈接。 若是在以上過程當中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來講,這些過程是由HTTP本身完成的,用戶只要用鼠標點擊,等待信息顯示就能夠了。

   

HTTP報文

報文,是網絡中交換和傳輸的數據單元,即站點一次性要發送的數據塊。報文包含了將要發送的完整的數據信息,其長短很不一致,長度不限且可變。

報文流

HTTP 報文是在HTTP 應用程序之間發送的數據塊。這些數據塊以一些文本形式的元信息(meta-information)開頭,這些信息描述了報文的內容及含義,後面跟着可選的數據部分。這些報文在客戶端、服務器和代理之間流動。

報文組成

一個HTTP報文由3部分組成,分別是:

(1)、起始行(start line)

a.請求行

請求報文請求服務器對資源進行一些操做。請求報文的起始行,或稱爲請求行,包含了一個方法和一個請求URL,這個方法描述了服務器應該執行的操做,請求URL描述了要對哪一個資源執行這個方法。請求行中還包含HTTP 的版本,用來告知服務器,客戶端使用的是哪一種HTTP全部這些字段都由空格符分隔。

b.響應行

響應報文承載了狀態信息和操做產生的全部結果數據,將其返回給客戶端。響應報文的起始行,或稱爲響應行,包含了響應報文使用的HTTP 版本數字狀態碼,以及描述操做狀態的文本形式的緣由短語全部這些字段都由空格符進行分隔。

(2)、首部<標頭>(header)

a.常見首部

每一個HTTP 首部都有一種簡單的語法:名字後面跟着冒號( :),而後跟上可選的空格,再跟上字段值,最後是一個CRLF。

HTTP 規範定義了幾種首部字段。應用程序也能夠隨意發明本身所用的首部。

常見的首部實例

   

b. 首部延續行

將長的首部行分爲多行能夠提升可讀性,多出來的每行前面至少要有一個空格或制 表符(tab)。

例如:

HTTP/1.0 200 OK

Content-Type: image/gif

Content-Length: 8572

Server: Test Server

Version 1.0

(3)、主體(body)

HTTP 報文的第三部分是可選的實體主體部分。實體的主體是HTTP 報文的負荷。 就是HTTP 要傳輸的內容。

HTTP 報文能夠承載不少類型的數字數據:圖片、視頻、HTML 文檔、軟件應用程序、信用卡事務、電子郵件等。

如下是報文的一個示例

報文語法

這是請求報文的格式:

<method> <request-URL> <version>

<headers>

<entity-body>

這是響應報文的格式(注意,只有起始行的語法有所不一樣):

<version> <status> <reason-phrase> eg:HTTP/1.0 200 OK

<headers>

<entity-body>

相關文章
相關標籤/搜索