基礎內容分類
從TCP/IP協議棧為依托,由上至下、從應用層到基礎設施介紹協議。
1.應用層:
HTTP/1.1
Websocket
HTTP/2.0
2.應用層的安全基礎設施
LTS/SSL
3.傳輸層
TCP
4.網絡層及數據鏈路層
IP層和以太網
HTTP協議
網絡頁面形成基本
流程:
其中當在瀏覽器上面的網址搜索界面點擊搜索的時候如果出現了一些記錄就相當于圖片中右邊藍色的“瀏覽器引擎”去搜索數據存儲,然后找到發現一些存儲在瀏覽器中的數據。
詳細操作:
定義
一種無狀態的、應用層的、以請求/應答方式運行的協議,它使用可擴展的語義和自描述消息格式、與基于網絡的超文本信息系統靈活的互動
基于ABNF(元語言)語法的HTTP格式:
1." “字符:用來分隔定義中的各個元素
2.”/“選擇:表示多個規則都是可供選擇的規則
3.”%c##-###“:表示從字符 ##到 ###
4.”()"序列組合:將規則組合起來,視為單個元素
5."mn"不定量重復:
表示零個或更多元素
1表示1個或更多元素
24表示兩個或者至多4個元素
6.[]可選序列:包體是可選的,可有可無的
操作符為:
根據上面的規則來分析格式
HTTP-message:表示http消息
start-line:起始行
request-line/status-line:表示請求行或者響應行構成起始行
request-line=method SP request-target SP HTTP-version CRLF:請求行有 方法 空格 請求路徑 空格 HTTP版本 換行
status-line=HTTP-version SP status-code SP reason-phrase CRLF :響應行由 HTTP版本 空格 響應碼(三位數字) 空格 字符串形式描述的原因 換行
詳細分析請求頭
method——常見的方法有:
GET:主要的獲取信息方法
HEAD:類似GET方法,但服務器不發送BODY,用以獲取HEAD元數據,冪等方法
POST:常用于提交HTML FROM表單、新增資源等
PUT:更新資源、帶條件時是冪等方法
DELETE:刪除資源、冪等方法
CONNECT:建立tunnel隧道
OPTION:顯示服務器對訪問資源支持的方法,冪等方法————跨域
TRACE:回顯服務器手到的請求,用于定位問題。
Linux中使用: curl static.taohui.tech -X OPTIONS
可以查看允許使用的方法
用于文檔管理的
PROPFIND:從Web資源中檢索以XML格式存儲的屬性——查看目錄
PROPPATCH:在單個原子性動作中更改和刪除資源的多個屬性
MKCOL:創建集合或者目錄
COPY:將資源從一個URI復制到另一個URI
MOVE:將資源從一個URI移動到另一個URI
LOCK:鎖定一個資源
UNLOCK:接觸資源的鎖定
詳細分析響應行
響應碼的規范:
1XX:表示請求已經被服務器接收到了,需要進一步處理才能完成更進一步的操作
100 Continue:上傳大文件前使用
101 Switch Protocols:協議升級使用
102 Proccessing:表示服務器已經收到了請求但是這個響應需要很長的時間處理,放置客戶端超市。
2XX:成功處理請求
200 OK :成功返回響應
201 Created: 有新資源在服務器端杯成功創建
202 Accepted:服務器接收并開始處理請求,請求并沒有處理完成。異步、需要很長時間處理的任務
203 Non-Authoritative Information:當代理服務器修改了origin server 的原始響應包體時。
204 NO Content:成功執行了請求且不攜帶響應包體,并暗示客戶端無需更新當前的頁面視圖。
205 Reset Contern:成功執行了請求切不攜帶響應包體,同時指明客戶端需要更新當前頁面視圖。
206 Partial Content:使用range協議時返回部分響應內容時的響應碼,多線程下載
207 Multi-Status:在WEBDAV協議匯
208 Already Reported:為了解決WEb協議
3XX:重定向
300 Multiple Choices:允許客戶端主動的顯示
301 Moved Permanently:表示資源永久的重定向
302 Found:表示資源臨時的重定向。
303 See Other:重定向到其他資源
304 Not Modified:客戶端可復用的緩存
307 Temporary Redirect:明確重定向后請求方法必須與原請求方法相同
308 Permanent Redirect:類似301
4XX:客戶端出現錯誤
400 Bad Request:服務器認為客戶端出現了錯誤,但不能明確判斷那種錯誤
401 Unauthorized: 用戶認證信息缺失
407 Proxy Authentication Required :對需要經有代理的請求,認證信息為通過代理服務器的驗證
403 Forbidden: 服務器理解請求的含義,但沒有權限執行此請求
404 Not Found: 服務器沒有找到相對應的資源
410 Gone :服務器沒有找到對應的資源,且明確的知道該位置永久性找不到資源————對404補充
405 Method Not Allowed:服務器不支持請求行中的method方法
406 Not Acceptable:對客戶端指定的資源表述不存在————語言不兼容
408 Request Timeout:服務器接收請求超時
409 Conflict:資源沖突
411 Length Required:請求中未攜帶Content-Length頭部
412 Precondition Failed:條件類請求不滿足時候返回
413 Payload Too Large/Request Entity Too Large:請求的包體超出服務器能處理的最大限度
414 URI Too Long:請求的URI超出服務器的最大長度
415 Unsupported Media Type:上傳的文件類型不支持
416 Range Not Satisfiable: 無法提供Range請求中指定的那段包體
417 Expectation Failed: 對于Expect 請求頭部期待的情況無法滿足
421 Misdirected Request: 服務器認為該請求不該發給它
426 Upgrade Required:服務器拒絕基于當前HTTP協議提供服務,必須要Upgrade告知客戶端升級
428 Precondition Required:用戶請求中缺少條件類頭部
429 Too Many Requests:客戶端發送請求的速率太快
431 Request Header Fields Too Large:請求的頭部大小超過限額
451 Unavailable For Legal Reasons :由于法律原因資源不可訪問
5XX:表示服務端出現錯誤
500 Internal Server Error :服務器內部錯誤
501 Not Implemented: 服務器不支持實現請求所需要的功能
502 Bad Gateway:代理服務器無法獲取到合法響應
503 Service Unavailable :服務器資源尚未準備好處理當前請求
504 GateWay Timeout:代理服務器無法及時的從上游獲得響應
505 HTTP version Not Supported: 請求的HTTP協議版本不支持
507 Insufficient Storage:服務器沒有足夠的空間處理請求————存在安全錯誤
508 Loop Detected:訪問資源是檢測到循環
511 Network Authentication Required:代理服務器發現客戶端需要進行身份驗證才能獲取網絡訪問權限
*(header-field CRLF):表示0個或多個以CRFL為結尾的http頭部
header-field = field-name":"OWS field-value OWS 表示由一個頭部名稱 中間分隔符號為:和頭部的值構成
OWS = *(SP / HTAB ) : 表示由零個或者多個空格或者橫向制表符構成
field-name = token
field-value = *(field-content/obs-fold)
后續介紹field-name/value
CRLF:空行
[message-body]:表示后面可以有消息體,但他與頭部必須中間隔了一個CRLF。
message-body: 表示由二進制的包傳遞的
利用telnet 工具查看
telnet www.taohui.pub 80
對比上面發現發現
請求構成:
GET SP request-target SP HTTP/1.1 CRLF
符合請求頭的格式
Host : www.xxx.com
表示的就是header-field : field-value
響應構成:
上面一大串就是status-line
分隔開的單獨的CRLF(空行,表示從這里開始這一行就沒有了)
最后的那一段就是message-body
網絡為什么要分層
OSI 概念模型
應用層:解決業務問題–七層設備nginx等
表示層:把網絡中的消息轉化成為應用層的東西(TLS/LLS加密)
會話層:建立關系連接/握手————概念層
傳輸層:解決進程與進程的關系,TCP協議等–四層設備
網絡層:確保在廣域網中從一個ip發送到另一個ip上–三層設備
數據鏈路層:利用mac地址連接到局域網的交換機的–二層設備
物理層:物理介質
分層的好處是:每一層只需要關注自己這一層的東西(封裝)不需要關心其他層做了什么。這樣技術迭代的時候就不用擔心兼容問題。
壞處:因為分層之間需要數據處理,就需要更長的時間影響了效率。
每一層的詳細處理:
架構風格
1.數據流風格
優點:簡單性、可進化性、可擴展性、可配置性、可重用性
管道與過濾器:每個Filter都有輸入端和輸出,只能從輸入端讀取數據,處理后再從輸出端輸出數據
統一接口的管道與過濾器:在PF上增加了統一接口的約束,所有的Filter過濾器必須具有同樣的接口
2.復制風格
優點:用戶可察覺的性能、可伸縮性、網絡效率、可靠性
復制倉庫(RR):多個進程提供相同的服務,通過反向代理對外提供集中服務
緩存:RR的變體,通過復制請求的結果,為后續請求服用
3.分層風格
優點:簡單性、可進化性、可伸縮性
客戶端服務器(CS):由客戶端觸發請求,服務端監聽到請求后響應,客戶端一直等待收到響應后,會話結束
分層系統(LS):每一層為其上的層服務,并使用在其下的層所提供的服務,如:TCP/IP
分層客戶端服務器(LCS):LS+CS,如正向代理/反向代理,從空間上分為外部層與內部層
無狀態、客戶端服務器(CSS):基于CS、服務器不允許有session state會話狀態
緩存、無狀態、客戶端服務器(C$SS):提升性能
4.移動代碼風格
優點:可擴展性、網絡效率
虛擬機(VM):分離指令與實現
遠程求值(REV):基于CS的VM,將代碼發送至服務器執行
按需代碼(COD):服務器在響應發回處理代碼,在客戶端執行
5.點對點風格
優點:可進化性、可重用性、可拓展性、可配置性
EBI:基于事件集成系統
使用Chrome抓包
控制器:控制面板的外觀與功能。
過濾器:過濾請求列表中顯示的資源
概覽:顯示HTTP請求、響應的時間軸
請求列表:默認時間排序,可選擇顯示列
概要:請求總數、總數據量、總花費時間等
瀏覽器的加載過程
1.解析HTML結構
2.加載外部腳本和樣式表文件
3.解析并執行腳本代碼//部分腳本會阻塞頁面的加載
4.DOM樹構建完成//DOMContentLoaded事件
5.加載圖片等外部文件
6.頁面加載完畢//load事件
請求時間詳細分布:
Queueing:瀏覽器在排隊
Stalled:請求可能會因Queueing中描述的任何原因停止
DNS Lookup:瀏覽器正在解析請求的IP地址
Proxy Negotiation:瀏覽器正在與代理服務器協商請求
Request sent :正在發送請求
ServiceWorker Preparation:瀏覽器正在啟動Service Worker
Request to ServiceWork:正在將請求發送到Service Workder
Waiting(TTFB):將瀏覽器正在等待響應的第一個字節
Content Download:瀏覽器正在接受響應
Receiving Push:瀏覽器正在通過HTTP/2服務器推送接受此響應數據
Reading Push:瀏覽器正在讀取之前的本地數據
URI
定義:
Uniform Resource Identifier 統一資源標識符
組成:
scheme, user information, host, port(HTTP默認43), path, query,fragment(分段)
用元語表示URI:
URI= scheme “:” hire-pary[“?“query][”#“fragment]
解釋:
scheme=ALPHA*(ALPHA/DIGIT/”+”/“-”/“.”)
如:https,http,ftp,mailto,file,telnet等
ALPHA表示字母
DIGIT表示數字
hire-pary=“//” authority path-abempty / path-absolute /path-rootless /path-empty
authority=[ userinfo"@“]host[”:" port]————用戶信息@域名:端口
userinfo=*(unreserved /pct-encoded /sub-delims/“:”)
host=IP-literal/ipv4address/reg-name
port=*DIGIT
query=*(pchar/“//”?“)————以”?"開頭的可選項
fragment=*(pchar/“/”/“?”)————以"#"開頭的可選項
相對URI:去除絕對路徑只留下/html/rfc7231?test=1#page-7
學習來源:極客時間