一個非常好的學(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)識符嚷缭。
URL < URI
3.1995年IE瀏覽器,2004年Mozilla發(fā)布Firefox
4.TCP/IP(從高往下)
應(yīng)用層:如FTP,DNS,HTTP
傳輸層:TCP,UDP
網(wǎng)絡(luò)層:處理流動的數(shù)據(jù)包漱抓,IP協(xié)議
數(shù)據(jù)鏈路層:處理連接網(wǎng)絡(luò)的硬件,如操作系統(tǒng)昭伸,網(wǎng)卡彼绷,光纖
每經(jīng)過一層,都會增加一個首部纷宇,如TCP首部
5.IP協(xié)議將數(shù)據(jù)傳到對方需要2個條件,IP地址(會變)和MAC地址
6.APP協(xié)議:中轉(zhuǎn)時蛾方,下一站中轉(zhuǎn)設(shè)備的MAC地址是用來搜索的目標(biāo)像捶。
7.路由選擇
TCP的三次握手策略抚吠,為的是準(zhǔn)確無誤的獎數(shù)據(jù)送達(dá)
握手過程使用TCP的標(biāo)記(flag)----SYN和ACK
三次握手:其實指的是三次數(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:生成報文硼莽,解析報文
TCP:切割http報文庶溶,傳輸數(shù)據(jù),3次握手
IP:搜索地址懂鸵,路由轉(zhuǎn)發(fā)
10.URI格式:協(xié)議方案偏螺,登錄信息,地址端口匆光,路徑套像,查詢
第二部分
1.請求報文的組成:請求URI,協(xié)議版本,可選請求頭部字段终息,內(nèi)容實體
2.響應(yīng)報文組成:協(xié)議版本夺巩、狀態(tài)碼、解釋狀態(tài)碼短語采幌、可選響應(yīng)首部字段劲够、響應(yīng)實體
3.HTTP: 無狀態(tài)協(xié)議震桶,不做持久化處理
4.HTTP/1.1引入了cookie技術(shù)休傍,實現(xiàn)保持狀態(tài)
5.HTTP的方法:
GET: 獲取資源
POST:傳輸實體主體
PUT:傳輸文件
DELETE:刪除資源
OPTIONS: 訪問支持的方法
TRACE:追蹤路徑
CONNECT:要求使用隧道協(xié)議連接代理
6.以前是每次請求,TCP都會短開蹲姐,但是現(xiàn)在的網(wǎng)頁圖片多磨取,請求多,增加了通信量的開銷柴墩。所以在HTTP/1.1中增加了keep-alive,任意一端沒明確斷開忙厌,就保持TCP連接狀態(tài)。
7.管線化:一個請求沒響應(yīng)就可以發(fā)生下一個請求江咳,也就是同時并行發(fā)送多個請求逢净。
8.Cookie技術(shù)
在沒有Cookie的時候發(fā)送請求,服務(wù)端會在響應(yīng)的的報文內(nèi)增加一個:set-cookie頭部字段信息歼指。
客戶端會根據(jù)這個字段信息將內(nèi)容保存到cookie爹土。
再次請求的時候,就會帶著這個cookie踩身。
所以說胀茵,其實一次會話,雖然session是保存在服務(wù)端挟阻,但是和cookie還是有關(guān)系的琼娘。所以要做路由轉(zhuǎn)發(fā)的類似功能峭弟,需要從這里下手(個人理解)。
第三部分
1.HTTP報文內(nèi)的HTTP信息
請求報文: 報文首部(請求行:請求方法+URL脱拼,請求首部字段瞒瘸,通用首部字段、實體首部)挪拟,報文主體
響應(yīng)報文:報文首部(狀態(tài)行:狀態(tài)碼+短語挨务,響應(yīng)首部,通用首部玉组,實體首部)谎柄,報文主體
首部字段主要為通用、請求惯雳、響應(yīng)朝巫、實體,其他也有石景,比如cookie劈猿。
2.傳輸?shù)膬?nèi)容會進(jìn)行壓縮,如gzip
3.Http協(xié)議也采納了多部分對象集合潮孽,發(fā)生的報文包含多類型實體
多部分對象集合:multipart/form-data
4.獲取部分內(nèi)容的范圍請求:
Range:bytes=5001-10000:下載5001到10000字節(jié)揪荣,這是個首部字段
5.內(nèi)容協(xié)商返回最合適內(nèi)容,比如返回的是英文還是中文(瀏覽器的語言)
字段:Accept往史,Accept-charset仗颈,Accept-Encoding,Accept-Language椎例,Content-Language
第四部分
1.狀態(tài)碼類別
1XX: 請求正在處理挨决,信息性
2XX:成功。200:OK订歪,204:沒有主體脖祈,206:響應(yīng)報文范圍內(nèi)容
3XX:重定向。301:永久刷晋,302:臨時盖高,303:請求另一個url,304眼虱,307:禁止post轉(zhuǎn)get
4XX:客戶端錯誤喻奥,400:bad request。401:認(rèn)證問題蒙幻,403映凳,不允許訪問,404:not found
5XX: 服務(wù)端錯誤邮破,500诈豌,error仆救,503:服務(wù)器超載
第五部分
與Http協(xié)作的web服務(wù)器
1.因為DNS會將域名映射為IP,所以當(dāng)請求到服務(wù)器時候矫渔,已經(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.代理:
不改變請求URI庙洼,直接轉(zhuǎn)發(fā)
代理轉(zhuǎn)發(fā)請求時顿痪,會追加寫入via首部信息,分為2類:是否使用緩存油够,是否修改報文
緩存帶來會預(yù)先將資源緩存在代理服務(wù)器
透明代理不對報文做任何修改
4.網(wǎng)關(guān):與代理十分相似蚁袭,但網(wǎng)關(guān)可以提供非HTTP協(xié)議服務(wù),如網(wǎng)關(guān)可以連接數(shù)據(jù)庫
5.隧道石咬,一條通信線路
第六部分
1.HTTP報文首部
HTTP請求報文首部報文是由方法揩悄、URI、HTTP版本鬼悠、首部字段組成
HTTP響應(yīng)報文首部是由HTTP版本删性,狀態(tài)碼(數(shù)字或短語)、首部字段組成焕窝。
2.HTTP首部字段傳遞重要信息蹬挺,結(jié)構(gòu)為: 字段名:字段值。如content-Type:text/html
3.首部字段分為通用它掂、請求巴帮、響應(yīng)、實體4類群发。
通用首部字段:
Cache-control: 控制緩存行為晰韵;
connection:逐跳首部发乔,連接的管理
Date:創(chuàng)建報文的日期
pragma: 報文指令
Trailer:報文末端首部一覽
Transfer-Encoding:指定報文主體的傳輸編碼方式
upgrade:升級其他協(xié)議
via:代理服務(wù)器相關(guān)信息
waring:錯誤通知
請求首部字段:
Accept: 用戶代理可處理模型
Accept-charset:優(yōu)先字符集
Accept-Encoding:有限的內(nèi)容編碼
Accept-Language:優(yōu)先的語言
Authorization: web認(rèn)證信息
Except:期待服務(wù)器的行為
From:用戶的電子郵件
Host:請求服務(wù)器地址
If-Match:比較實體標(biāo)記熟妓,相反的是If-None-Match
If-Modified-Since,If-Unmodified-Since:比較資源更新時間
If-Range:資源來更新時byte的范圍
Max-Forwards:最大的傳輸逐跳數(shù)
Proxy-Authorization:代理服務(wù)器要求的認(rèn)證信息
Range:實體字節(jié)范圍請求
Refer:對請求中的URI原始獲取方
User-Agent: http客戶端信息
響應(yīng)首部字段:
Accept-Ranges:是否接受字節(jié)范圍請求
Age:推算資源創(chuàng)建時間
EAge:資源匹配時間
Location:另客戶端重定向指定的URI
Proxy-Authenticate:代理服務(wù)器對客戶端認(rèn)證信息
Server: Http服務(wù)器
vary:代理服務(wù)器緩存的管理信息
www-Authenticate:服務(wù)器對客戶端認(rèn)證信息
實體首部:
Allow: 資源支持的Http方法
Content-Encoding: 實體主題適用編碼
Content-Length:實體主體大小
Content-Location:替代對應(yīng)資源的uri
Content-MD5:實體報文摘要
Content-Range: 實體報文位置范圍
Content-Type: 媒體類型
Expires:過期時間
Last-Modified:最后修改時間
4.非HTTP/1.1首部字段
如Cookie,set-Cookie, Content-isposition等
4.End-to-End首部:端到端首部栏尚,必須保存在魂村生成的響應(yīng)起愈,且必須轉(zhuǎn)發(fā)
5.Hop-by-Hop首部:逐跳首部,支隊單詞轉(zhuǎn)發(fā)有效译仗,會因為通過緩存或者代理不再轉(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:防止返回過期資源阐污,no-store:含機(jī)密信息,max-age:緩存時間咱圆,min-fresh, max-state
6.2 connection: 控制不再轉(zhuǎn)發(fā)給代理的首部笛辟,管理持久連接
如: connection: upgrade, 刪除upgrade在轉(zhuǎn)發(fā)
close:關(guān)閉長連接功氨,keep-alive:長連接
6.3 Date: 報文創(chuàng)建時間
6.4 pragma: 歷史遺留字段
6.5 Trailer: 事先說明在報文主體后記錄了哪些主體
6.6 Transfer-Encoding: 報文主體采用的編碼格式,如chuked: 分塊傳輸
6.7 upgrade: 用于檢測是否可用版本通信手幢,使用時捷凄,額外指定connection: upgrade
6.8 via: 處理網(wǎng)關(guān)時加上內(nèi)容
6.9 warning: http/1.0 Retry-After演變的,一些警告
請求首部:
Accept: 可處理的媒體類型围来,多個用逗號隔開
文本文件: 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ù)器用戶字符集跺涤,多個逗號隔開,如iso-8859-5
Accept-Encoding: 用戶代理支持內(nèi)容編碼监透,多個逗號隔開桶错,如gzip,deflate
Accept-Language: zh-en, en-us胀蛮,處理的語言
Authorization: 代理認(rèn)證信息值
Except: 期望某種特定行為
Max-Forwards: 最多轉(zhuǎn)發(fā)次數(shù)
Refer:告知請求的原始URI
- Cookie服務(wù)的首部字段
Set-Cookie: 響應(yīng)牛曹、開始狀態(tài)所使用的的cookie信息
cookie: 輕汽油服務(wù)器接收到的cookie信息
set-Cookie的字段屬性:
Name=value: 賦予cookie的值
expires=Date: cookie的有效期
path=Path: 目錄
domain:域名
secure: 僅在https才發(fā)生cookie
HttpOnly: 使cookie不能被js訪問
其他首部:
首部字段可以自己擴(kuò)展,比如下載時候的文件名
X-Frame-Options: 控制web的frame信息
X-XSS-Protection:針對XSS跨站腳本攻擊策略
DNT: 拒絕個人信息被收集
P3P: 保護(hù)隱私的
第七部分 HTTPS
竊聽醇滥、抓包或嗅探器黎比,如wireshark,拆包攻擊
SSL與TLS組合使用
https是身披SSL外殼的HTTP
HTTPS采用共享秘鑰和公開秘鑰兩者并用的混合加密機(jī)制
使用SSL會帶來通信慢和大量CPU與內(nèi)存消耗
第八部分
確認(rèn)訪問用戶身份認(rèn)證
常用的核對信息:密碼,動態(tài)令牌鸳玩,數(shù)字證書阅虫,生物證人,IC卡號
HTTP認(rèn)證不跟,BASIC認(rèn)證颓帝, SSL客戶端, FORM BASE認(rèn)證窝革, DIGEST認(rèn)證
使用cookie來管理session
第九部分
基于HTTPS功能追加協(xié)議
google發(fā)布:消除http瓶頸的SPDY
AJAX的解決方案是拉取
Comet解決方案购城,通過延遲應(yīng)答實現(xiàn)推送功能
然后到SPDY再有了websocket
第十部分
web攻擊方法
主動攻擊:直接對服務(wù)器資源攻擊,如SQL注入虐译,OS命令攻擊
被動攻擊:誘導(dǎo)進(jìn)入陷阱
跨站腳本攻擊(XSS)
郵件首部注入攻擊
目錄遍歷攻擊
遠(yuǎn)程文件包含漏洞
會話劫持瘪板,會話固定攻擊