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代碼等