Web與HTTP
對象:web頁中其實是對象鏈接
URL:通用資源定位符【任何對象都可以使用URL來唯一標識】
用戶名:口令【支持匿名訪問,用戶名和口令不計】
端口:HTTP:80 FTP:21【使用默認端口號,無特殊情況不需要手動輸入】
HTML【baseHTML,圖片鏈接URL…】–》瀏覽器解析–》服務器拉去URL資源–》訪問web頁面
HTTP目前已經是HTTP3
HTTP1.0 HTTP1.1 HTTP2 HTTP3
HTTP概況
HTTP超文本協議【不是線性的文本,是文本與文本之間任意地指向關系】
建立連接-》發送HTTP請求-》服務器收到請求后,把客戶端請求的對象封裝為HTTP響應的報文發送回來
不同廠商生產的瀏覽器能夠進行通信:彼此都遵守HTTP協議
HTTP跑在TCP之上,建立連接之后有一個TCP Socket
守候的Socket【等待連接建立請求的Socket】,連接的Socket
建立連接之后,使用HTTP請求–》服務器
HTTP:無狀態,服務器不需要維護客戶的狀態【無狀態服務器】
HTTP連接
web應用通信需要下層的實體依次交互才能完成
有些文件傳輸跑在HTTP上
HTTP/1.0非持久
TCP連接請求-》TCP連接確認–》http請求–》交換http報文–》TCP連接關閉
HTTP1.1 【持久連接】
TCP連接請求-》TCP連接確認–》http請求–》交換http報文–》連接不關閉,如果還有其他的對象請求,仍然在此連接中進行
調用Socket Api的函數去建立連接【需要一次往返】
RTT往返時間:請求,請求確認
【客戶端到服務器,再到服務器傳輸回來的時間】
因為分組很小,所以傳輸時間不計算,但傳播需要時間
非持久HTTP【1.0】:
1個RTT用來連接建立【一次返轉】
1次對象的傳輸時間
持久HTTP:
1)非流水方式:
在前一個對象回來之后再發送另外一個請求【一次請求和返轉回來的對象只有一個】
2)流水方式:
第一個對象請求發出去,還沒有回來的時候;就接著發出第二個,第三個。。。
減少客戶端請求時間
HTTP請求報文
早期:ASCII碼可讀
現在:二進制
請求報文通常沒有實體行【空】
GET:客戶端從服務器請求資源
POST:客戶端向服務器上載(上傳)資源
Head命令:請求頭,用來建立索引或用來維護
Host:主機名/主機域名
User-agent:用戶代理的程序【瀏覽器版本】
Connection:連接
+:與符號
HTTP響應報文
Last-Modefied:上一次修改日期,相當于版本號
采用TCP,需要自己維護報文和報文的界限,【應用進程需要自己區分哪一個是前面的Message,哪一個是后面的Message(報文)】
HTTP通過報文頭告訴客戶端需要讀取多少個字節,才能讀完整個報文
用戶-服務器狀態:Cookies
HTTP協議:是無狀態的協議
服務器不維護客戶端狀態,為了滿足用戶需求【打補丁】
小餅干:Cookie,用來維護客戶端狀態
客戶端:在本地文件夾中保存下來
客戶端第一次訪問時,沒有Cookies,由服務器為它生成一個Cookies【set-cookie】
Cookie與隱私相違背
Web緩存(代理服務器)
1.直接訪問web原始服務器
2.通過代理服務器訪問
這次請求中,緩存的東西被用上了【叫做:被命中了hit】
客戶端:快
服務器:負載更輕
網絡:流量更少
互聯網二八分布:
80%的人使用20%的熱點信息【訪問具有一定的趨同性】
緩存示例
15個對象/s:每秒鐘會帶來15bit的流量回來
單位時間內的流量為1.5Mbps=15請求/s*100kb
RTT往返時間=2s
I:流量強度
t:接入延遲
ISP:更高的帶寬的接入鏈路
安裝本地緩存(代理服務器):
1)本地訪問0.4-代理服務器
2) 遠程訪問0.6-原始服務器
0.4t1+0.6t2=t【加權平均】
t1=10ms
t2=10ms+2s+接入延遲【取決于流量強度】
條件GET方法
conditional get:條件式獲取
在請求報文中加入頭部if-modified-since