一個(gè)非常好的學(xué)習(xí)HTTP的網(wǎng)站:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP
第一部分
- HTTP:超文本傳輸協(xié)議
2.URL:統(tǒng)一資源定位符。
URI:統(tǒng)一資源標(biāo)識(shí)符。
URL < URI
3.1995年IE瀏覽器,2004年Mozilla發(fā)布Firefox
4.TCP/IP(從高往下)
應(yīng)用層:如FTP,DNS,HTTP
傳輸層:TCP,UDP
網(wǎng)絡(luò)層:處理流動(dòng)的數(shù)據(jù)包,IP協(xié)議
數(shù)據(jù)鏈路層:處理連接網(wǎng)絡(luò)的硬件,如操作系統(tǒng),網(wǎng)卡,光纖
每經(jīng)過(guò)一層,都會(huì)增加一個(gè)首部,如TCP首部
5.IP協(xié)議將數(shù)據(jù)傳到對(duì)方需要2個(gè)條件,IP地址(會(huì)變)和MAC地址
6.APP協(xié)議:中轉(zhuǎn)時(shí),下一站中轉(zhuǎn)設(shè)備的MAC地址是用來(lái)搜索的目標(biāo)。
7.路由選擇
TCP的三次握手策略,為的是準(zhǔn)確無(wú)誤的獎(jiǎng)數(shù)據(jù)送達(dá)
握手過(guò)程使用TCP的標(biāo)記(flag)----SYN和ACK
三次握手:其實(shí)指的是三次數(shù)據(jù)傳輸,發(fā)送端2次,接收端一次
1)發(fā)生端發(fā)生標(biāo)有SYN的數(shù)據(jù)包
2)接收端收到后,回復(fù)標(biāo)有SYN/ACK的數(shù)據(jù)包表示確認(rèn)
3)發(fā)送端發(fā)送帶有ACK的數(shù)據(jù)包
8.DBS域名解析:指的是域名到IP的解析。
9.各協(xié)議的職責(zé):
DNS:解析域名
Http:生成報(bào)文,解析報(bào)文
TCP:切割http報(bào)文,傳輸數(shù)據(jù),3次握手
IP:搜索地址,路由轉(zhuǎn)發(fā)
10.URI格式:協(xié)議方案,登錄信息,地址端口,路徑,查詢
第二部分
1.請(qǐng)求報(bào)文的組成:請(qǐng)求URI,協(xié)議版本,可選請(qǐng)求頭部字段,內(nèi)容實(shí)體
2.響應(yīng)報(bào)文組成:協(xié)議版本、狀態(tài)碼、解釋狀態(tài)碼短語(yǔ)、可選響應(yīng)首部字段、響應(yīng)實(shí)體
3.HTTP: 無(wú)狀態(tài)協(xié)議,不做持久化處理
4.HTTP/1.1引入了cookie技術(shù),實(shí)現(xiàn)保持狀態(tài)
5.HTTP的方法:
GET: 獲取資源
POST:傳輸實(shí)體主體
PUT:傳輸文件
DELETE:刪除資源
OPTIONS: 訪問(wèn)支持的方法
TRACE:追蹤路徑
CONNECT:要求使用隧道協(xié)議連接代理
6.以前是每次請(qǐng)求,TCP都會(huì)短開(kāi),但是現(xiàn)在的網(wǎng)頁(yè)圖片多,請(qǐng)求多,增加了通信量的開(kāi)銷(xiāo)。所以在HTTP/1.1中增加了keep-alive,任意一端沒(méi)明確斷開(kāi),就保持TCP連接狀態(tài)。
7.管線化:一個(gè)請(qǐng)求沒(méi)響應(yīng)就可以發(fā)生下一個(gè)請(qǐng)求,也就是同時(shí)并行發(fā)送多個(gè)請(qǐng)求。
8.Cookie技術(shù)
在沒(méi)有Cookie的時(shí)候發(fā)送請(qǐng)求,服務(wù)端會(huì)在響應(yīng)的的報(bào)文內(nèi)增加一個(gè):set-cookie頭部字段信息。
客戶端會(huì)根據(jù)這個(gè)字段信息將內(nèi)容保存到cookie。
再次請(qǐng)求的時(shí)候,就會(huì)帶著這個(gè)cookie。
所以說(shuō),其實(shí)一次會(huì)話,雖然session是保存在服務(wù)端,但是和cookie還是有關(guān)系的。所以要做路由轉(zhuǎn)發(fā)的類(lèi)似功能,需要從這里下手(個(gè)人理解)。
第三部分
1.HTTP報(bào)文內(nèi)的HTTP信息
請(qǐng)求報(bào)文: 報(bào)文首部(請(qǐng)求行:請(qǐng)求方法+URL,請(qǐng)求首部字段,通用首部字段、實(shí)體首部),報(bào)文主體
響應(yīng)報(bào)文:報(bào)文首部(狀態(tài)行:狀態(tài)碼+短語(yǔ),響應(yīng)首部,通用首部,實(shí)體首部),報(bào)文主體
首部字段主要為通用、請(qǐng)求、響應(yīng)、實(shí)體,其他也有,比如cookie。
2.傳輸?shù)膬?nèi)容會(huì)進(jìn)行壓縮,如gzip
3.Http協(xié)議也采納了多部分對(duì)象集合,發(fā)生的報(bào)文包含多類(lèi)型實(shí)體
多部分對(duì)象集合:multipart/form-data
4.獲取部分內(nèi)容的范圍請(qǐng)求:
Range:bytes=5001-10000:下載5001到10000字節(jié),這是個(gè)首部字段
5.內(nèi)容協(xié)商返回最合適內(nèi)容,比如返回的是英文還是中文(瀏覽器的語(yǔ)言)
字段:Accept,Accept-charset,Accept-Encoding,Accept-Language,Content-Language
第四部分
1.狀態(tài)碼類(lèi)別
1XX: 請(qǐng)求正在處理,信息性
2XX:成功。200:OK,204:沒(méi)有主體,206:響應(yīng)報(bào)文范圍內(nèi)容
3XX:重定向。301:永久,302:臨時(shí),303:請(qǐng)求另一個(gè)url,304,307:禁止post轉(zhuǎn)get
4XX:客戶端錯(cuò)誤,400:bad request。401:認(rèn)證問(wèn)題,403,不允許訪問(wèn),404:not found
5XX: 服務(wù)端錯(cuò)誤,500,error,503:服務(wù)器超載
第五部分
與Http協(xié)作的web服務(wù)器
1.因?yàn)镈NS會(huì)將域名映射為IP,所以當(dāng)請(qǐng)求到服務(wù)器時(shí)候,已經(jīng)是IP形式
2.通信數(shù)據(jù)轉(zhuǎn)發(fā)程序:代理(轉(zhuǎn)發(fā)功能),網(wǎng)關(guān)(轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器),隧道(相隔甚遠(yuǎn)的客戶端與服務(wù)器之間中轉(zhuǎn)通信的程序)
3.代理:
不改變請(qǐng)求URI,直接轉(zhuǎn)發(fā)
代理轉(zhuǎn)發(fā)請(qǐng)求時(shí),會(huì)追加寫(xiě)入via首部信息,分為2類(lèi):是否使用緩存,是否修改報(bào)文
緩存帶來(lái)會(huì)預(yù)先將資源緩存在代理服務(wù)器
透明代理不對(duì)報(bào)文做任何修改
4.網(wǎng)關(guān):與代理十分相似,但網(wǎng)關(guān)可以提供非HTTP協(xié)議服務(wù),如網(wǎng)關(guān)可以連接數(shù)據(jù)庫(kù)
5.隧道,一條通信線路
第六部分
1.HTTP報(bào)文首部
HTTP請(qǐng)求報(bào)文首部報(bào)文是由方法、URI、HTTP版本、首部字段組成
HTTP響應(yīng)報(bào)文首部是由HTTP版本,狀態(tài)碼(數(shù)字或短語(yǔ))、首部字段組成。
2.HTTP首部字段傳遞重要信息,結(jié)構(gòu)為: 字段名:字段值。如content-Type:text/html
3.首部字段分為通用、請(qǐng)求、響應(yīng)、實(shí)體4類(lèi)。
通用首部字段:
Cache-control: 控制緩存行為;
connection:逐跳首部,連接的管理
Date:創(chuàng)建報(bào)文的日期
pragma: 報(bào)文指令
Trailer:報(bào)文末端首部一覽
Transfer-Encoding:指定報(bào)文主體的傳輸編碼方式
upgrade:升級(jí)其他協(xié)議
via:代理服務(wù)器相關(guān)信息
waring:錯(cuò)誤通知
請(qǐng)求首部字段:
Accept: 用戶代理可處理模型
Accept-charset:優(yōu)先字符集
Accept-Encoding:有限的內(nèi)容編碼
Accept-Language:優(yōu)先的語(yǔ)言
Authorization: web認(rèn)證信息
Except:期待服務(wù)器的行為
From:用戶的電子郵件
Host:請(qǐng)求服務(wù)器地址
If-Match:比較實(shí)體標(biāo)記,相反的是If-None-Match
If-Modified-Since,If-Unmodified-Since:比較資源更新時(shí)間
If-Range:資源來(lái)更新時(shí)byte的范圍
Max-Forwards:最大的傳輸逐跳數(shù)
Proxy-Authorization:代理服務(wù)器要求的認(rèn)證信息
Range:實(shí)體字節(jié)范圍請(qǐng)求
Refer:對(duì)請(qǐng)求中的URI原始獲取方
User-Agent: http客戶端信息
響應(yīng)首部字段:
Accept-Ranges:是否接受字節(jié)范圍請(qǐng)求
Age:推算資源創(chuàng)建時(shí)間
EAge:資源匹配時(shí)間
Location:另客戶端重定向指定的URI
Proxy-Authenticate:代理服務(wù)器對(duì)客戶端認(rèn)證信息
Server: Http服務(wù)器
vary:代理服務(wù)器緩存的管理信息
www-Authenticate:服務(wù)器對(duì)客戶端認(rèn)證信息
實(shí)體首部:
Allow: 資源支持的Http方法
Content-Encoding: 實(shí)體主題適用編碼
Content-Length:實(shí)體主體大小
Content-Location:替代對(duì)應(yīng)資源的uri
Content-MD5:實(shí)體報(bào)文摘要
Content-Range: 實(shí)體報(bào)文位置范圍
Content-Type: 媒體類(lèi)型
Expires:過(guò)期時(shí)間
Last-Modified:最后修改時(shí)間
4.非HTTP/1.1首部字段
如Cookie,set-Cookie, Content-isposition等
4.End-to-End首部:端到端首部,必須保存在魂村生成的響應(yīng),且必須轉(zhuǎn)發(fā)
5.Hop-by-Hop首部:逐跳首部,支隊(duì)單詞轉(zhuǎn)發(fā)有效,會(huì)因?yàn)橥ㄟ^(guò)緩存或者代理不再轉(zhuǎn)發(fā)
Connection,keep-Alive, Proxy-Authenticate, Proxy-Authorization, Trailer, TE, Transfer-Encoding, upgrade都是逐跳首部
6.常用的一些首部和取值
6.1 Cache-Control: 操作緩存的機(jī)制,如:private, max-age=0, no-cache
取值:public: 其他用戶也可采用緩存,no-cache:防止返回過(guò)期資源,no-store:含機(jī)密信息,max-age:緩存時(shí)間,min-fresh, max-state
6.2 connection: 控制不再轉(zhuǎn)發(fā)給代理的首部,管理持久連接
如: connection: upgrade, 刪除upgrade在轉(zhuǎn)發(fā)
close:關(guān)閉長(zhǎng)連接,keep-alive:長(zhǎng)連接
6.3 Date: 報(bào)文創(chuàng)建時(shí)間
6.4 pragma: 歷史遺留字段
6.5 Trailer: 事先說(shuō)明在報(bào)文主體后記錄了哪些主體
6.6 Transfer-Encoding: 報(bào)文主體采用的編碼格式,如chuked: 分塊傳輸
6.7 upgrade: 用于檢測(cè)是否可用版本通信,使用時(shí),額外指定connection: upgrade
6.8 via: 處理網(wǎng)關(guān)時(shí)加上內(nèi)容
6.9 warning: http/1.0 Retry-After演變的,一些警告
請(qǐng)求首部:
Accept: 可處理的媒體類(lèi)型,多個(gè)用逗號(hào)隔開(kāi)
文本文件: text/html, text/plain, text/css, application/xml 等等
圖片: image/jpeg/gif/png等
視頻文件:video/mpeg
應(yīng)用程序使用的二進(jìn)制文件: application/octet-stream/zip ...
Accept-Charset: 通知服務(wù)器用戶字符集,多個(gè)逗號(hào)隔開(kāi),如iso-8859-5
Accept-Encoding: 用戶代理支持內(nèi)容編碼,多個(gè)逗號(hào)隔開(kāi),如gzip,deflate
Accept-Language: zh-en, en-us,處理的語(yǔ)言
Authorization: 代理認(rèn)證信息值
Except: 期望某種特定行為
Max-Forwards: 最多轉(zhuǎn)發(fā)次數(shù)
Refer:告知請(qǐng)求的原始URI
- Cookie服務(wù)的首部字段
Set-Cookie: 響應(yīng)、開(kāi)始狀態(tài)所使用的的cookie信息
cookie: 輕汽油服務(wù)器接收到的cookie信息
set-Cookie的字段屬性:
Name=value: 賦予cookie的值
expires=Date: cookie的有效期
path=Path: 目錄
domain:域名
secure: 僅在https才發(fā)生cookie
HttpOnly: 使cookie不能被js訪問(wèn)
其他首部:
首部字段可以自己擴(kuò)展,比如下載時(shí)候的文件名
X-Frame-Options: 控制web的frame信息
X-XSS-Protection:針對(duì)XSS跨站腳本攻擊策略
DNT: 拒絕個(gè)人信息被收集
P3P: 保護(hù)隱私的
第七部分 HTTPS
竊聽(tīng)、抓包或嗅探器,如wireshark,拆包攻擊
SSL與TLS組合使用
https是身披SSL外殼的HTTP
HTTPS采用共享秘鑰和公開(kāi)秘鑰兩者并用的混合加密機(jī)制
使用SSL會(huì)帶來(lái)通信慢和大量CPU與內(nèi)存消耗
第八部分
確認(rèn)訪問(wèn)用戶身份認(rèn)證
常用的核對(duì)信息:密碼,動(dòng)態(tài)令牌,數(shù)字證書(shū),生物證人,IC卡號(hào)
HTTP認(rèn)證,BASIC認(rèn)證, SSL客戶端, FORM BASE認(rèn)證, DIGEST認(rèn)證
使用cookie來(lái)管理session
第九部分
基于HTTPS功能追加協(xié)議
google發(fā)布:消除http瓶頸的SPDY
AJAX的解決方案是拉取
Comet解決方案,通過(guò)延遲應(yīng)答實(shí)現(xiàn)推送功能
然后到SPDY再有了websocket
第十部分
web攻擊方法
主動(dòng)攻擊:直接對(duì)服務(wù)器資源攻擊,如SQL注入,OS命令攻擊
被動(dòng)攻擊:誘導(dǎo)進(jìn)入陷阱
跨站腳本攻擊(XSS)
郵件首部注入攻擊
目錄遍歷攻擊
遠(yuǎn)程文件包含漏洞
會(huì)話劫持,會(huì)話固定攻擊