1 http -->應(yīng)用層協(xié)議
tcp --->傳輸層協(xié)議 --ip --網(wǎng)絡(luò)層協(xié)議
http基于tcp協(xié)議;
2 udp 和tcp 面向鏈接和無連接 tcp 安全 udp不保證數(shù)據(jù)的安全 連續(xù)性
3 tcp 的三次握手 和四次握手
客戶端–發(fā)送帶有SYN標(biāo)志的數(shù)據(jù)包–一次握手–服務(wù)端
服務(wù)端–發(fā)送帶有SYN/ACK標(biāo)志的數(shù)據(jù)包–二次握手–客戶端
客戶端–發(fā)送帶有帶有ACK標(biāo)志的數(shù)據(jù)包–三次握手–服務(wù)端
客戶端-發(fā)送一個(gè)FIN愧捕,用來關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送
服務(wù)器-收到這個(gè)FIN霹肝,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到的序號(hào)加1 颂碧。和SYN一樣荠列,一個(gè)FIN將占用一個(gè)序號(hào)
服務(wù)器-關(guān)閉與客戶端的連接,發(fā)送一個(gè)FIN給客戶端
客戶端-發(fā)回ACK報(bào)文確認(rèn)载城,并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1
狀態(tài)碼 :
200 Ok;
204 沒有內(nèi)容--請(qǐng)求成功肌似,但響應(yīng)報(bào)文不含實(shí)體的主體部分(聯(lián)想404 資源沒找到)
206 部分內(nèi)容---range配合使用
301 永久重定向
302 臨時(shí)重定向
303 有其他url 需要get獲取
304 內(nèi)容未發(fā)生變化
307 臨時(shí)重定向
404 資源未找到
403 資源請(qǐng)求被拒絕
401 沒有認(rèn)證信息
400 請(qǐng)求報(bào)文錯(cuò)誤
500 服務(wù)器異常
503 服務(wù)器停機(jī)維護(hù)
格式:
http 請(qǐng)求頭 http 版本 get/post方法 狀態(tài)碼
換行
key-value
空一行
內(nèi)容體
讀寫socket時(shí) 為何會(huì)阻塞? 非阻塞I/O
_images/4450781-482dbfe0063c256b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我們獲取的socket 實(shí)際是一個(gè)引用對(duì)象诉瓦,實(shí)際的對(duì)象實(shí)際是在系統(tǒng)內(nèi)核中的川队,socket有兩個(gè) buffer 分別是 讀buffer和寫buffer
內(nèi)核中有單獨(dú)的線程不斷的將寫buffer中的內(nèi)容 拷貝到網(wǎng)卡中,傳輸出去
也有單獨(dú)的線程將收到的消息拷貝到讀buffer 中等待用戶來讀
寫buffer是有限的睬澡,因此寫的快了 就會(huì)阻塞
讀buffer可能為空固额,因此讀一個(gè)字節(jié)也可能阻塞等待。
三次握手
四次揮手
HTTPS 就是 http + ssl
tls 是ssl的升級(jí)版 --即可
一般來說煞聪,HTTPS 主要用途有三個(gè):一是通過證書等信息確認(rèn)網(wǎng)站的真實(shí)性斗躏;二是建立加密的信息通道;三是數(shù)據(jù)內(nèi)容的完整性昔脯。
認(rèn)證網(wǎng)站的時(shí)候使用非對(duì)稱加密啄糙,之后傳輸數(shù)據(jù)使用對(duì)稱加密
http 頭信息
HTTP 頭部解釋
Accept:告訴WEB服務(wù)器自己接受什么介質(zhì)類型,/ 表示任何類型栅干,type/* 表示該類型下的所有子類型迈套,type/sub-type。
Accept-Charset: 瀏覽器申明自己接收的字符集
Accept-Encoding: 瀏覽器申明自己接收的編碼方法碱鳞,通常指定壓縮方法桑李,是否支持壓縮,支持什么壓縮方法 (gzip窿给,deflate)
Accept-Language::瀏覽器申明自己接收的語言語言跟字符集的區(qū)別:中文是語言贵白,中文有多種字符集,比如big5崩泡,gb2312禁荒,gbk等等。Accept-Ranges:WEB服務(wù)器表明自己是否接受獲取其某個(gè)實(shí)體的一部分(比如文件的一部分)的請(qǐng)求角撞。bytes:表示接受呛伴,none:表示不接受勃痴。
Age:當(dāng)代理服務(wù)器用自己緩存的實(shí)體去響應(yīng)請(qǐng)求時(shí),用該頭部表明該實(shí)體從產(chǎn)生到現(xiàn)在經(jīng)過多長(zhǎng)時(shí)間了热康。
Authorization:當(dāng)客戶端接收到來自WEB服務(wù)器的 WWW-Authenticate 響應(yīng)時(shí)沛申,該頭部來回應(yīng)自己的身份驗(yàn)證信息給WEB服務(wù)器。
Cache-Control:請(qǐng)求:no-cache(不要緩存的實(shí)體姐军,要求現(xiàn)在從WEB服務(wù)器去忍摹)
max-age:(只接受 Age 值小于 max-age 值,并且沒有過期的對(duì)象)
max-stale:(可以接受過去的對(duì)象奕锌,但是過期時(shí)間必須小于
max-stale 值)
min-fresh:(接受其新鮮生命期大于其當(dāng)前 Age 跟 min-fresh 值之和的
緩存對(duì)象)
響應(yīng):public(可以用 Cached 內(nèi)容回應(yīng)任何用戶)
private(只能用緩存內(nèi)容回應(yīng)先前請(qǐng)求該內(nèi)容的那個(gè)用戶)
no-cache(可以緩存著觉,但是只有在跟WEB服務(wù)器驗(yàn)證了其有效后,才能返回給客戶端)
max-age:(本響應(yīng)包含的對(duì)象的過期時(shí)間)
ALL: no-store(不允許緩存)Connection:請(qǐng)求:close(告訴WEB服務(wù)器或者代理服務(wù)器惊暴,在完成本次請(qǐng)求的響應(yīng)
后饼丘,斷開連接,不要等待本次連接的后續(xù)請(qǐng)求了)辽话。
keepalive(告訴WEB服務(wù)器或者代理服務(wù)器葬毫,在完成本次請(qǐng)求的
響應(yīng)后,保持連接屡穗,等待本次連接的后續(xù)請(qǐng)求)。
響應(yīng):close(連接已經(jīng)關(guān)閉)忽肛。
keepalive(連接保持著村砂,在等待本次連接的后續(xù)請(qǐng)求)。
Keep-Alive:如果瀏覽器請(qǐng)求保持連接屹逛,則該頭部表明希望 WEB 服務(wù)器保持
連接多長(zhǎng)時(shí)間(秒)础废。
例如:Keep-Alive:300Content-Encoding:WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應(yīng)中的對(duì)象罕模。
例如:Content-Encoding:gzip
Content-Language:WEB 服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的語言评腺。
Content-Length: WEB 服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的長(zhǎng)度。
例如:Content-Length: 26012
Content-Range: WEB 服務(wù)器表明該響應(yīng)包含的部分對(duì)象為整個(gè)對(duì)象的哪個(gè)部分淑掌。
例如:Content-Range: bytes 21010-47021/47022
Content-Type: WEB 服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類型蒿讥。
例如:Content-Type:application/xmlETag:就是一個(gè)對(duì)象(比如URL)的標(biāo)志值,就一個(gè)對(duì)象而言抛腕,比如一個(gè) html 文件芋绸,
如果被修改了,其 Etag 也會(huì)別修改担敌, 所以摔敛,ETag 的作用跟 Last-Modified 的
作用差不多,主要供 WEB 服務(wù)器 判斷一個(gè)對(duì)象是否改變了全封。
比如前一次請(qǐng)求某個(gè) html 文件時(shí)马昙,獲得了其 ETag桃犬,當(dāng)這次又請(qǐng)求這個(gè)文件時(shí),
瀏覽器就會(huì)把先前獲得的 ETag 值發(fā)送給 WEB 服務(wù)器行楞,然后 WEB 服務(wù)器
會(huì)把這個(gè) ETag 跟該文件的當(dāng)前 ETag 進(jìn)行對(duì)比攒暇,然后就知道這個(gè)文件
有沒有改變了。Expired:WEB服務(wù)器表明該實(shí)體將在什么時(shí)候過期敢伸,對(duì)于過期了的對(duì)象扯饶,只有在
跟WEB服務(wù)器驗(yàn)證了其有效性后,才能用來響應(yīng)客戶請(qǐng)求池颈。
是 HTTP/1.0 的頭部尾序。
例如:Expires:Sat, 23 May 2009 10:02:12 GMTHost:客戶端指定自己想訪問的WEB服務(wù)器的域名/IP 地址和端口號(hào)。
例如:Host:rss.sina.com.cnIf-Match:如果對(duì)象的 ETag 沒有改變躯砰,其實(shí)也就意味著對(duì)象沒有改變每币,才執(zhí)行請(qǐng)求的動(dòng)作。
If-None-Match:如果對(duì)象的 ETag 改變了琢歇,其實(shí)也就意味著對(duì)象也改變了兰怠,才執(zhí)行請(qǐng)求的動(dòng)作。If-Modified-Since:如果請(qǐng)求的對(duì)象在該頭部指定的時(shí)間之后修改了李茫,才執(zhí)行請(qǐng)求
的動(dòng)作(比如返回對(duì)象)揭保,否則返回代碼304,告訴瀏覽器該對(duì)象
沒有修改魄宏。
例如:If-Modified-Since:Thu, 10 Apr 2008 09:14:42 GMT
If-Unmodified-Since:如果請(qǐng)求的對(duì)象在該頭部指定的時(shí)間之后沒修改過秸侣,才執(zhí)行
請(qǐng)求的動(dòng)作(比如返回對(duì)象)。If-Range:瀏覽器告訴 WEB 服務(wù)器宠互,如果我請(qǐng)求的對(duì)象沒有改變味榛,就把我缺少的部分
給我,如果對(duì)象改變了予跌,就把整個(gè)對(duì)象給我搏色。 瀏覽器通過發(fā)送請(qǐng)求對(duì)象的
ETag 或者 自己所知道的最后修改時(shí)間給 WEB 服務(wù)器,讓其判斷對(duì)象是否
改變了券册。
總是跟 Range 頭部一起使用频轿。Last-Modified:WEB 服務(wù)器認(rèn)為對(duì)象的最后修改時(shí)間,比如文件的最后修改時(shí)間烁焙,
動(dòng)態(tài)頁面的最后產(chǎn)生時(shí)間等等略吨。
例如:Last-Modified:Tue, 06 May 2008 02:42:43 GMTLocation:WEB 服務(wù)器告訴瀏覽器,試圖訪問的對(duì)象已經(jīng)被移到別的位置了考阱,
到該頭部指定的位置去取翠忠。
例如:Location:
http://i0.sinaimg.cn/dy/deco/2008/0528/sinahome_0803_ws_005_text_0.gifPramga:主要使用 Pramga: no-cache,相當(dāng)于 Cache-Control: no-cache乞榨。
例如:Pragma:no-cacheProxy-Authenticate: 代理服務(wù)器響應(yīng)瀏覽器秽之,要求其提供代理身份驗(yàn)證信息当娱。
Proxy-Authorization:瀏覽器響應(yīng)代理服務(wù)器的身份驗(yàn)證請(qǐng)求,提供自己的身份信息考榨。Range:瀏覽器(比如 Flashget 多線程下載時(shí))告訴 WEB 服務(wù)器自己想取對(duì)象的哪部分跨细。
例如:Range: bytes=1173546-Referer:瀏覽器向 WEB 服務(wù)器表明自己是從哪個(gè) 網(wǎng)頁/URL 獲得/點(diǎn)擊 當(dāng)前請(qǐng)求中的網(wǎng)址/URL。
例如:Referer:http://www.sina.com/Server: WEB 服務(wù)器表明自己是什么軟件及版本等信息河质。
例如:Server:Apache/2.0.61 (Unix)User-Agent: 瀏覽器表明自己的身份(是哪種瀏覽器)冀惭。
例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;
rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14Transfer-Encoding: WEB 服務(wù)器表明自己對(duì)本響應(yīng)消息體(不是消息體里面的對(duì)象)
作了怎樣的編碼,比如是否分塊(chunked)掀鹅。
例如:Transfer-Encoding: chunkedVary: WEB服務(wù)器用該頭部的內(nèi)容告訴 Cache 服務(wù)器散休,在什么條件下才能用本響應(yīng)
所返回的對(duì)象響應(yīng)后續(xù)的請(qǐng)求。
假如源WEB服務(wù)器在接到第一個(gè)請(qǐng)求消息時(shí)乐尊,其響應(yīng)消息的頭部為:
Content-Encoding: gzip; Vary: Content-Encoding 那么 Cache 服務(wù)器會(huì)分析后續(xù)
請(qǐng)求消息的頭部戚丸,檢查其 Accept-Encoding,是否跟先前響應(yīng)的 Vary 頭部值
一致扔嵌,即是否使用相同的內(nèi)容編碼方法限府,這樣就可以防止 Cache 服務(wù)器用自己
Cache 里面壓縮后的實(shí)體響應(yīng)給不具備解壓能力的瀏覽器。
例如:Vary:Accept-EncodingVia: 列出從客戶端到 OCS 或者相反方向的響應(yīng)經(jīng)過了哪些代理服務(wù)器痢缎,他們用
什么協(xié)議(和版本)發(fā)送的請(qǐng)求胁勺。
當(dāng)客戶端請(qǐng)求到達(dá)第一個(gè)代理服務(wù)器時(shí),該服務(wù)器會(huì)在自己發(fā)出的請(qǐng)求里面
添加 Via 頭部独旷,并填上自己的相關(guān)信息姻几,當(dāng)下一個(gè)代理服務(wù)器 收到第一個(gè)代理
服務(wù)器的請(qǐng)求時(shí),會(huì)在自己發(fā)出的請(qǐng)求里面復(fù)制前一個(gè)代理服務(wù)器的請(qǐng)求的Via
頭部势告,并把自己的相關(guān)信息加到后面, 以此類推抚恒,當(dāng) OCS 收到最后一個(gè)代理服
務(wù)器的請(qǐng)求時(shí)咱台,檢查 Via 頭部,就知道該請(qǐng)求所經(jīng)過的路由俭驮。
例如:Via:1.0 236-81.D07071953.sina.com.cn:80 (squid/2.6.STABLE13)