深入理解HTTP

圖片來自 unsplash

0x01 HTTP是什么

HTTP全稱是HyperText Transfer Protocal,即:超文本傳輸協議痒芝。它主要規(guī)定了客戶端和服務器之間的通信格式赃春。HTTP還是一個基于請求/響應模式的、無狀態(tài)的協議匪凡;即我們通常所說的Request/Response膊畴。

0x02 HTTP與TCP的關系

TCP協議是位于TCP/IP參考模型中的網絡互連層,而HTTP協議屬于應用層病游。因此唇跨,HTTP協議是基于TCP協議稠通。

0x03 HTTP請求(HTTP Request)

HTTP請求由三部分組成,分別是:

  • 請求行
  • HTTP頭
  • 請求體

下面是請求示例:

GET /?tn=90058352_hao_pg HTTP/1.1
Host: www.hao123.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.16400.16 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
請求行

同樣也是由請求方法(POST/GET)方式买猖、請求的主機改橘、協議版本號三部分組成。下面為請求行的示例:
GET /?tn=90058352_hao_pg HTTP/1.1

HTTP頭

HTTP頭又細分為請求頭(request header)玉控、普通頭(general header)飞主、實體頭(entity header)
而HTTP頭主要關注點是其字段

1. Accept

作用: 瀏覽器可以接受的媒體類型
例如: Accept: text/html 代表瀏覽器可以接受服務器回發(fā)的類型為 text/html 也就是我們常說的html文檔
通配符 * 代表任意類型
例如: Accept: */* 代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務器都是發(fā)這個)

2. Accept-Language

作用: 瀏覽器申明自己接收的語言。
語言跟字符集的區(qū)別:中文是語言高诺,中文有多種字符集碌识,比如big5,gb2312虱而,gbk等等筏餐;
例如: Accept-Language: zh-CN,zh

3. Accept-Encoding

作用: 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法(gzip薛窥,deflate)
例如:Accept-Encoding: gzip, Accept-Encoding: deflate

4. User-Agent

作用: 告訴HTTP服務器胖烛, 客戶端使用的操作系統(tǒng)的名稱和版本以及瀏覽器的名稱和版本.
例如: User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.16400.16 Safari/537.36

5. Content-Type

作用: 告訴服務器,請求的內容的類型
常見的字段: 假設使用POST方式請求

  • text/xml [請求體為文本]
  • application/json [請求體為JSON數據]
  • application/xml [請求體為xml數據]
  • image/jpeg [請求體為jpeg圖片]
  • multipart/form-data [請求體為表單]
6. Cookie

作用: 最重要的header诅迷,將cookie的值發(fā)送給HTTP服務器

7. Connection

例如: Connection: keep-alive 當一個網頁打開完成后佩番,客戶端和服務器之間用于傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁罢杉,會繼續(xù)使用這一條已經建立的連接
例如: Connection: close 代表一個Request完成后趟畏,客戶端和服務器之間用于傳輸HTTP數據的TCP連接會關閉, 當客戶端再次發(fā)送Request滩租,需要重新建立TCP連接赋秀。

8. Content-Length

作用:發(fā)送給HTTP服務器數據的長度。
例如: Content-Length: 18

9. Referer:

作用: 提供了Request的上下文信息的服務器律想,告訴服務器我是從哪個鏈接過來的猎莲。

請求體

這個只有post方式請求才有,get方式請求沒有技即。

0x04 HTTP響應(HTTP Response)

HTTP Response的結構跟Request的結構基本一樣著洼。同樣分為三部分:

  • 響應行
  • 響應頭
  • 響應體

下面是響應示例:

HTTP/1.1 200 OK
Cache-Control: max-age=0
Content-Encoding: gzip
Content-Length: 156474
Content-Type: text/html;charset=UTF-8
Cxy_all: 90058352_hao_pg+d4fa7f28cefb9b120f868558e440bafa
Date: Sun, 20 Nov 2016 05:09:51 GMT
Expires: Sun, 20 Nov 2016 05:09:51 GMT
Lfy: nj02.11
Server: BWS/1.0
Set-Cookie: __bsi=11619936655404239050_00_60_N_R_126_0303_c02f_Y; max-age=3600; domain=www.hao123.com; path=/
響應行

響應行由協議版本、響應狀態(tài)構成
下面為響應行的示例:
HTTP/1.1 200 OK

響應頭

響應頭關注點是字段而叼,常見的字段如下:

1.Cache-Control

作用: 非常重要的規(guī)則身笤。 這個用來指定Response-Request遵循的緩存機制。
例如:
Cache-Control:Public 可以被任何緩存所緩存
Cache-Control:Private 內容只緩存到私有緩存中
Cache-Control:no-cache 所有內容都不會被緩存

2.Content-Type

作用:服務器告訴瀏覽器葵陵,自己響應的對象的類型和字符集
例如:
Content-Type: text/html; charset=utf-8
Content-Type: image/jpeg

3.Expires

作用: 瀏覽器會在指定過期時間內使用本地緩存
例如: Expires:Sun, 20 Nov 2016 05:09:51 GMT

4.Connection

跟HTTP頭中的Connection是同樣的原理

5.Content-Encoding

跟HTTP中頭的Content-Encoding是同樣的原理

6.Content-Length

作用:指明實體正文的長度液荸,以字節(jié)方式存儲的十進制數字來表示。
例如: Content-Length: 156474

7.Date

作用: 生成消息的具體時間和日期
例如: Date: Sun, 20 Nov 2016 05:09:51 GMT

響應體

響應體包含的內容是網頁的內容信息脱篙,主要是html代碼等


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末娇钱,一起剝皮案震驚了整個濱河市伤柄,隨后出現的幾起案子,更是在濱河造成了極大的恐慌文搂,老刑警劉巖响迂,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異细疚,居然都是意外死亡,警方通過查閱死者的電腦和手機川梅,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門疯兼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贫途,你說我怎么就攤上這事吧彪。” “怎么了丢早?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵姨裸,是天一觀的道長。 經常有香客問我怨酝,道長傀缩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任农猬,我火速辦了婚禮赡艰,結果婚禮上,老公的妹妹穿的比我還像新娘斤葱。我一直安慰自己慷垮,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布揍堕。 她就那樣靜靜地躺著料身,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衩茸。 梳的紋絲不亂的頭發(fā)上芹血,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音递瑰,去河邊找鬼祟牲。 笑死,一個胖子當著我的面吹牛抖部,可吹牛的內容都是我干的说贝。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼慎颗,長吁一口氣:“原來是場噩夢啊……” “哼乡恕!你這毒婦竟也來了言询?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤傲宜,失蹤者是張志新(化名)和其女友劉穎运杭,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體函卒,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡辆憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了报嵌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱咧。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖锚国,靈堂內的尸體忽然破棺而出腕巡,到底是詐尸還是另有隱情,我是刑警寧澤血筑,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布绘沉,位于F島的核電站,受9級特大地震影響豺总,放射性物質發(fā)生泄漏车伞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一喻喳、第九天 我趴在偏房一處隱蔽的房頂上張望帖世。 院中可真熱鬧,春花似錦沸枯、人聲如沸日矫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哪轿。三九已至,卻和暖如春翔怎,著一層夾襖步出監(jiān)牢的瞬間窃诉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工赤套, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留飘痛,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓容握,卻偏偏與公主長得像宣脉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剔氏,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塑猖,服務發(fā)現竹祷,斷路器,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 一羊苟、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,328評論 6 152
  • 用一張表大概描述: 一塑陵、HTTP/0.9HTTP 是基于 TCP/IP 協議的應用層協議。它不涉及數據包(pack...
    fangdown閱讀 377評論 0 1
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)蜡励,內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,203評論 3 82
  • 大眾創(chuàng)業(yè)凉倚,萬眾創(chuàng)新的政策推出以來彭则,在政府的大力號召和推動下,各類創(chuàng)業(yè)基地占遥、孵化園如雨后春筍般出現,越來越多的...
    老羅雜貨鋪閱讀 620評論 3 10