HTTP協(xié)議是TCP/IP協(xié)議的一部分
- HTTP數(shù)據(jù)(應(yīng)用層,客戶端請求)
- TCP首部(傳輸層筏餐,對HTTP數(shù)據(jù)進(jìn)行分割處理,使得大數(shù)據(jù)更容易傳送)
- IP首部(網(wǎng)絡(luò)層,地址相關(guān)信息)
- 以太網(wǎng)首部(鏈路層)
- IP協(xié)議:IP地址(可以改變)龙优、MAC地址(基本不變)
- DNS協(xié)議:通過域名查找IP地址
- URI:用字符串標(biāo)識(shí)某一互聯(lián)網(wǎng)資源;
- URL:標(biāo)識(shí)資源地址
- HTTP是無狀態(tài)的協(xié)議(即對發(fā)送過的請求或者相應(yīng)都不做持久化處理)(可以通過cookie技術(shù)解決狀態(tài)不保存問題)
- 在首部字段的Host中保存著請求的網(wǎng)絡(luò)域名或IP地址
- GET /index.html HTTP/1.1
- Host: www.bilibili.com
- HTTP method
method | 內(nèi)容 |
---|---|
GET | 獲取資源 |
POST | 傳輸數(shù)據(jù) |
PUT | 傳輸文件(不太使用) |
HEAD | 獲取報(bào)文首部 |
DELETE | 刪除文件(不太使用) |
OPTIONS | 詢問(服務(wù)器)支持的方法 |
TRACE | 查詢發(fā)出去的請求如何被加工處理/篡改(危險(xiǎn)事秀,不常使用) |
CONNET | 要求用隧道協(xié)議連接代理(主要使用SSL/TLS協(xié)議把內(nèi)容機(jī)密后經(jīng)網(wǎng)絡(luò)隧道傳輸) |
LINK | 建立和資源之間的聯(lián)系 |
UNLINE | 斷開連接關(guān)系 |
解決HTTP的非持久連接
- 管線化(pipelining):不用等待響應(yīng)亦可發(fā)送下一個(gè)請求
- Cookie:
- 服務(wù)器在響應(yīng)時(shí)通知客戶端保存Cookie
- 客戶端在再次請求時(shí)會(huì)自動(dòng)將Cookie內(nèi)容加入請求報(bào)文(request-message)
首部之間的換行符是\r\n彤断;首部與主體之間的換行符是\r\n\r\n(即之間有一個(gè)空行)
Request | Response |
---|---|
報(bào)文首部(請求行等) | 報(bào)文首部(狀態(tài)行等) |
空行(CR+LF) | 空行(CR+LF) |
報(bào)文主體 | 報(bào)文主體 |
- 報(bào)文(message)
- 實(shí)體(entity)
- 范圍請求(Range Request):在請求中指定需求的范圍
- 內(nèi)容協(xié)商(Content Negotiation):響應(yīng)時(shí)提供給客戶端最為合適的資源
狀態(tài)碼
狀態(tài)碼 | 類別 | 原因 |
---|---|---|
1XX | Information(信息性狀態(tài)碼) | 接收到的請求正在處理 |
2XX | Success(成功狀態(tài)碼) | 請求正常處理完畢 |
3XX | Redirection(重定向狀態(tài)碼) | 需要進(jìn)行附加操作以完成請求 |
4XX | Client Error (客戶端錯(cuò)誤狀態(tài)碼) | 服務(wù)器無法處理請求 |
5XX | Server Error (服務(wù)器錯(cuò)誤狀態(tài)碼) | 服務(wù)器處理請求出錯(cuò) |
具體狀態(tài)碼
狀態(tài)碼 | 名稱 | 解釋 |
---|---|---|
200 | OK | |
204 | No Content | |
206 | Partial Content | |
301 | Moved Permanently | 請求的資源已被分配新的URI(需要更新標(biāo)簽) |
302 | Found | 臨時(shí)性分配到新的URI |
303 | See Other | 應(yīng)當(dāng)采用GET方法獲取資源 |
304 | Not Modified | 為滿足請求條件,返回中不包含任何相應(yīng)的主體部分 |
307 | Temporary Redirect | |
400 | Bad Request | |
401 | Unauthorized | |
403 | Forbidden | |
404 | Not Found | |
500 | Internal Server Error | 服務(wù)器出現(xiàn)問題 |
503 | Service Unavailable | 服務(wù)器忙 |
- 代理:具有轉(zhuǎn)發(fā)功能的應(yīng)用程序
- 源服務(wù)器 vs 代理服務(wù)器
- 緩存代理:緩存源服務(wù)器響應(yīng)資源
- 透明代理:不對報(bào)文做任何加工
- 網(wǎng)關(guān):轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器
- 隧道:客戶端和服務(wù)器間進(jìn)行中轉(zhuǎn)(以保持雙方的連接)
HTTP首部字段
首部字段 | |
---|---|
通用首部字段 | 請求報(bào)文和響應(yīng)報(bào)文都會(huì)使用的首部 |
請求首部字段 | |
響應(yīng)首部字段 | |
實(shí)體首部字段 |
通用首部字段
首部字段 | 解釋 |
---|---|
Cache-Control | 操作緩存工作機(jī)制 |
Connection | 控制不再轉(zhuǎn)發(fā)給代理的首部字段 |
管理持久連接 | |
Date | 表明創(chuàng)建HTTP報(bào)文的日期和時(shí)間 |
Trailer | 說明在報(bào)文主體后記錄了哪些首部字段 |
Transfer-Encoding | 規(guī)定了傳輸報(bào)文主體時(shí)采用的編碼方式 |
Upgrade | 檢測是否可以使用更高版本的協(xié)議進(jìn)行通信 |
Via | 追蹤傳輸路徑(常和TRACE方法一起使用) |
Warning |
請求首部字段
首部字段 | 解釋 |
---|---|
Accept | 通知服務(wù)器用戶代理(如瀏覽器)能夠處理的媒體類型及相對優(yōu)先級(jí) |
Accept-Charset | 通知服務(wù)器用戶代理支持的字符集類型及相對優(yōu)先級(jí) |
Accept-Encoding | 通知服務(wù)器用戶代理支持的內(nèi)容編碼及相對優(yōu)先級(jí) |
Accept-Language | 通知服務(wù)器用戶代理能夠處理的自然語言集及相對優(yōu)先級(jí) |
Authorization | 告知服務(wù)器用戶代理的認(rèn)證信息(證書值) |
Expect | 告知服務(wù)器期望出現(xiàn)的某種特定行為 |
From | 告知服務(wù)器用戶代理的用戶電子郵箱 |
Host | 區(qū)分運(yùn)行在同一服務(wù)器(相同IP)下的不同虛擬主機(jī) |
If-xxx | 服務(wù)器只執(zhí)行判定條件為真的請求 |
Max-Forwards | 指定可經(jīng)過的服務(wù)器的最大數(shù)目 |
Range | 告知服務(wù)器請求資源的指定范圍 |
Referer | 告知服務(wù)器請求的原始資源的URI(處于安全考慮易迹,一般不用) |
User-Agent | 將創(chuàng)建請求的瀏覽器和用戶代理名稱等信息傳達(dá)給服務(wù)器 |
響應(yīng)首部字段
首部字段 | 解釋 |
---|---|
Accept-Ranges | 告知客戶端是否能處理范圍請求 |
Age | 告知客戶端源服務(wù)器多久前創(chuàng)建了響應(yīng) |
ETag | |
Location | 配合3XX(Redirection)的響應(yīng)宰衙,提供重定向的URI |
Retry-After | 告知客戶端應(yīng)該多久后再次發(fā)送請求 |
Server | |
Vary | 對緩存進(jìn)行控制 |
實(shí)體首部字段
首部字段 | 解釋 |
---|---|
Allow | 同時(shí)客戶端能夠支持Request-URI指定資源的所有HTTP method |
Content-Encoding | 告知客戶端服務(wù)器對實(shí)體的主體部分選用的內(nèi)容編碼方式 |
Content-Language | 告知客戶端實(shí)體的主題使用的自然語言 |
Content-Length | 實(shí)體主體的大小(單位是字節(jié)) |
Content-Loacation | 報(bào)文主體返回資源的對應(yīng)URI(同首部字段Location不一樣) |
Content-Range | |
Content-Type | 實(shí)體主體內(nèi)對象的媒體類型 |
Expires | 告知客戶端資源的實(shí)效日期 |
Last-Modified | 資源最后一次修改時(shí)間 |
Cookie服務(wù)的首部字段
首部字段名 | 說明 | 首部類型 |
---|---|---|
Set-Cookie | 開始狀態(tài)管理所使用的Cookie信息 | 響應(yīng)首部字段 |
Cookie | 服務(wù)器接收到的Cookie信息 | 請求首部字段 |
HTTP協(xié)議的不足
- 通信使用明文睹欲,內(nèi)容可能會(huì)被竊聽
- 可以使用SSL(Secure Socket Layer)或者TLS(Transport Layer Security)的組合加密HTTP的通信內(nèi)容
- HTTP和SSL的組合被稱為HTTPS(HTTP Secure)或者HTTP over SSL
- 不驗(yàn)證通信方的身份供炼,因此可能遭遇偽裝
- 服務(wù)器偽裝、客戶端偽裝窘疮、DoS(Denial of Service)
- SSL可以確定通信的雙方
- 無法證明報(bào)文的完整性袋哼,所以可能遭受篡改
- 沒有辦法確認(rèn)發(fā)出的請求/響應(yīng)和接收到的請求/響應(yīng)時(shí)前后相同的:MITM(Man-in-the-Middle attack)
HTTPS=HTTP+加密+認(rèn)證+完整性保護(hù)
SSL是當(dāng)今世界上應(yīng)用最為廣發(fā)的網(wǎng)絡(luò)安全技術(shù)
以上內(nèi)容皆出自《圖解HTTP》