HTTP協議精講

Http 1.0 與 Http 1.1的區別:

  • 1.0協議,客戶端與web服務器建立連接后,只能獲得一個web資源!

  • 1.1協議,允許客戶端與web服務器建立連接后,在一個連接上獲取多個web資源!

Http請求的工作流程:

SYN和ACK

  • SYN(synchronous):TCP/IP建立連接時使用的握手信號

  • ACK(Acknowledgement):確認字符,確認發來的數據已經接受無誤

TCP/IP三次握手的概念:

1、客戶端發送syn包(syn = j)到服務器,進入SYN_SEND狀態,然后等待服務器確認

2、服務器收到syn包,確認客戶的syn(ack = j + 1),同時在自己也發送一個SYN包(syn=k), 即SYN + ACK包,服務器進入SYN_RECV狀態

3、客戶端收到SYN + ACK包,想服務器發送確認包ACK(ack = k +1),發送完畢后,客戶端與服務端 進入ESTABLISHED狀態,完成三次握手,然后兩者開始傳送數據

TCP建立連接要進行3次握手,而斷開連接要進行4次

1 當主機A完成數據傳輸后,將控制位FIN置1,提出停止TCP連接的請求

2 主機B收到FIN后對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置1

3 由B 端再提出反方向的關閉請求,將FIN置1

4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.

TCP三次握手過程

1 主機A通過向主機B 發送一個含有同步序列號的標志位的數據段給主機B ,向主機B 請求建立連接,通過這個數據段,

主機A告訴主機B 兩件事:我想要和你通信;你可以用哪個序列號作為起始數據段來回應我.

2 主機B 收到主機A的請求后,用一個帶有確認應答(ACK)和同步序列號(SYN)標志位的數據段響應主機A,也告訴主機A兩件事:

我已經收到你的請求了,你可以傳輸數據了;你要用哪個序列號作為起始數據段來回應我

3 主機A收到這個數據段后,再發送一個確認應答,確認已收到主機B 的數據段:"我已收到回復,我現在要開始傳輸實際數據了

這樣3次握手就完成了,主機A和主機B 就可以傳輸數據了

"傳輸層"的功能,就是建立"端口到端口"的通信。相比之下,"網絡層"的功能是建立"主機到主機"的通信。只要確定主機和端口,我們就能實現程序之間的交流。因此,Unix系統就把主機+端口,叫做"套接字"(socket)。有了它,就可以進行網絡應用程序開發了。

一、HTTP關系密切的協議:IP、TCP和DNS

1、負責傳輸的IP協議

IP網際協議位于網絡層。IP的作用的就是把各種數據包傳送給對方。確保傳送到隨訪的兩個條件:IP地址和MAC地址

使用ARP協議憑借MAC地址進行通行。

2、確保可靠性的TCP協議

TCP位于傳輸層,提供可靠的字節流服務。

所謂字節流的服務,是為了方便傳輸,將大塊數據分割成報文段為單位的數據包進行管理。

確保數據能到達目標

TCP協議采用了三次握手策略。握手過程中使用了TCP的標志---SYN(synchronize)和ACK(acknowledment)

發送端首先發送一個帶SYN標志得瑟數據包給對方,接收端收到后,會傳一個帶有SYN/ACK標志的數據包以示傳達確認信息,最后,發送端再傳回一個帶ACK標志的數據包,代表握手結束。

3、負責域名解析的DNS服務

DNS服務是和Http協議一樣位于應用層的協議。它提供域名到IP地址之間的解析服務。

二、HTTP協議

1、HTTP協議用于客戶端和服務器端之間的通信。

2、通過請求和響應的交換達成通信。

3、HTTP是不保存狀態的協議。

HTTP可使用的方法

1、GET:獲取資源

GET方法用來請求訪問已被URI識別的的資源。

2、POST:傳輸實體主體

POST方法用來傳輸實體的主體。

3、PUT:傳輸文件

4、HEAD:獲取報文首部

HEAD方法和GET方法一樣,只是不返回報文主題部分。

5、DELETE:刪除文件

6、OPTION:詢問支持的方法。

7、TRACE:追蹤路徑

8、CONNECT:要求喲過隧道協議連接代理

CONNECT方法要求與代理服務器通信是建立隧道,實現用隧道協議進行TCP通信。主要使用SSL(安全套接字)和TLS(傳輸層安全)協議把通信內容加密后經網絡隧道傳輸。

持久連接:

HTTP keep-alive:只要任意一端有明確提出斷開連接,則保持TCP連接狀態。

持久連接的好處在于減少TCP連接的重復建立和斷開造成的額外開銷,減少了服務器的負載。

在Http/1.1,所有的連接默認都是持久化連接。

管線化

持久連接使得多數請求以管線化方式發送成為可能。從前發送請求后序等待并得到響應,才能發送下一個請求。管線化技術出現后,不用等待響應亦可直接發送下一個請求。

使用Cookie的狀態管理

HTTP是無狀態協議,它不對以前發生過的請求和響應的狀態進行管理。

Cookie技術通過在請求和響應報文中寫入coo kie信息來控制客戶端的狀態。

HTTP報文

用于HTTP協議交互的信息被稱為HTTP報文。請求端的HTTP報文叫做請求報文,相應端的叫做響應段的報文。

HTTP報文大致可以分為報文首部和報文主題兩個主體。

請求報文和響應報文的首部內容有以下數據組成

1、請求行

包含用于請求的方法,請求URI和HTTP的版本

2、狀態行

包含表明響應結果的狀態碼,原因短語和HTTP版本

3、首部字段

包含表示請求和響應的各種條件和屬性的各類首部。

編碼提升傳輸效率

1、壓縮傳輸的內容編碼(常用)

gzip

compress

deflate

identity

2、分割發送的分塊傳輸編碼

把主體分塊的功能稱為分塊傳輸編碼(chunked tranfer coding)

3、發送多種數據的多部分對象集合

多部分對象集合包含:

1、multipart/form-data

在web表單文件上傳時使用

2、multipart/byteranges

狀態碼206響應報文包含了多個范圍的內容時使用。


content-Type:mutipart/form-data;

獲取部分內容的范圍請求

指定范圍發送風格的請求叫做范圍請求(range request)


Range:bytes=5001-10000

另外多重范圍的范圍請求,響應會在首部字段Content-Type標明multipart/byteranges后返回響應報文。

內容協商返回最合適的內容

內容協商機制是指客戶端和服務器端就響應的資源內容進行交涉,然后提供給客戶端最為合適的資源


Accept

Accept-Charset

Accept-Encoding

Accept-Language

Accept-Language

用單臺虛擬主機實現多個域名

由于虛擬主機可以寄存多個不同主機名和域名的Web網站,因此在發送HTTP請求時,必須在Host首部內容完整指定主機名或域名的URI

通信數據轉發程序:代理,網關,隧道

1、代理

代理是一種有轉發功能的應用程序,它扮演了位于服務器和客戶端“中間人”的角色,接收由客戶端的請求并轉發給服務器,同時也接受服務器返回的響應并轉發給客戶端。

緩存代理

代理轉發響應,緩存代理回預先將資源的副本保存在代理服務器上。

當代理再次接收到對相同資源的請求時,就可以不從源服務器那里獲取資源,而是將之前的緩存的資源作為響應返回。

緩存的有效期

即使存在緩存,也會因為客戶端的要求,緩存的有效期等因素,向源服務器確認資源的有效性。若判斷緩存失效,緩存服務器將會再次從源服務器上獲取資源。

客戶端緩存

緩存不僅可以緩存在服務器中,還可以緩存在客戶端瀏覽器。

2、隧道

隧道可按要求建立起一條與其他服務器的通信線路,屆時使用SSL等加密手段進行通行。隧道的目的是確保客戶端與服務器進行安全的通信。

HTTP首部

HTTP請求報文

HTTP協議的請求和響應報文必定包含HTTP首部。

HTTP請求報文:方法,URI,HTTP版本,HTTP首部字段等部分構成

HTTP響應報文:

在響應中,HTTP報文由HTTP版本,狀態碼,HTTP首部字段3部分構成

HTTP首部字段結構

HTTP首部字段是由首部字段和字段值構成:

首部字段:字段值


Content-Type:text/html

keep-Alive:timeout=15,max=100

四種HTTP首部字段類型:

1、通用首部字段

請求報文和響應報文都會使用的首部

2、請求首部字段

3、響應首部字段

4、實體首部字段

通用首部字段

首部字段名 | 說明

---------------- | -------------------

Cache-Control | 控制緩存的行為

connection | 逐跳首部,連接的管理

Date |創建報文的日期時間

Pragma |報文指令

Transfer-Encoding|報文末端一覽

Upgrade|升級為其他協議

Via|代理服務器的相關信息

Warning|錯誤通知

請求首部字段

首部字段名 | 說明

-------- | --------

Accept|用戶代理可處理的媒體類型

Accept-Charset|優先的字符集

Accept-Encoding|優先的內容編碼

Accept-Language|優先的語言

Authorization|Web認證信息

Expect|期待服務器的特定行為

From|用戶的電子郵箱地址

Host|請求資源所在的服務器

if-Match|比較實體標記

if-Modified-Since|比較資源的更新時間

if-none-Match|比較實體標記

if-Range|資源未更新時間發送實體Byte的范圍請求

if-Unmodified-Since|比較資源的更新時間

Range|實體的范圍請求

Referer|對請求中URI的原始獲取方

User-Agent|HTTP客戶端程序的信息

響應首部字段

首部字段名 | 說明

---------|-----------

Accept-Ranges|是否接受字節范圍的請求

Age|推算資源創建經過時間

ETag|資源的匹配信息

Location|令客戶端重定向至指定URI

實體首部字段

首部字段名 | 說明

---------|-----------

Allow|資源可支持的HTTP方法

Content-Encoding|實體主體適用的編碼方式

Content-Language|實體主體的自然語言

Content-Length|實體主體的大小

Content-Location|替代資源的URI

Content-Range|實體主體范圍

Content-Type|實體主體的媒體類型

Expires|實體主體過期的日期時間

Last-Modified|資源的最后修改時間

Cache-Control指令簡要講

緩存請求指令

指令 |說明

------|------

no-cache|強制向源服務器再次驗證

no-store|不緩存請求或響應的任何內容

max-age=「秒」|響應的最大age值

緩存響應指令

指令|說明

-------|------

public|可向任意的提供響應的緩存

private|僅向特定的用戶返回響應

no-cache|緩存前必須先確定其有效性

no-store|不緩存請求和響應的任何內容

使用no-cache指令的目的是為了防止從緩存中返回過期的資源

Connection字段

1、控制不在轉發給代理的首部字段

2、管理持久連接


控制不在轉發給代理的首部字段(代理服務器)

GET /HTTP/1.1

Upgrage:HTTP/1.1

Connection:Upgrade

Connection:close

不持續連接

Pragma指令

是HTTP/1.1之前版本的歷史遺留字段:等同于Cache-Control

Transfer-Encoding指令

HTTP/1.1的傳輸編碼方式僅對分塊傳輸編碼有效。


Transfer-Encoding:chunked

Via指令

使用首部字段Via是為了追蹤客戶端與服務器端之間的請求和響應報文的傳輸路徑

請求首部字段

Host指令

首部字段Host會告訴服務器,請求的資源所處的互聯網主機名和端口號(必須)

if-Match指令

形如if-xxx這種樣式的請求首部字段,都可稱為條件強求

if-Match:”hansheng“

只有當if-match的字段值更ETag值匹配一致時,服務器才會接受請求

if-Modified-Since:Thu 10 Apr 2016 00:00:00 GET

只要是2016年4月10號之后更新過的資源,所以可以接受

Range指令

只需獲取部分資源的范圍請求,包含首部字段Range即可告知服務器資源的制定范圍

Referer指令

首部字段Referer會告知服務器請求的原始資源的URI

User-Agent指令

首部字段User-Agent將創建請求的瀏覽器和用戶代理告訴服務器

響應首部字段

Accept-Ranges指令

首部字段Accept-Range是用來告知客戶端服務器是否能處理范圍請求,以指定獲取服務器某個部分的資源

ETag

首部字段ETag能告知客戶端實體表識,資源更新時,有統一的算法規則。

Location

使用首部字段Location可以將響應接收方引導至某個與請求URI位置不同的資源。

確保Web安全的 HTTPS

HTTP的缺點

  • 通信使用明文(不加密),內容可能會被竊聽;

  • 不驗證通信方的身份,因此可能遭遇偽裝;

  • 無法證明報文的完整性,所以可能已遭篡改。

HTTP + 加密 + 認證 + 完整性保護 = HTTPS

HTTPS并非是應用層的一種新協議。只是普通HTTP通信接口部分用SSL和TLS協議替代而已。

SSL是獨立于HTTP的協議,所以不光是HTTP協議,其他運行在應用層的SMTP和Telnet等協議均可配合SSL協議使用。所以說SSL是當今世界上應用最為廣泛的網絡安全技術。

  • 由于HTTPS需要做服務器、客戶端雙方加密及解密處理,因此會消耗CPU和內存等硬件資源;

  • 和HTTP相比,SSL通信部分消耗網絡資源。而SSL通信部分,又因為要對通信進行處理,所以時間上有延遲了;

  • 和HTTP相比,網絡負載和速度上會變慢2~100倍。

  • http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

HTTP狀態碼

1、100~199 : 成功接受請求,客戶端需提交下一次請求才能完成整個處理過程

2、200: OK,客戶端請求成功

3、300~399:請求資源已移到新的地址(302,307,304)

4、401:請求未授權,改狀態代碼需與WWW-Authenticate報頭域一起使用

5、403:Forbidden,服務器收到請求,但是拒絕提供服務

6、404:Not Found,請求資源不存在,這個就不用說啦

7、500:Internal Server Error,服務器發生不可預期的錯誤

8、503:Server Unavailable,服務器當前不能處理客戶端請求,一段時間后可能恢復正常

HTTP的功能追加協議

HTTP的瓶頸

  • 一條連接上只能發送一個請求;

  • 請求只能從客戶端開始,客戶端不可以接收除響應以外的指令;

  • 請求/響應首部未經壓縮就發送,首部信息越多延遲越大;

  • 發送冗長的首部,每次互相發送相同的首部造成的浪費較多;

  • 可任意選擇數據壓縮格式,非強制壓縮發送。

SPDY

SPDY沒有完全改寫HTTP協議,而是在TCP/IP的應用層與傳輸層之間通過新加會話層的形式運作。同時,考慮到安全問題,SDPY規定通信中使用SSL。

  • 多路復用流;

  • 賦予請求優先級;

  • 壓縮HTTP首部;

  • 推送功能;

  • 服務器提示功能。

下章講解:TCP/IP協議精講,敬請期待。。。。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容