如果本文對你有幫助,歡迎關注、點贊、收藏、轉發給朋友,讓我有持續創作的動力
一. 計算機網絡發展(分四個階段)
第一階段:以單個計算機為中心的遠端聯機系統,隻有外部裝置無CPU和記憶體,以傳輸資訊為目的。标志着計算機網絡的誕生。(雛形)
第二階段:以多個主機通過通信線路互聯起來協同工作的系統。典型代表ARPANET,接口封包處理機IMP互聯。以共享資源為目的(概念)以通信子網為中心
第三階段:具有統一網絡體系結構并遵循國際标準的開放式和标準化的網絡(為開放式網絡互聯奠定了基礎)
第四階段:講多個具有獨立工作能力的計算機,通過通信裝置和線路,由功能完善的網絡軟體實作資源共享和資料通信的系統。
二. 根據距離分三類
1.區域網路LAN,位于一個建築或一個機關内,構作距離幾米到10km,資訊傳輸率高。 經營權和管理權屬于某個機關;支援傳輸媒體衆多;通信一般由網卡完成;傳輸品質好,誤碼率低;有規則的拓撲結構 。
組成:計算機及智能型外圍裝置;網卡、電纜和網絡裝置、網絡作業系統及有關軟體
從網絡架構方式分:
(1)對等式網絡:每台計算機地位平等,既可以是工作站也可是伺服器
優點:容易實作,便于操作;使用的作業系統比較簡單熟悉;有更大容錯性;投入自己小;網絡技術要求相對較低
缺點:安全性較差;網絡管理混亂;網絡性能不好;可用性差;可擴充性差
(2)工作站/伺服器網絡
至少有一台伺服器為其他工作站提供網絡資源和網絡服務
優點:網絡資源集中管理;較高安全性;計算機性能改善;資源查找友善擴充性好
缺點:成本高;需要專門的管理者;伺服器成為單一的故障點
(3)無盤工作站
2.城域網MAN,10~100km,通常是一座城市,100Mbit/s~1Gbit/s
3.廣域網WAN,100km以上,通過IMP和線路連接配接,網狀結構,10~500Mbit/s。國際網際網路是目前最大的廣域網
三. 構成網絡的三要素
至少兩台計算機互聯
通信裝置和傳輸媒體
網絡軟體,通信協定和網絡作業系統
1.比較http 0.9和http 1.0
- http0.9隻是一個簡單的協定,隻有一個GET方法,沒有首部,目标用來擷取HTML。
- HTTP1.0協定大量内容:首部,響應碼,重定向,錯誤,條件請求,内容編碼等。
http0.9流程:
用戶端,建構請求,通過DNS查詢IP位址,三次握手建立TCP連接配接,用戶端發起請求,伺服器響應,四次揮手,斷開TCP連接配接。(與伺服器隻有一個來回)
http1.0流程:
用戶端,建構請求,通過DNS查詢IP位址,三次握手建立TCP連接配接,用戶端發起請求,伺服器響應,四次揮手,斷開TCP連接配接。(與伺服器有兩個來回)
因為不足缺陷,就有了http1.1。
2.關于http1.1以及http2
http1.1中浏覽器再也不用為每個請求重新發起TCP連接配接了,增加内容有:緩存相關首部的擴充,OPTIONS方法,Upgrade首部,Range請求,壓縮和傳輸編碼,管道化等。但還是滿足不了現在的web發展需求,so,就有了http.2版本。
http2解決了(管道化特性可以讓用戶端一次發送所有的請求,但是有些問題阻礙了管道化的發展,即是某個請求花了很長時間,那麼隊頭阻塞會影響其他請求。)http中的隊頭阻塞問題。
使用http2會比http1.1在使用TCP時,使用者體驗的感覺多數延遲的效果有了量化的改善,以及提升了TCP連接配接的使用率(并行的實作機制不依賴與伺服器建立多個連接配接)
是以需要學習http2,了解更過的内容來掌握計算機網咯。
對于http2,你可以來運作一個http2的伺服器,擷取并安裝一個http2的web伺服器,下載下傳并安裝一張TLS證書,讓浏覽器和伺服器通過http2來連接配接。(從數字證書認證機構申請一張證書)。
了解http2的協定,先讓我們了解一下web頁面的請求,就是使用者在浏覽器中呈現的效果,發生了些什麼呢?
資源擷取的步驟:
把待請求URL放入隊列,判斷URL是否已在請求隊列,否的話就結束,是的話就判斷請求域名是否DNS緩存中,沒有的話就解析域名,有的話就到指定域名的TCP連接配接是否開啟,沒有的話就開啟TCP連接配接,進行HTTPS請求,初始化并完成TLS協定握手,向頁面對應的URL發送請求。
接收響應以及頁面渲染步驟:
接收請求,判斷是否HTML頁面,是就解析HTML,對頁面引用資源排優先級,添加引用資源到請求隊列。(如果頁面上的關鍵資源已經接收到,就開始渲染頁面),判斷是否有還要繼續接收資源,繼續解析渲染,直到結束。
3.HTTP的幾種請求方法用途
第一種GET方法:發送一個請求來擷取伺服器上的某一些資源。
第二種POST方法:向URL指定的資源送出資料或附加新的資料。
第三種PUT方法:跟POST方法一樣,可以向伺服器送出資料,但是它們之間也所有不同,PUT指定了資源在伺服器的位置,而POST沒有哦。
第四種HEAD方法:指請求頁面的首部。
第五種DELETE方法:删除伺服器上的某資源。
第六種OPTIONS方法:它用于擷取目前URL所支援的方法,如果請求成功,在Allow的頭包含類似GET,POST等的資訊。
第七種TARCE方法:用于激發一個遠端的,應用層的請求消息回路。
第八種CONNECT方法:把請求連接配接轉換到TCP/TP通道。
4.從浏覽器位址欄輸入url到顯示頁面的步驟
簡單說說,浏覽器根據請求的url交給dns域名解析,查找真正的ip位址,向伺服器發起請求;伺服器交給背景處理後,傳回資料,浏覽器會接收到檔案資料,比如,html,js,css,圖像等;然後浏覽器會對加載到的資源進行文法解析,建立相應的内部資料結構;載入解析到得資源檔案,渲染頁面,完成顯示頁面效果。
不夠清楚明白碼?
那就再次詳細一下,咳咳,從浏覽器接收url,開始進行網絡請求線程,發出一個完整的HTTP請求,從伺服器端接收請求到對應的背景接收到請求,然後是背景和前台的http互動;其中的緩存問題(http的緩存),浏覽器接收到http資料包後的解析流程,css的可視化格式模型,js引擎解析過程等;其他呈現頁面效果。
:這裡就需要你對浏覽器核心的了解:其中主要的渲染引擎和JS引擎,這裡了解一下你對浏覽器核心的了解。
- 渲染引擎,是負責取得網頁的内容,整理資訊,以及計算網頁的顯示方式,然後輸出到顯示器上。
- JS引擎是用于解析和執行javascript來實作網頁的動态效果。
浏覽器的核心的不同對于網頁的文法解釋會有不同,是以渲染的效果也不相同。其實最開始渲染引擎和JS引擎是沒有區分明确的,不過後來JS引擎越來越獨立,so,核心就傾向于渲染引擎。
對于資源請求/擷取,資源響應/頁面渲染,會給網絡帶寬和裝置資源帶來壓力,這個時候就會考慮到web的性能優化。
5.web的性能優化
其中裡面的性能關鍵:
什麼是資料包 資料包(IP資料包),指封裝在固定結構的一系列位元組,它定義了資料包的長度,傳輸的細節,以及其他與TCP相關的資訊。
延遲:指IP資料包從一個網絡端點到另一個網絡端點所花費的時間。(所花費時間在于往返時延,是延遲的時間的兩倍)
帶寬:隻要帶寬沒有飽和,兩個網絡端點的連接配接會一次處理盡可能多的資料量(是以帶寬可能會成為性能的瓶頸)
建立連接配接時間:在用戶端和伺服器之間建立連接配接往返資料(三次握手)
TCP三向交握過程:用戶端向伺服器發起一個SYN包,伺服器端傳回對應的SYN的ACK響應以及新的SYN包,然後用戶端傳回對應的ACK。(在用戶端和伺服器之間建立正常的TCP網絡連接配接時,用戶端首先發出一個SYN消息,伺服器使用SYN+ACK應答表示接收了這個消息,最後用戶端再以ACK消息響應。)
SYN是同步序列編号,是TCP/IP建立連接配接時使用的握手資訊。ACK是确認字元,在資料通信中,接收站發給發送站的一種傳輸類控制字元。表示發來的資料已确認接收無誤。在TCP/IP協定中,如果接收方成功的接收到資料,那麼會回複一個ACK資料。通過ACK信号有自己固定的格式,長度大小,由接收方回複給發送方。
詳解三次握手:
第一次握手,建立連接配接時,用戶端發送SYN包到伺服器,并進入SYN_SENT狀态,等待伺服器确認,其中SYN就是同步序列編号。
第二次握手,伺服器收到SYN包,必須确認客戶的SYN,同時自己也發送一個SYN包,即是SYN+ACK包,此時伺服器進入SYN_RECV狀态。
第三次握手,用戶端收到伺服器的SYN+ACK包,向伺服器發送确認包ACK,此包發送完畢,用戶端和伺服器進入ESTABLISHED(TCP連接配接成功)狀态,完成三次握手。
完成三次握手,用戶端與伺服器開始傳送資料。
TLS協商時間(TLS會造成額外的往返傳輸)
- 用戶端發起https連接配接,需要進行傳輸層安全協定協商
- TLS用來取代安全套接層SSL
除了網絡,還有頁面内容本身或伺服器性能,如首位元組時間TTFB,内容下載下傳時間,開始渲染時間,文檔加載完成的時間等。
那麼什麼是TTFB,它是指用戶端從開始定位到web頁面,至接收到主體頁面響應的第一位元組所耗費的時間。它是測量:從浏覽器發起請求至收到其第一位元組之間的耗時。
内容下載下傳時間是等同于被請求資源的最後位元組到達時間。
開始渲染時間,從客戶看到空白頁面的時長。
5.1web性能優化技術(減少用戶端網絡延遲和優化頁面渲染性能來提升web性能)
優化技術:
- DNS查詢優化
- 用戶端緩存
- 優化TCP連接配接
- 避免重定向
- 網絡邊緣的緩存
- 條件緩存
- 壓縮和代碼極簡化
- 圖檔優化
6. http1.1
- 改進持久連接配接和CDN域名的分片機制
- 不成熟的http管道化
- 提供虛拟主機支援
- 對動态生成的内容完美支援
- 引入cookie以及安全機制
對于http1的問題,迎來了http2。其中http1的問題:
隊頭阻塞,大多數情況下,浏覽器會希望同時擷取許多資源,但http1未提供機制來同時請求這些資源,如果僅是使用一個連接配接,需要發起請求,等待響應,然後才能發起下一個請求。
在http1中要給特性為管道化,可以允許一次發送一組請求,但是需要按照發送順序依次接收響應。是以在請求應答過程中,如發生什麼情況,剩下的工作都會被阻塞,這就是“隊頭阻塞”(阻塞在那次請求應答發生錯誤),阻礙網絡傳輸和web頁面的渲染,指導失去響應。
低效的TCP利用,TCP協定作為最可靠的協定之一,其核心是擁塞視窗。
擁塞視窗,是衛星通信在網際網路中防止通信擁塞的一種措施,它是在發端采用了一種“擁塞避免”算法和“慢速啟動”算法相結合的機制。“擁塞視窗”就是“擁塞避免”的視窗,它是一個裝在發送端的可滑動視窗,視窗的大小是不超過接收端确認通知的視窗。
擁塞視窗指在接收方确認資料包之前,發送方可以發送的TCP包的資料。(如擁塞視窗指定為1的情況,那麼發送方就發出1哥資料包之後,隻有接收方确認了那個發出的資料包,才能發送下一個)
擁塞控制能防止過多的資料注入到網絡中,用于避免網絡過載,TCP中可以通過慢啟動探索目前連接配接對應擁塞視窗的合适大小。即發送者發送資料的時候并非一開始注入大量資料到網絡中,而是發送一個資料包進行測試,當得到确認回複後,額外發送一個未确認包。
這意味着得到一個确認回複,可以發送兩個資料包,得到兩個确認回複,可以發送四個資料包,以幾何形式增長很快到達協定規定的擁塞視窗大小(發包數上限),這時候連接配接進入擁塞避免階段,這種機制需要往返幾次才能得知最佳擁塞視窗大小,但往返幾次所需的時間成本不可忽略。
- 擁塞視窗的大小取決于網絡的擁塞程度,并且動态地在變化。發送方讓自己的發送視窗等于擁塞視窗。如果再考慮到接收方的接收能力,那麼發送視窗還可能小于擁塞視窗。
- 發送方控制擁塞視窗的原則是:隻要網絡沒有出現擁塞,擁塞視窗就再增大一些,以便把更多的分組發送出去。但隻要網絡出現擁塞,擁塞視窗就減少一些,以減少注入到網絡中的分組數。
tcp中的慢啟動概念,是用來探索目前連接配接對應擁塞視窗的合适大小。用來弄清楚新連接配接目前的網絡情況。“慢速啟動”是在連接配接建立後,每收到一個來自收端的确認,就控制視窗增加一個段值大小,當視窗值達到“慢速啟動”的限值後,慢速啟動便停止工作,避免了網絡發生擁塞。
TCP傳輸控制協定的設計思路是,對假設情況很保守情況下,能夠公平對待同一網絡的不同流量的應用,它的避免擁塞機制被設計城即使在最差的網絡情況下也可以起作用。
臃腫的消息首部,HTTP/1.1能壓縮請求内容,但是消息首部卻不能壓縮。它可能占據請求的絕大部分(也可能是全部)也是比較常見了。(在這裡如果能壓縮請求首部,把請求變得更小,就能夠緩解帶寬壓力了,降低系統的總負載)
受限的優先級設定,即如果浏覽器針對指定域名開啟多個socket請求,若web頁面某些資源會比另外一些資源重要,會加重資源的排隊效應,會延遲請求其他的資源,優先級高的資源先擷取,優先級低的資源會在資源高的資源處理完成,(在處理過程中,浏覽器不會發起新的資源請求)等待高的完成後再發起請求,(這就會讓總的頁面下載下傳時間延長)。
在請求優先級高的資源的時間區間内浏覽器并不會發起優先級較低的新請求
小結:HTTP1.1慢啟動影響資源首次加載速度,TCP建立連接配接後,會開始請求傳輸,開始比較慢,然後不斷加快,為了防止出現網絡擁堵,會讓頁面的首次渲染時間變長。開始多個tcp,如出現網絡下降,無法識别資源的優先級,會出現競态問題。
7.如何進行網站性能優化
- 内容方面,減少Http請求(合并檔案,css精靈,inline Image),減少DNS查詢(DNS緩存,将資源分布到合适的數量的主機名),減少DOM元素的數量。
- Cookie方面,可以減少Cookie的大小。
- css方面,将樣式表放到頁面頂部;不使用css表達式;使用<link>不使用@import;可将css從外部引入;壓縮css。
- JavaScript方面,将腳本放到頁面底部;将JavaScript從外部引入;壓縮JavaScript,删除不需要的腳本,減少DOM的通路。
- 圖檔方面,可優化css精靈,不要再HTML中拉伸圖檔,優化圖檔(壓縮)。
8.http狀态碼以及含義
- 對于1xx的狀态碼,為資訊狀态碼,100 為繼續,表示确認,成功傳回具體參數資訊。
- 對于2xx的狀态碼,200 表示正常傳回資訊,201表示請求成功并且伺服器建立了新的資源,202表示伺服器已接受請求,但尚未處理。
- 對于3xx,重定向,301表示,請求的網頁已永久移動到新位置,302表示,臨時性重定向,303表示臨時性重定向,且總是使用 GET 請求新的 URI。304表示,自從上次請求後,請求的網頁未修改過。
- 對于4xx,用戶端錯誤,404,伺服器無法了解請求的格式,用戶端不應當嘗試再次使用相同的内容發起請求,401,請求未授權,403,禁止通路,404,找不到如何與 URI 相比對的資源。
- 對于5xx,伺服器錯誤,500,最常見的伺服器端錯誤,503,伺服器端暫時無法處理請求,可能是過載或維護。
9.http-資料壓縮
資料壓縮,在浏覽器中發送請求時會帶着Content-Encoding: gzip,裡面時浏覽器支援的壓縮格式清單,有多種如,gzip,deflate,br等。這樣伺服器就可以從中選擇一個壓縮算法,放進Content-Encoding響應頭裡,再把原資料壓縮後發給浏覽器。
10.http-分塊傳輸
分塊傳輸,就是将傳輸的檔案分解成多個小塊,然後分發給浏覽器,浏覽器收到後再重新組裝複原。
每個分開包含兩個部分,分塊長度和分塊資料(長度頭和資料塊),長度頭以CRLF結尾的一行明文,資料塊緊跟在長度頭後面,也是用CRLF結尾,最後用一個長度為0的塊表示結束。
在響應封包裡用頭字段Transfer-Encoding:chunked表示封包裡的body部分不是一次性發送過來的,而是分成了許多塊逐個發送的。
在Transfer-Encoding:chunked和Content-Length中,這兩個字段是互斥的。
一個響應封包的傳輸長度要麼已知,要麼長度未知(chunked)。
Content-Length: 299
11.http-範圍請求
斷點續傳
要實作該功能需要制定下載下傳的實體範圍,這種制定範圍發送請求叫做範圍請求。
Accept-Ranges:伺服器使用http響應頭Accept-Ranges辨別自身支援範圍請求,字段的具體值用于定義範圍請求的機關。
文法
Accept-Ranges: bytes,範圍請求的機關是 bytes (位元組)
Accept-Ranges: none,不支援任何範圍請求機關
範圍請求時用于不需要全部資料,隻需要其中的部分請求時,可以使用範圍請求,允許用戶端在請求頭裡使用專用字段來表示隻擷取檔案的一部分。
Range的格式,請求頭Range是HTTP範圍請求的專用字段,格式是“bytes=x-y”,以位元組為機關的資料範圍。
- “0-”表示從文檔起點開始到文檔結束的整個檔案。
- “100-”表示從第100哥位元組開始到文檔末尾。
- “-10”表示從文檔末尾倒數的第10個位元組開始。
示例:
執行範圍時會使用頭部字段 Range 來指定資源 byte 的範圍。
Range格式:
5001-10000位元組
Range : byte = 5001-10000
5000之後的
Range : byte = 5001-
0-3000位元組,5001-10000位元組
Range : byte=-3000,5001-10000
上圖表示伺服器收到Range字段後,檢測範圍合法性,範圍越界,就會傳回狀态碼416,如你的檔案隻有1000個位元組,但請求範圍在20000-3000,就會導緻這個狀态碼的出現。
如果成功讀取檔案,範圍正确,傳回狀态碼“206”。伺服器要添加一個響應頭字段Content-Range,告訴片段的實際偏移量和資源的總大小。
最後是發送資料,直接把片段用TCP發給用戶端,一個範圍請求就算是處理完了。
格式是“bytes x-y/length”,與Range頭差別在沒有“=”
Content-Range: bytes 0-4395719/4395720
12.http-多段資料
多端資料,就是在Range頭裡使用多個“x-y",一次性擷取多個片段資料。使用一種特殊的MIME類型:“multipart/byteranges”,用來表示響應封包包含了多個範圍時使用。多重範圍請求 響應會在頭部 Content-Type 表明 multipart-byteranges。
多段資料圖:分隔标記boundary來區分不同的分段
13.說一說cookies,sessionStorage 和 localStorage 的差別?
- cookie是網站用來辨別使用者身份而存儲在使用者本地終端上的資料
- cookie資料始終在同源的http請求中攜帶,即使是不需要的情況,so,會在浏覽器和伺服器間來回傳遞
- sessionStorage和localStorage不會自動把資料發送給伺服器,僅僅在本地儲存
存儲的大小
cookie的資料大小不能超過4k;sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或者更大。
有限期時間
- localStorage存儲持久資料,浏覽器關閉後資料不會丢失,除了主動删除資料
- sessionStorage資料在目前浏覽器視窗關閉後自動删除
- 設定得cookie過期時間之前都有效,就算視窗或者是浏覽器關閉
14.為什麼說利用多個域名來存儲網站資源會更有效?
因為CDN緩存更友善;突破浏覽器并發限制;節約cookie帶寬;節約主域名得連接配接數,優化頁面響應速度;防止不必要得安全性問題。
15.http2.0的内容
http2是超文本傳輸協定的第二版,相比http1協定的文本傳輸格式,http2是以二進制的格式進行資料傳輸的,具有更小的傳輸體積以及負載。
http2.0分層,分幀層(http2多路複用能力的核心部分),資料或http層(包含傳統上被認為是 HTTP 及其關聯資料的部分)。
HTTP2.0:
- 多路複用機制,引入了二進制的分幀層機制來實作多路複用。(分幀層是基于幀的二進制協定。這友善了機器解析。請求和響應交織在一起。)
- 可以設定請求的優先級(用戶端的分幀層對分割塊标上請求的優先級)。
- 頭部壓縮 請求頭壓縮,增加傳輸效率。
HTTP/2較HTTP/1.1優化亮點
- 多路複用的流
- 頭部壓縮
- 資源優先級和依賴設定
- 伺服器推送
- 流量控制
- 重置消息
多路複用的實作:
在單個域名下仍可以建立一個TCP管道,使用一個TCP長連接配接,下載下傳整個資源頁面,隻需要一次慢啟動,并且避免了競态,浏覽器發起請求,分幀層會對每個請求進行分割,将同一個請求的分割塊打上相同的id編号,然後通過協定棧将所有的分割體發送給伺服器,然後通過伺服器的分幀層根據id編号進行請求組裝,伺服器的分幀層将回應資料分割按同一個回應體進行ID分割回應給用戶端,用戶端拼裝回應。
對于http2中的幀(frame),http1不是基于幀(frame)的,是文本分隔的。
GET/HTTP/1.1 <crlf>
這樣,對于http1的請求或者是響應可能有的問題:
- 一次隻能處理一個請求或者是響應,完成之前是不能停止解析的。
- 無法預判解析需要多少内層。
HTTP/1 的請求和響應封包,是由起始行、首部和正文組成,換行符分隔;HTTP/2是将請求和響應資料分割成更小的幀,采用二進制編碼,易于解析的。
參考圖檔:
幀結構總結 所有的幀都包含一個9 byte的幀頭 + 可邊長的正文不同。根據幀的類型不同,正文部分的結構也不一樣。
幀頭:
16.http2-幕後
http2作為一個二進制協定,擁有包含輕量型,安全和快速在内的所有優勢,保留了原始的http協定語義,對于http2更改了在系統之間傳輸資料的方式。
二進制分幀層(binary framing layer),所有通信都在單個TCP連接配接上執行,該連接配接在整個對話期間一直處于打開狀态,主要是二進制協定将通信分解為幀的方式,這些幀交織在用戶端與伺服器之間的雙向邏輯流中。
HTTP/2 連接配接的拓撲結構(展示了一個用于建立多個流的連接配接)
在流 1 中,發送了一條請求消息,并傳回了相應的響應消息。
HTTP/2 幀結構
前9個位元組對于每個幀是一緻的。解析時隻需要讀取這些位元組,就可以準确地知道在整個幀中期望的位元組數。
幀首部字段表格:
名稱長度描述length3位元組表示幀負載的長度type1位元組目前幀類型Flags1位元組具體幀類型的辨別R1位保留位,不要設定,否則會帶來嚴重後果Stream Identifier31位每個流的唯一IDFrame Payload長度可變真實的幀内容,長度是在length字段中設定的
備注:流Id是用來辨別幀所屬的流。流看作在連接配接上的一系列幀,它們構成了單獨的 HTTP 請求和響應。
對于http1 的請求和響應都分成消息首部和消息體兩部分;http2 從上面一張圖可以知道,http2的請求和響應分成HEADERS 幀和 DATA 幀。
比較一下:
http2的一個重要特性是基于流的流量控制。提供了用戶端調整傳輸速度的能力。其中WINDOW_UPDATE 幀用來訓示流量控制資訊。
有了多路複用,用戶端可以一次發出多有資源的請求,不用像http1那樣,發出對新對象請求之前,需要等待前一個響應完成。是以浏覽器失去了在Http1中的預設資源請求優先級政策。
17.浏覽器生成http請求消息
http的頭字段
頭字段類型含義Date表示請求和響應生成的日期Pragma表示資料是否允許緩存的通信選項Cache-Control控制緩存的相關資訊Connection設定發送響應之後TCP連接配接是否繼續保持的通信選項Transfer-Encoding表示消息主體的編碼格式Via記錄途中經過的代理
和網關Authorization身份認證資料From請求發送者的郵件位址Referer當通過點選超級連結進入下一個頁面時,在這裡會記錄下上一個頁面的URIUser-Agent用戶端軟體的名
稱和版本号等相關資訊Accept用戶端可支援的資料類型,以MIME類型來表示Accept-Charset用戶端可支援的字元集Accept-Language用戶端可支援的語言Host接收請求的伺服器ip位址和端口号Range當需要隻擷取部分資料而不是全部資料時,可通過這個字段指定要擷取的資料範圍Location表示資訊的準确位置Server伺服器程式的名稱和版本
号等相關資訊Allow表示指定的URI支援Content-Encoding當消息體經過壓縮等編碼處理時,表示其編碼格式Content-Length表示消息體的長度Content-Type表示消息體的資料類型,以MIME規格定義的資料類型來表示Expires表示消息體的有效期Last-Modified資料的最後更新日期Content-Language表示消息體的語言Content-Location表示消息體在伺服器上的位置Content-Range當僅請求部分資料時,表示消息體包含的資料範圍
HTTP消息示例:
- HTTP,超文本傳送協定。
- 協定,通信操作的規則定義稱為協定。
- URI,統一資源辨別符。
- 1 條請求消息中隻能寫 1 個 URI。如果需要擷取多個檔案,必須 對每個檔案單獨發送 1 條請求。
IP 的基本思路
Ip位址的表示方法
IP位址的結構-子網路遮罩表示網絡号與主機号之間的邊界。
解析器的調用方法
DNS伺服器的基本工作
DNS 伺服器之間的查詢操作
資料通過類似管道的結構來流動
18.了解網絡基礎知識
- 實體層
- 資料鍊路層
- 網絡層
- 傳輸層
- 會話層
- 表示層
- 應用層
計算機網絡,可以将規模分WAN,Wide Area Network廣域網,和LAN區域網路。通過電腦連接配接交換機再到路由器的連接配接。
你知道計算機與網絡都經曆了怎麼樣的一個發展過程嗎?
- 批處理就是指事先将使用者程式和資料裝入卡帶或錄音帶,由計算機按照一定的順序讀取,使使用者所要執行的這些程式和資料能夠一并批量得到處理的方式。
- 分時系統,是指多個終端與同一個計算機連接配接,允許多個使用者同時使用一台計算機的系統。
- 計算機網絡
TCP/IP的機制是什麼,TCP/IP通信協定的統稱,學習這個有人一定不了解什麼是協定。
但我們在接觸到程式時,常常聽到協定如IP,TCP,HTTP等協定。記住TCP/IP就是IP,TCP,HTTP等協定的集合。協定就是計算機與計算機之間通過網絡實作通信時需要達成的一種的“約定”。這些協定就是讓不同廠商的裝置,不同的CPU和不同的作業系統組成的計算機之間進行通信。
就是兩台計算機之間都能支援相同的協定,并遵循才能實作互相通信。
分組交換協定
分組交換就是将大資料分割成一個一個叫做包的較小機關進行傳輸的方法。
分層子產品
了解OSI參考模型
OSI将分為易于了解的7層:
1.實體層,2.資料鍊路層,3.網絡層,4.傳輸層,5.會話層,6.表示層,7.應用層。
應用層:是對特定應用的協定。
表示層:裝置固有資料格式和網絡标準資料格式的轉換。
會話層:通信管理。負責建立和斷開通信連接配接。
傳輸層:管理兩個節點之間的資料傳輸。
網絡層:位址管理與路由選擇。
資料鍊路層:互連裝置之間傳送和識别資料幀。
實體層:以“0”,“1”代表電壓的高低,燈光的閃滅。
如何子產品化通信傳輸
網絡構成要素
網卡:
什麼是網關,它是OSI參考模型中負責将從傳輸層到應用層的資料進行轉換和轉發的裝置。
代理服務:
19.有哪些渲染優化呢?
第一,我們可以禁止使用iframe,第二,可以禁止使用gif圖檔來實作loading效果,降低CPU的消耗,來提升渲染性能,第三,使用CSS3代碼來代替JS動畫。
對于一些小圖示,可以使用base64位編碼,以減少網絡請求,但不建議大圖使用,因為比較耗費CPU,小圖示優勢在于,可以減少HTTP請求,避免檔案跨域,修改及時生效。
頁面頭部的style和script會阻塞頁面,在Renderer程序中的JS線程和渲染線程是互斥的。
20.學習TCP和IP的基礎知識
TCP/IP協定族市一組協定的集合,也稱為網際網路協定族。
20世紀60年代後半葉,應DoD要求,美國開始進行通信技術相關的演技,ARPANET的誕生,開發分組互動技術,在1975年,TCP/IP的誕生。1983年,ARPANET決定正式啟用TCP/IP為通信協定。
TCP/IP與OSI參考模型
對于OSI七層模型太細了,而網際網路協定族TCP/IP模型劃分為四層。
TCP/IP模型(應用層,傳輸層,網際網路層,網絡接口層)-應用層,傳輸層,網絡層,鍊路層。
傳輸層就是可以讓應用程式之間實作通信。
在其中TCP是一種面向有連接配接的傳輸層協定,保證兩端通信主機之間的通信可達。UDP是一種面向無連接配接的傳輸層協定,so,UDP用于分組資料較少或者多點傳播,廣播通信以及視訊通信等領域。
應用層
21.面試題:TCP/IP市如何在媒介上進行傳輸的呢?
在不同層次的協定✍
資料包首部:
以太網包首部:IP包首部,TCP包首部,資料
IP包首部:TCP包首部,資料
TCP包首部:資料
每個分層中,都會對所發送的資料附加一個首部,它包含了該層中必要的資訊。(發送的目标位址,協定相關的資訊等)
- 包是全能性術語
- 幀是資料鍊路層中包的機關
- 資料包,IP和UDP等網絡層以上的分層中包的機關
- 段,表示TCP資料流中的資訊
- 消息,應用協定中資料的機關
資料包的首部,明确表明了協定應該如何讀取資料。掌握資料包首部,通常,為協定提供的資訊為包首部,所要發送的内容為資料。
發送資料包,TCP/IP通信流程:
- 應用程式處理,發送通信開始TCP/IP通信,應用程式會進行編碼處理,編碼相當于OSI中的表示層功能。
- TCP子產品的處理,TCP負責建立連接配接,發送資料以及斷開連接配接,TCP提供将應用層發來的資料順利發送至對端的可靠傳輸。在應用層資料的前端附加一個TCP首部,它包含源端口号和目标端口号,序号以及校驗和(用來判斷資料是否被破壞)然後附加一個TCP首部的包再發給IP。
- IP子產品的處理,在TCP首部的前端加上自己的IP首部,它包含接收端IP位址和發送端IP位址。若不知道接收端的MAC位址,可以用ARP查找,隻要知道對端MAC位址,就可以将MAC以及IP位址交給以太網的驅動程式,來實作資料傳輸。
- 網絡接口的處理,從IP傳過來的IP包,然後附加上以太網首部并進行發送處理,以太網首部包含接收端的MAC位址,發送端的MAC的位址,以及标志以太網類型的以太網資料的協定。
資料包,經過以太網的資料鍊路時,大緻上附加了以太網包首部,IP包首部,TCP包首部或者UDP包,以及應用自己的包首部和資料,最後包追加了包尾。
分層中包的結構
資料包接收流程
- 網絡接口的處理,主機收到以太網包後,從以太網的包首部找到MAC位址判斷是否為發給自己的,若不是就丢棄,如果是,就查找以太網包首部中的類型域進而确定以太網協定所傳送過來的資料類型。
- 通過IP子產品處理,然後TCP子產品處理(需要判斷是否被破壞),檢查是否按照序号接收資料。當資料接收完畢後,會發送“确認回執”給發送端。注意,這裡的回執資訊未能達到發送端,那麼發送端會認為沒有收到而一直反複發送。
- 應用程式的處理,接收端應用程式會直接接收發送端發送的資料資訊。
22.了解一下http-http3.0
在http2.0中,TCP管道傳輸途中也會導緻丢包問題,造成隊頭阻塞(在http2.0中的TCP建立連接配接三次握手,和HTTPS的TSL連接配接也會耗費較多時間)
其實多路複用技術可以隻通過一個TCP連接配接就可以傳輸所有的請求資料。
http3中弄了一個基于UDP協定的QUIC協定,QUIC雖說基于UDP,但是在基礎上添加了很多功能。QUIC(快速UDP網絡連接配接)是一種實驗性的網絡傳輸協定,由Google開發,該協定旨在使網頁傳輸更快。
對于在http中的缺點就是延遲,浏覽器的阻塞,在對同一域名,同時隻能連接配接4個,超過了浏覽器的最大連接配接限數時,後面的請求就會被阻塞;DNS的查詢就是将域名解析為IP,來向目标伺服器的IP建立連接配接,其中通過DNS緩存可以達到減少時間的作用;建立連接配接,HTTP是基于tcp協定的,三次握手,每次連接配接都無法複用,so,會每次請求都要三次握手和慢啟動,都會影響導緻延遲。(慢啟動對大量小檔案請求影響較大)
http處于計算機網絡中的應用層,建立在TCP協定之上。(掌握了解tcp建立連接配接的3次握手和斷開連接配接的4次揮手和每次建立連接配接帶來的RTT延遲時間)。
相對于HTTP1.0使用了header裡的if-modified-since,expires來做緩存判斷,在HTTP1.1中引入了entity tag,if-unmodified-since,if-match,if-none-match等更多可供選擇的緩存頭來控制緩存政策。
http1.0傳輸資料時,每次都要重建立立連接配接,增加延遲,http1.1加入了keep-alive可以複用部分連接配接,但在域名分片等情況下仍要連接配接奪冠時連接配接,耗費資源,以及給伺服器帶來性能壓力。
http1.1嘗試使用pipeling來解決問題,就是浏覽器可以一次性發出多個請求,在同一個域名下,同一條TCP連接配接,但對于pipeling要求傳回是按照順序的,即(如果前面有個請求很耗時的話,後面的請求即使伺服器已經處理完,任會等待前面的請求處理完才開始按序傳回。)
在http1.x中,Header攜帶内容過大,增加了傳輸的成本,在傳輸的内容都是明文,在一定程度上無法保證其資料的安全性。(在http1.x問題的出現,有了SPDY協定,用于解決http/1.1效率不高的問題,降低延遲,壓縮Header等)
HTTP2主要解決使用者和網站隻用一個連接配接(同域名下所有通信都隻用單個連接配接完成,單個連接配接可以承載任意數量的雙向資料流,資料流是以消息的形式發送,消息由一個或多個幀組成)。
so,http采用二進制格式傳輸資料,不像http1.x的文本格式。(二進制:http2将請求和響應資料分割成幀,并且它們采用二進制的編碼),對于HTTP2的概念:(流,消息,幀)
- 流,它是連接配接中的一個虛拟信道;
- 消息,它是HTTP消息,請求,以及響應;
- 幀,它是HTTP2.0通信的最小機關。
多個幀可以亂序發送,可根據幀首部的辨別流進行重新組裝。
對于http2,同一域名下隻需要使用一個TCP連接配接,那麼當出現丢包時,會導緻整個TCP都要開始等待重傳。對于http1.1來說,可以開啟多個TCP連接配接,出現這種情況指揮影響一個連接配接(或者部分),其餘的TCP連接配接正常傳輸。
HTTP/2 對首部采取了壓縮政策,為了減少資源消耗并提升性能。(因為在http1中,在header攜帶cookie下,可能每次都要重複傳輸資料)
so,有了QUIC協定,整合了TCP,TLS,和HTTP/2的優點,并加以優化。那麼QUIC是啥,它是用來替代TCP,SSL/TLS的傳輸層協定,在傳輸層之上還有應用層。
注意,它是一個基于UDP協定的QUIC協定,使用在http3上。
QUIC 新功能
HTTPS 的一次完全握手的連接配接過程
QUIC可以解決傳輸單個資料流可以保證有序的傳遞,并且不會影響其他的資料流。(解決http2問題)
表示在QUIC連接配接中,一個連接配接上的多個stream,如其中stream1,stream2,stream3,stream4,其中stream2丢失(quic packet),其餘UDP到達,應用層直接讀取。--- 無需等待,不存在TCP隊頭阻塞,丢失的包需要重新傳即可。
補充:
- TCP是基于IP和端口去識别連接配接的;
- QUIC是通過ID的方式去識别連接配接的
對于QUIC的包都是經過認證的,除了個别,so,這樣,通過加密認證的封包,就可以降低安全風險。
HTTP2-TLS,TCP,IP
小結QUIC特點:(基于UDP)--- http3-QUIC,UDP,IP
- 多路資料流
- TLS
- 有序傳遞
- 快速握手
- 可靠性
23.網絡中的UDP
UPD面向封包的協定,就是UDP隻是封包的搬運工,不會對封包進行任何拆分和拼接操作,在發送端,應用層将資料傳給傳輸層的UDP協定,UDP會給資料加一個UDP頭辨別下是UUDP協定,然後傳給網絡層。
接收端,網絡層将資料傳給傳輸層,UDP隻去除IP封包頭就傳給應用層,不會任何拼接操作。
UDP是無連接配接,通信不需要建立和斷開連接配接,UDP是不可靠的,不關心資料的安全等問題,UDP是沒有擁塞控制,在網絡條件不好的情況下可能會導緻丢包。
傳輸:UDP 支援一對一,一對多,多對多,多對一的的傳輸方式, UDP 提供了單點傳播,多點傳播,廣播的功能。
24.網絡中的TCP
UDP沒有TCP那麼複雜,UDP頭部開銷小,但是TCP頭部比UDP頭部複雜得多,UDP頭部隻有8位元組,相比TCP的至少20位元組要少很多。
Sequence number
這個序号保證了TCP傳輸的封包都是有序的,對端可以通過序号順序的拼接封包
Window Size
表示視窗大小,還能接收多少位元組的資料
Acknowledgement Number
表示上一個序号的資料已經接收到,接收端期望接收的下一個位元組的編号是多少
辨別符
當ACK=1,表示确認号字段有效
當SYN=1,ACK=0時,表示目前封包段是一個連接配接請求封包
當SYN=1,ACK=1時,表示目前封包段是一個同意建立連接配接的應答封包
當FIN=1,表示此封包段是一個釋放連接配接的請求封包
性能名額 RTT
表示發送端發送資料到接收到對端資料所需的往返時間
小結
- TCP(Transmission Control Protocol,傳輸控制協定)是基于連接配接的協定
- UDP(User Data Protocol,使用者資料報協定)是面向非連接配接的協定。
25.建立連接配接三次握手
建立連接配接開始時,兩端都是CLOSED狀态,通信開始前,雙方都會建立 TCB,後進入 LISTEN 狀态,開始等待用戶端發送資料。
第一次握手
用戶端向伺服器端發送連接配接請求封包段,請求發送後,用戶端進入SYN-SENT 狀态。
第二次握手
服務端收到連接配接請求封包段後,發送完成後便進入 SYN-RECEIVED 狀态。
第三次握手
用戶端收到連接配接同意的應答後,要向服務端發送一個确認封包。用戶端發完這個封包段後便進入ESTABLISHED 狀态,服務端收到這個應答後也進入 ESTABLISHED狀态,此時連接配接建立成功。
有人問了,兩次握手就可以建立連接配接了,為啥要第三次呢?
因為防止失效的連接配接請求封包段被伺服器端接收,進而導緻錯誤。
26.http請求碼有哪些?
100為繼續,一般發送post請求時,已經發送了http header之後服務端将傳回此資訊,表示确認,之後發送具體參數資訊;201,請求成功并且伺服器建立了新的資源;202,伺服器已接受請求,但未處理。
301,請求的網頁已經永久移動到新的位置;302,臨時性重定向;303,臨時性重定向,且總是使用GET請求新的URI;304,自從上次請求後,請求的網頁未修改過。
404,伺服器無法了解請求;401,請求未授權;403,禁止通路。
27.面試時,簡單說說TCP傳輸的三次握手四次揮手
傳輸,為了準确無誤地把資料傳輸給目标,TCP協定采用了三次握手政策,用TCP協定把資料包送出去後,會向對方确認是否成功達到,發送端發送一個帶SYN标志的資料包給到對方,接收端收到後,會回傳一個帶有SYN/ACK标志的資料包表示傳送到達的确認資訊,然後發送端也再次回傳一個帶有ACK标志的資料包,表示“握手”結束了。
握手過程中使用的标志:SYN和ACK
斷開一個TCP連接配接需要四次揮手:
第一次揮手
主動關閉的一方,發送一個FIN(上述講過---當FIN=1,表示此封包段是一個釋放連接配接的請求封包),傳送資料,用來告訴對方(被動關閉方),說不會再給你發送資料了。---主動關閉的一方可以接受資料。
第二次揮手
被動關閉方 收到 FIN 包,發送 ACK 給對方,确認序号。
第三次揮手
被動關閉方 發送一個 FIN,關閉方,說我不會再給你發資料了。(你不給我發送資料,我也不給你發送資料了)
第四次揮手
主動關閉一方收到 FIN ,發送要給 ACK ,用來确認序号
28.常說的HTTPS
其實HTTP協定時承載于TCP協定之上的,再HTTP和TCP之間添加一個安全協定層,SSL或者TSL(ssl/tls協定傳輸,包含證書,解除安裝,流量轉發,負載均衡,頁面适配,浏覽器适配,refer傳遞等),則就是常說的HTTPS。
29.GET和POST的差別,何時使用POST?
- GET是用于資訊擷取,使用URL傳遞參數,發送資訊的數量有限;
- POST是用于修改伺服器上的資源;
- 一般使用POST,當無法使用緩存檔案,向伺服器發送大量的資料,發送未知的字元
30.面試問,HTTP協定的主要特點
- 簡單快速
- 靈活
- 無連接配接
- 無狀态
31.面試問,說說HTTP封包的組成部分
HTTP封包的組成部分包含:請求封包和響應封包
請求封包:有請求行,請求頭, 空行,請求體
響應封包:有狀态行,響應頭,空行,響應體
請求封包包含:
1.請求方法,2.請求URL,3.HTTP協定以及版本,4.封包頭,5.封包體
- 請求行,有請求方法,請求URL,http協定以及版本;
- 請求頭,一堆鍵值對
- 空行,當伺服器在解析請求頭的時候,遇到了空行,表明後面的内容是請求體
- 請求體,請求資料
響應封包包含:
1.封包協定以及版本,2,狀态碼以及狀态描述,3,響應頭,4,響應體
- 狀态行:http協定和版本,狀态碼以及狀态描述
- 響應頭
- 空行
- 響應體
32.面試時問,知道哪些HTTP方法
- GET方法擷取資源
- POST方法傳輸資源
- PUT方法更新資源
- DELETE方法删除資源
- HEAD方法獲得封包首部
33.持久連結
在http1.0中,用戶端每隔很短時間會對伺服器送出請求,檢視是否有新的資料,隻要輪詢足夠快,就可以造成互動實時進行,但這個做法,會對兩端造成大量的性能浪費。
對于http1.1中的長連接配接,使用connection:keep-alive進行長連接配接,用戶端隻請求一次,但是伺服器會将繼續保持連接配接,再次請求時,避免了重建立立連接配接。
注意,keep-alive不會永久保持連接配接,隻有保持一個時間段。
34.安全問題:CSRF和XSS
CSRF的基本概念,攻擊原理,防禦措施
CSRF(Cross-site request forgery):跨站請求僞造
了解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。
以你名義發送郵件,發消息,盜取你的賬号,甚至于購買商品,虛拟貨币轉賬……造成的問題包括:個人隐私洩露以及财産安全。
CSRF的原理:(要完成一次CSRF攻擊)
- 登入受信任網站A,并在本地生成Cookie。
- 在不登出A的情況下,通路危險網站B。
XSS的基本概念,跨域腳本攻擊。
xss是一種發生在web前端的漏洞,是以其危害的對象也主要是前端使用者。
跨域腳本攻擊是,惡意攻擊者往web頁面裡插入惡意的script代碼,在浏覽器中運作script代碼,達到惡意攻擊使用者的目的。
so,實作xss攻擊具備2個條件,第一需要向web頁面注入惡意的代碼,第二,這些惡意代碼被浏覽器成功的執行。
CSRF和XSS的差別:
- CSRF需要登入,擷取COOKIE,利用網站本身的漏洞,去請求網站的api
- XSS,不需要登入,向網站注入JS代碼,執行JS裡的代碼,篡改網站的内容
35.從一個HTTP請求來看網絡分層原理
一個HTTP請求的分層解析流程:
TCP,它是面向連接配接的,可靠的,基于位元組流的傳輸層通信協定。
特點:
- 基于連接配接,資料傳輸之前需要建立連接配接
- 全雙工的,雙向傳輸
- 位元組流,不限制資料大小,打包成封包段,保證有序接收,重複封包自動丢棄
- 流量緩沖,解決雙方處理能力的不比對
- 可靠的傳輸服務,保證可達,丢包時通過重發機制實作可靠性
- 擁塞控制,防止網絡出現惡性擁塞
TCP連接配接,源位址,源端口,目的位址,目的端口
從TCP-IP協定底層
滑動視窗協定與累計确認(延時ACK)
滑動視窗大小同通過tcp三次握手和對端協商,且受網絡狀況影響
36.HTTPS安全加密通道原理分析
什麼是HTTPS協定,由于HTTP天生“明文”的特點,整個傳輸過程完全透明,任何人都能夠在鍊路中截獲,修改或者僞造請求、響應封包,資料不具有可信性。
使用HTTPS時,所有的HTTP請求和響應發送到網絡前,都要進行加密。
https = http + ssl/tls
對稱加密:加密 解密使用同一密鑰
非對稱加密:公鑰-随意分發,私鑰-伺服器自己保持
公鑰加密的資料,隻能通過私鑰解密
私鑰加密的資料,隻能公鑰能解密
加密算法:
對稱密鑰加密算法,編,解碼使用相同密鑰的算法
非對稱密鑰加密算法,一個公鑰,一個私鑰,兩個密鑰是不同的,公鑰可以公開給如何人使用,私鑰是嚴格保密的。
加密通道的建立:
數字證書的申請和驗證
如何申請:
- 生成自己的公鑰和私鑰,伺服器自己保留私鑰
- 向CA機構送出公鑰,公司,域名資訊等待認證
- CA機構通過線上,線下多種途徑驗證你送出資訊的真實性,合法性
- 資訊稽核通過,CA機構則會向你簽發認證的數字證書,包含了公鑰,組織資訊,CA資訊,有效時間,證書序列号,同時生成了一個簽名
- 簽名步驟:hash(用于申請證書所送出的明文資訊)= 資訊摘要
- CA再使用CA機構的私鑰對資訊摘要進行加密,密文就是證書的數字簽名
37.https的對稱加密,非對稱加密,混合加密,CA認證
HTTPS ,超文本傳輸安全協定,目标是安全的HTTP通道,應用是安全資料傳輸。HTTP協定雖然使用廣,但是存在不小的安全缺陷,主要是資料的明文傳送和消息完整性檢測的缺乏。
HTTPS協定是由HTTP加上TLS/SSL協定建構的可進行加密傳輸,身份認證的網絡協定。
通過, 數字證書,加密算法,非對稱密鑰 等技術完成網際網路資料傳輸加密,實作網際網路傳輸安全保護。
HTTPS主要特性:
- 資料保密性
- 資料完整性
- 身份校驗安全性
用戶端和伺服器端在傳輸資料之前,會通過基于證書對雙方進行身份認證。用戶端發起SSL握手消息給服務端要求連接配接,服務端将證書發送給用戶端。用戶端檢查伺服器端證書,确認是否由自己信任的證書簽發機構簽發,如果不是,将是否繼續通訊的決定權交給使用者選擇,如果檢查無誤或者使用者選擇繼續,則用戶端認可服務端的身份。
服務端要求用戶端發送證書,并檢查是否通過驗證,失敗則關閉連接配接,認證成功,從用戶端證書中獲得用戶端的公鑰。
HTTP原理
用戶端的浏覽器首先要通過網絡與伺服器建立連接配接,該連接配接時通過TCP來完成的,一般TCP連接配接的端口号是80,建立連接配接後,用戶端發送一個請求給伺服器端;伺服器端接收到請求後,給予相應的響應資訊。
HTTPS原理
用戶端将它所支援的算法清單和一個用作産生密鑰的随機數發送給伺服器,伺服器從算法清單中選擇一種加密算法,并将它和一份包含伺服器公用密鑰的證書發送給用戶端,該證書還包含了用于認證目的的伺服器辨別,伺服器同時還提供了一個用作産生密鑰的随機數。
用戶端對伺服器的證書進行驗證,并抽取伺服器的公用密鑰,再産生一個稱作pre_master_secret的随機密碼串,并使用伺服器的公用密鑰對其進行加密,并将加密後的資訊發送給伺服器。
用戶端與伺服器端根據pre_master_secret以及用戶端與伺服器的随機數獨立計算出加密和MAC密鑰。
混合加密
在傳輸資料中使用對稱加密,但對稱加密的密鑰采用非對稱加密來傳輸,混合加密比較安全,但無法知道資料是否被篡改
CA認證
CA認證, 即是電子認證服務,指電子簽名相關各方提供真實性,可靠性驗證的活動。
特性:參閱百度百科—簡介,點選進入
38.https對比http
http傳輸方式:明文傳輸,網站或相關服務與使用者之間的資料互動無加密,容易被監聽,篡改。
https傳輸方式:在HTTP加入了SSL層,用于資料傳輸加密。
http身份認證:無任何身份認證,使用者無法通過http辨認出網站的真實身份。
https身份認證:經過CA多重認證,包含域名管理權限認證等。
http成本:無任何使用成本,所有網站預設是http模式。
https需要成本,需要申請SSL證書來實作https。
http連接配接端口:80端口。
https連接配接端口:443端口。
39.證書如何安全傳輸,被掉包了怎麼辦?
40.http3中QUIC
QUIC是谷歌制定的一種基于UDP的低延遲時間的網際網路傳輸層協定。
1、避免前序包阻塞;2、零RTT建連;3、FEC前向糾錯
HTTP 的曆史
HTTP/2 和 HTTP/3 建立連接配接的差别
TCP/建立連接配接與QUIC建立連接配接
隊頭阻塞/多路複用
HTTP/1.1 提出了 Pipelining 技術,允許一個 TCP 連接配接同時發送多個請求
請求與響應,與,Pipelining
http/1.1隊頭阻塞
HTTP/2 的多路複用解決了隊頭阻塞問題
擁塞控制:
- 慢啟動
- 擁塞避免
- 快速重傳
- 快速恢複
41.HTTP 協定入門
HTTP 基于TCP/IP 協定的應用層協定,不涉及資料包packet傳輸,主要用戶端和伺服器之間的通信格式,預設使用80端口。TCP連接配接建立後,用戶端向伺服器請求網頁,協定規定,伺服器隻能回應HTML格式的字元串,不能回應别的格式。
http1.0可以傳輸文字,傳輸圖像,視訊,二進制檔案;除了GET方法,還有POST,HEAD等;每次通信都需要 頭資訊HTTP header,狀态碼,多字元集支援,緩存,權限等。
字段:ontent-Type 字段
頭資訊必須是 ASCII 碼,後面的資料可以是任何格式,字段值:
text/plain
text/html
text/css
image/jpeg
image/png
image/svg+xml
audio/mp4
video/mp4
application/javascript
application/pdf
application/zip
application/atom+xml
用戶端請求的時候,使用Accept字段,表示可以接受哪些資料格式。
Accept: */*
Content-Encoding字段,表示資料的壓縮方式
Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
用戶端在請求時,用Accept-Encoding字段說明接受哪些壓縮方法。
Accept-Encoding: gzip, deflate
http1.0就是每個TCP連接配接隻能發送一個請求,發送完畢後就關閉,so,為解決問題,用了一個非标準Connection字段,Connection:keep-alive。
HTTP/1.1引入了持久連接配接(persistent connection),TCP連接配接預設不關閉,可以被多個請求複用,不用聲明Connection: keep-alive。
也不是永久性不關閉的,隻要有一段時間沒有活動,就會關閉TCP連接配接,一般對于同一個域名,大多數浏覽器允許同時建立6個持久連接配接。
1.1 版引入了管道機制(pipelining),同一個TCP連接配接裡,可以同時發送多個請求。但是還是按照順序,一個請求回應後,再回應另一個請求。(但也減少不小的消耗時間)。
使用分塊傳輸編碼,隻要請求或回應的頭資訊有Transfer-Encoding字段
Transfer-Encoding: chunked
什麼是多工?雙向,實時的通信就叫 多工。
HTTP2 複用TCP連接配接,在一個連接配接裡,兩端都可以同時發送多個請求或響應,而且不用按照順序一一對應,避免了“隊頭堵塞”。
http2引入了頭資訊壓縮機,頭資訊使用gzip或compress壓縮後再發送,用戶端和伺服器同時維護一張頭資訊表,所有字段存在這個表裡,生成一個索引号,以後就隻發送索引号,這樣就提高速度了。
HTTP/2允許伺服器未經請求,主動向用戶端發送資源(伺服器推送)
42.什麼是cookie呢
cookie是某網站為了辨識使用者身份,進行session跟蹤而存儲在使用者本地終端的資料(通常經過加密),由使用者用戶端計算機暫時或永久儲存的資訊。
- 存儲在使用者本地終端上的資料
- 用來辨識使用者身份
- 儲存在使用者本地終端
cookie是一些資料,存儲在你電腦上的文本檔案中,當web伺服器向浏覽器發送web頁面時,在連接配接關閉後,服務端不會記錄使用者的資訊,cookie的作用就是解決如何記錄用戶端的使用者資訊。
場景:當使用者通路web頁面,使用者資訊記錄在cookie中,當使用者下一次通路頁面後,可以在cookie中讀取使用者通路記錄。
cookie是以鍵值對形式存儲的,當浏覽器從伺服器上請求web頁面,該頁面的cookie會被添加到請求中,服務端通過這種方式用來擷取使用者資訊。
可以使用JavaScript來建立,讀取,修改,删除cookie
使用document.cookie屬性來建立,讀取以及删除cookie
建立:
document.cookie = "username = dadaqianduan";
給cookie添加一個過期時間:
document.cookie = "username = dadaqianduan; expires=xxxxxx";
預設情況下,cookie屬于目前頁面:
document.cookie = "username = dadaqianduan; expires= ; path=/";
讀取cookie
var x = document.cookie;
修改cookie
document.cookie = "username = dada; expires=xxx; path=/";
删除cookie, 把設定時間的expires 參數改為以前的時間即可。
document.cookie = "username = ; expires= xxx";
為什麼會有cookie呢?因為http請求時無協定的,http1.x,無狀态協定,用戶端同一個請求發送多次,服務端并不能識别是不是同一個用戶端發送,為了解決無狀态,就有了cookie。
cookies是伺服器暫存放在你的電腦裡的資料,以.txt格式的文本檔案,好讓伺服器用來辨認你的計算機,當你在浏覽網站時,web伺服器會發送一個小小的資料放在你的計算機上。
當你下一次通路同一個網站,web浏覽器會先看看有沒有它上次留下來的cookies資料,有的話就輸出特定的内容給你。
cookie原理
浏覽器第一次請求伺服器,伺服器響應請求中攜帶cookie,給浏覽器,浏覽器第二次請求,攜帶cookie,給伺服器,伺服器根據cookie辨識使用者,也可以修改cookie内容。
domain時.baidu.com的cookie綁定到了域名商。跨域的域名不能寫入在cookies檔案裡
cookie的屬性有哪些
Name, Value, Domain, Path, Expires/Max-Age, Size, HttpOnly, Secure, SameSite
掌握面試中的HttpOnly,這個屬性設定為true,就不能通過js腳本擷取cookie的指,能有效防止xss的攻擊。
Cookie中的HttpOnly和Secure中:
标記為Secure的Cookie隻能被https協定加密過的請求發送給服務端。但也無法保證其安全保障。
如果cookie中設定了HttpOnly屬性,通過js腳本将無法讀取到cookie資訊,有效防止xss的攻擊,竊取cookie内容,增加了cookie的安全性,但是重要資訊還是不要存儲在cookie中。
因為xss為跨站腳本攻擊,是web程式常見的漏洞,屬于被動式且用于用戶端的攻擊方式
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
SameSite
SameSite Cookie允許伺服器要求某個cookie在跨站請求時不會被發送,進而可以阻止跨站請求僞造攻擊(CSRF)。
示例:
Set-Cookie: key=value; SameSite=Strict
SameSite有三個值:
None: 浏覽器在同站請求,跨站請求下繼續發送cookies,不區分大小寫。(所有三方的請求都會攜帶cookie)
Strict: 浏覽器将隻在通路相同站點時發送cookie。(所有三方的連結都不會攜帶cookie)
Lax: Same-site cookies 将會為一些跨站子請求保留,如圖檔加載或者frames的調用,但隻有當使用者從外部站點導航到URL時才會發送。(隻有同步且是get請求才可攜帶cookie)
在https協定中,才能通過js去設定secure類型的cookie,在http協定的網頁中是無法設定secure類型cookie的。預設情況,https協定還是http協定的請求,cookie都會被發送到服務端。
43.什麼是token呢?
token的出現,是在用戶端頻繁向服務端請求資料,服務端頻繁的去資料庫查詢使用者名和密碼并進行對比,判斷使用者名和密碼正确與否,并作出相應提示。token是服務端生成的一串字元串,以作用戶端進行請求的一個令牌,第一登入時,伺服器生成一個token,将此token傳回給用戶端,用戶端帶上這個token,無需再次帶上使用者名和密碼了。
token的出現減輕了伺服器的壓力,減少頻繁地資料庫查詢。
token的優點
- 無狀态,可擴充
- 安全性
- 多平台跨域
- 基于标準
基于Token的身份驗證的過程
浏覽器,輸入userName, Password,到mysql,校驗成功 生成token,将token傳回給用戶端,當用戶端發起請求時,每次通路api都攜帶token到伺服器端,經過過濾器,校驗token,校驗成功後傳回請求資料,校驗失敗後傳回錯誤碼。
44.cookie,session,token
cookie,記錄通路過的網站或正在通路的網站,對于HTTP 協定是無狀态的,伺服器不知道浏覽器上一次通路做了什麼,也無法對使用者會話進行跟蹤連接配接,是以,cookie是由伺服器發送到用戶端浏覽器的一段文本檔案,包含了網站通路活動資訊。Cookie 存放在用戶端,用來儲存用戶端會話資訊;由于存儲在用戶端,它的安全性不能完全保證。
session表示是c/s架構中伺服器和用戶端一次會話的過程,用來儲存認證使用者資訊。session是一種HTTP存儲機制,提供持久機制。Session存放在伺服器端,使用者驗證用戶端資訊。由于存儲在伺服器,安全性有一定的保證。
token是一種認證方式(是“令牌”的意思,主要是用于身份的驗證方式。)
45.跨域
網頁的URL的協定、域名、端口有一個不同,就算是跨域了
跨域:JSONP
46.思維導圖http小結
47.http中的字段
- accept,資料格式,請求accept,響應,content-type,表示收到的資料格式
- accept,壓縮方式,請求accept-encoding,響應,content-encoding,采用什麼樣的壓縮方式
- accept,支援語言,請求accept-language,響應content-language
- accept,字元集,請求accept-charset,響應content-type,指定字元集
- accept,範圍請求,請求if-range和range,響應accept-anges和content-range
- cookie,請求時傳遞給服務端的cookie資訊
- set-cookie,響應封包首部設定要傳遞給用戶端的cookie資訊
- allow,支援什麼HTTP方法
- last-modified,資源的最後修改時間
- expires,設定資源緩存的失敗日期
- content-language,實體的資源語言
- content-encoding,實體的編碼格式
- content-length,實體主體部分的大小機關是位元組
- content-range,傳回的實體的哪些範圍
- content-type,哪些類型
- accept-ranges,處理的範圍請求
- age,告訴用戶端伺服器在多久前建立了響應
- vary,代理伺服器的緩存資訊
- location,用于指定重定向後的URI
- If-Match,值是資源的唯一辨別
- User-Agent,将建立請求的浏覽器和使用者代理名稱等資訊傳遞給伺服器
- Transfer-Encoding,傳輸封包的主體編碼方式
- connection,管理持久連接配接,keep-alive , close
- Cache-Control,控制浏覽器的強緩存
48.如果面試問HTTP封包結構是什麼,你能回答上來不?
對于 TCP 而言
起始行 + 頭部 + 空行 + 實體
- 請求封包
GET /home HTTP/1.1
- 響應封包
HTTP/1.1 200 OK
空行是用來分開頭部和實體。
49.如果面試問HTTP請求方法有哪些,你能回答上來不?
- GET方法,用來擷取資源
- POST方法,用來送出資料
- PUT方法,用來修改資料
- DELETE方法,用來删除資源
- OPTIONS方法,用來跨域請求
- HEAD方法,用來擷取資源的元資訊
- CONNECT方法,用來建立連接配接,用于代理伺服器
50.如果面試問,你對URI是如何了解的,你能回答上來不?
URL統一資源定位符,URI,統一資源辨別符。URI用于區分網絡上不同的資源。
URI包含了URN和URL。
URL的結構:
協定名,登入主機的使用者資訊,主機名和端口,請求路徑,查詢參數,URI上定位資源内的一個錨點。
51.如果面試問,你對HTTP狀态碼的了解有多少,你能回答上來不?
了解一些特定的HTTP狀态碼:
52.如果面試問,說說HTTP特點以及缺點,你能回答上來不?
特點是:
- 靈活可擴充
- 可靠傳輸
- 無狀态等
缺點是:
- 無狀态
- 明文傳輸
- 隊頭阻塞問題
53.如果面試問,說說你對Accept字段的了解,你能回答上來不?
- 資料格式
- 壓縮方式
- 支援語言
- 字元集
54.如果面試問,什麼是隊頭阻塞問題,你能回答上來不?
TCP中是封包,HTTP是請求。
對于解決HTTP的隊頭阻塞問題是:并發連接配接和域名分片。
55.如果面試問,說說你對HTTP代理的了解,你能回答上來不?
代理伺服器功能:1,負載均衡,2,保障安全(利用心跳機制監控伺服器,一旦發現故障機就将其踢出叢集。),3,緩存代理。
了解代理緩存:
- 由一個代理伺服器下載下傳的頁面存儲;
- 一個代理伺服器為多個使用者提供一條通道;
- 緩沖的代理允許一個代理伺服器減少對同一個網站的同樣頁面的請求次數
- 一旦代理伺服器的一個使用者請求了某個頁面,代理伺服器就儲存該頁面以服務于它的其他使用者的同樣的請求
- 代理緩存,這種處理減少了使用者等待頁面顯示的時間
緩存的作用:
代理伺服器或用戶端本地磁盤内儲存的資源副本,利用緩存可減少對源伺服器的通路,可以節省通信流量和通信時間。
示例:
Cache-Control: max-age=300;
表示時間間隔,再次請求的時間間隔300s内,就在緩存中擷取,否則就在伺服器中
Cache-Control:
- public 表示響應可被任何中間節點緩存
- private 表示中間節點不允許緩存
- no-cache 表示不使用Cache-Control的緩存控制方式做前置驗證
- no-store 表示真正的不緩存任何東西
- max-age 表示目前資源的有效時間
強緩存:浏覽器直接從本地存儲中擷取資料,不與伺服器進行互動
協商緩存:浏覽器發送請求到伺服器,浏覽器判斷是否可使用本地緩存
學習了解強緩存:
強緩存主要學習expires和cache-control
cache-control該字段:max-age,s-maxage,public,private,no-cache,no-store。
cache-control: public, max-age=3600, s-maxage=3600
- 表示資源過了多少秒之後變為無效
- s-maxage 的優先級高于 max-age
- 在代理伺服器中,隻有 s-maxage 起作用
public 和 private
- public 表示該資源可以被所有用戶端和代理伺服器緩存
- private 表示該資源僅能用戶端緩存
當浏覽器去請求某個檔案的時候,服務端就在response header裡做了緩存的配置:
表現為:respone header 的cache-control
學習了解✍協商緩存:
response header裡面的設定
etag: 'xxxx-xxx
last-modified: xx, 24 Dec xxx xxx:xx:xx GMT
56.如果面試問,HTTP/2,你能回答上來不?
HTTP/2采用哈夫曼編碼來壓縮整數和字元串,可以達到50%~90%的高壓縮率。
伺服器推送
57.B/S 結構定義
浏覽器-伺服器結構,B/S結構,用戶端不需要安裝專門的軟體,隻需要浏覽器即可,浏覽器通過web伺服器與資料庫進行互動,可以友善的在不同平台下工作。
B/S結構簡化了用戶端的工作,它是随着Internet技術興起而産生的,對C/S技術的改進,但該結構下伺服器端的工作較重,對伺服器的性能要求更高。
58.URI統一資源辨別符
統一資源辨別符是一個用于辨別某一網際網路資源名稱的字元串。該辨別允許使用者對網絡中的資源通過特定的協定進行互動操作。URI常見形式為統一資源定位符(URL),URN為統一資源名稱。用于在特定的指令空間資源的辨別,以補充網址。
59.HTTP 協定
HTTP超文本傳輸協定是網際網路上應用最為廣泛的一種網絡協定。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。通過HTTP或者HTTPS協定請求的資源由統一資源辨別符來辨別
HTTP 協定主要特點
60.資料鍊路-資料鍊路層
資料鍊路層:以太網,無線LAN,PPP。。。(無線,光纖。。。)
- 資料鍊路的知識對了解TCP/IP與網絡起到重要的作用
- 資料鍊路層的協定定義了通過通信媒介互連的裝置傳輸的規範
- 實體層面是将實際的通信媒介如電壓的高低,電波的強弱等信号與二進制01進行轉換
- 資料鍊路層處理的資料是一種集合為“幀”的塊
- WLAN,無線區域網路
- PPP,點對點協定,即是1對1連接配接計算機的協定
- ATM,異步傳輸方式
資料鍊路是讓網際網路計算機之間互相通信的一種協定,通信手段
- MAC位址用于識别資料鍊路中互連的節點
- 無線通信是使用電磁波,紅外線,雷射等方式進行傳播資料。一般在辦公室的區域網路範圍内組成的較高速的連接配接稱為無線區域網路。
- IP-VPN,在IP網絡上建立VPN,網絡服務商提供一種在IP網絡商使用MPLS技術建構VPN的服務。
61.TCP和UDP的差別
TCP是一個面向連接配接,可靠,基于位元組流的傳輸層協定。
UDP是一個面向無連接配接的傳輸層協定。
TCP是面向連接配接的,用戶端和伺服器端的連接配接,雙方互相通信之前,TCP需要三次握手建立連接配接,而UDP沒有建立連接配接的過程
tcp是面向位元組流,udp是面向封包的。UDP的資料傳輸是基于資料報的,TCP繼承了IP層的特性,TCP為了維護狀态,将一個個IP包變成了位元組流。
TCP封包格式圖:
- 序号:Seq序号,占32位,辨別從TCP源端口向目的端口發送的位元組流,發起方發送資料時,對此進行标記
- 确認序号:Ack序号,占32位,隻有ACK标志位為1時,确認序号字段才有效,Ack=Seq+1
- 标志位:共6個,即URG、ACK、PSH、RST、SYN、FIN等
- URG,緊急指有效
- ACK,确認序号有效
- RST,重置連接配接
- SYN,發起一個新連接配接
- FIN,釋放一個連接配接
- PSH,接收方應該盡快将這個封包交給應用層
62.三次握手建立連接配接
TCP 的三次握手的過程:
有圖可知都處于closed狀态,伺服器開始監聽某個端口進入listen狀态,用戶端發起請求,發送SYN,seq=x,然後狀态變為syn-sent狀态。
伺服器端接收到傳回syn和ack,seq=x,ack =x+1,然後狀态變成syn-rcvd狀态。
用戶端收到後,發送ack,seq=x+1,ack=y+1給伺服器端,狀态變為established,伺服器收到後,狀态變成established。
在連接配接過程中,需要對端确認的,需要消耗TCP封包的序列号。SYN消耗一個序列号而ACK不需要。
對于連接配接四次握手多餘,二次握手,會帶來資源的浪費,當遇到丢包,重傳,連接配接關閉後,丢包到達服務端,就預設建立連接配接,可用戶端以及關閉,是以三次握手就可以了。
63.四次揮手斷開連接配接
TCP 四次揮手的過程
三次揮手,當伺服器将ack和fin合并為一次揮手,會導緻長時間的延遲,以至于用戶端誤認為fin沒有到達用戶端,讓用戶端不斷重發fin。
64.TCP 滑動視窗
TCP 滑動視窗:
- 發送視窗
- 接收視窗
65.TCP 的擁塞控制?
TCP連接配接,擁塞控制:
- 擁塞視窗(Congestion Window,cwnd)
- 慢啟動門檻值(Slow Start Threshold,ssthresh)
了解TCP/IP協定四層
- 應用層決定了向使用者提供應用服務時通信的活動。
- 傳輸層對上層應用層,提供處于網絡連接配接中兩台計算機之間的資料傳輸。
- 網絡層用來處理在網絡上流動的資料包。
- 鍊路層,用來處理連接配接網絡的硬體部分。
- HTTP協定的職責,生成對目标web伺服器的HTTP請求封包
- tcp協定的職責,為了友善通信,将HTTP請求封包分割成封包段
- IP協定的職責,搜尋對方的位址,一邊中轉一邊傳送
- TCP協定的職責,從對方那裡接收到的封包段,重組到達的封包段,按序号以原來的順序重組請求封包
66.了解一下DNS
DNS是域名解析系統,它的作用非常簡單,就是根據域名查出對應的IP位址。
- 從根域名伺服器查到頂級域名伺服器的NS記錄和A記錄,IP位址
- 從頂級域名伺服器查到次級域名伺服器的NS記錄和A記錄,IP位址
- 從次級域名伺服器查出主機名的IP位址