于一般用戶而言,位于鍵盤左上方的ESC鍵并不常用,但你知道嗎?其實借助ESC鍵還能實現不少快捷操作哦!
1.上網時,如果點錯了某個網址,直接按ESC鍵即可停止打開當前網頁。
2.上網時總免不了要填寫一些用戶名什么的,如果填錯了,按ESC鍵即可清除所有的框內內容;而打字時,如果打錯了也可以按ESC鍵來清除錯誤的選字框。
3.除了“Ctrl+Alt+Del”組合鍵可以調出windows任務管理器外,按下“Ctrl+Shift+Esc”組合鍵一樣能啟動任務管理器。
4.當某個程序不處于活動狀態而我們又想將其恢復為活動狀態時,按“Alt+Esc”鍵即可激活該應用程序,而不必用鼠標點擊程序標題欄。
5.對于存在“取消”選項的彈出窗口而言,如果你要選擇取消的話,直接按ESC鍵即可實現“取消”操作。
電腦關機后自動重啟的原因:
1:病毒木馬問題造成的,惡搞木馬可能已存在于你的電腦硬盤上(請全盤查殺處理)
2:系統設置問題造成的,例如Windows XP默認情況下,當系統出現錯誤時會自動重新啟動,這樣當用戶關機時,如果關機過程中系統出現錯誤就會重新啟動計算機。
3:硬件問題,例如內存散熱不穩定,顯卡、網卡松動等。(此問題一般較少見,且必須先試其它解決方法再考慮硬件是否損壞,若系統設置及其它優化方法無法解決,自己又對硬件方面不是很懂,建議去專業的維修點維修,以免造成不必要的損失)
4、有時關機時先拔掉網線故障排除,這可能是網線質量或接口故障引起的。
電腦關機后自動開機的解決方法:
1、進入BIOS,在電源管理菜單中,看“RME EventWake up”(PME事件喚醒),項是否是“Enable”(默認值),若是,請將它改為“Disable”。
2、右擊我的電腦選“屬性”-----“高級”----啟動和故障恢復”中的“設置”,在打開的對話框中去掉“系統失敗”中的“自動重新啟動”前的對勾,按確定應用。
3.若是病毒引起,請使用殺毒軟件進行全盤查殺。
如何設置電腦的定時關機
選擇“開始→運行”:
1、輸入“at 22:00 Shutdown -s”,這樣,到了22點電腦就會出現“系統關機”對話框,默認有30秒鐘的倒計時并提示你保存工作。
2、輸入 “Shutdown.exe -s -t 3600”,這里表示60分鐘后自動關機,“3600”代表60分鐘。設置完成后會彈出一個倒計時關機的對話框。需要多久關機就自己修改“3600”為需要關機的秒數。
3、設置好自動關機后,如果想取消的話,可以在運行中輸入“shutdown -a”。另外輸入“shutdown -i”,則可以打開設置自動關機對話框,對自動關機進行設置。
如何設置定時開機
此功能需要在BIOS中設定,并且你的主板的高級電源管理設置必須支持這個功能,不過現在大多數的主板全支持,放心使用吧.
步驟一:
啟動系統按DEL,進入BIOS,然后選中 "POWER MANAGEMENT FEATURES" (電源管理設置),回車進入.在電源窗口中找到"RESTORE ON AC/POWER LOSS"項,按回車,然后通過方向鍵設置其值為"POWER ON".
步驟二:
選中"RESUME ON RTC ALARM"并按回車,接著通過方向鍵設置其值為"ENABLE"
步驟三:
選中"RTC ALARM DATE"按回車,然后將其值設定為"EVERYDAY",表示每天都進行一樣的操作,按照同樣的方法,分別將"RTC ALARM HOURS""RTC ALARM MINUTE""RTM ALARM SECOND"設置為"07""15""00",這表示開機時間為早上的"7:15:00",全部設置好后,按F10,保存并重新啟動. (由于不同的主板的BIOS不一樣,有些主板的設置可能與上面的有一點點不同,但只要記住在電源管理中找到"WAKE UP"字樣的就行了,因為這是設置定時開機的選項)
2自動登陸系統
電腦開機了,但是我們有些人設置了開機密碼,不能自動登陸,怎么辦?
我們可以通過修改注冊表來實現自動登陸.
步驟一:
在運行中輸入"REGEDIT",打開HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWSNT\CURRENTVERSION\WINLOGON.
步驟二:
在右方的窗口中找到"DEFAULTUSERNAME"子鍵,將數值數據改為用戶登陸帳戶名,如果不存在該鍵值,就可以在右邊的窗口中右鍵新建字符串,接著將"新值#1"重命名為"DefaultUserName"后進行修改.
步驟三:
在右側窗口中找到DefaultPassword,如果不存在,可以新建,然后將其鍵值設定為你的密碼
步驟四:
按照以上的方法,我們在右邊的窗口中新建一個名為"AutoAdminLogon"的鍵值,將其值設為1,然后退出重新啟動就可以實現自動登陸
腦現在已成為人們學習、工作、娛樂必備的工具之一,掌握一些電腦技巧不僅可以豐富我們的技能,更能提高我們的效率!
今天給小伙伴們分享18個可以說是基本但又非常實用的電腦技巧,如果這些你沒都掌握,可能你還處于小白階段哦
一一一一一一一一一一一一一一一一一一一一一一一一
文字版教程
1、快速切換程序
桌面的程序開得太多,用鼠標挨個點起來很麻煩,怎樣快速切換不同程序?
按Alt+Tab一鍵搞定。或按Windows鍵+Tab鍵,還有3D切換效果(適用于Win7和Win10)。
2、一鍵快速鎖屏
需要暫時離開座位,又對自己的電腦安全很重視,怎么辦?
按Windows鍵+L鍵,電腦直接鎖屏(L=Lock),不用擔心資料外泄了。
3、秒開文件管理
要找電腦上的文件時,一般人會先找到“我的電腦”,然后點擊打開,步驟有點繁瑣。
按Windows鍵+E鍵,直接打開資源管理器。
4、直接顯示桌面
正在聊QQ或者逛淘寶時,突然Boss進來了,鼠標一下子點不到右下角的顯示桌面,怎么辦?
按Windows鍵+D鍵,快速切換到桌面。
5、快速關掉頁面
不想被經過的人看到正在瀏覽的網站,怎么辦?
按Ctrl+W或Alt+F4,可以關閉當前的頁面。
6、恢復被關頁面
電腦突然故障或網頁突然關閉,想繼續瀏覽剛才被關掉的網頁,怎么辦?
按Ctrl+Shift+T,恢復瀏覽器中剛才被關掉的網頁。
7、誤刪文字恢復
寫了很久的文檔,卻被不小心刪掉幾大段,怎么辦?
按Ctrl+Z,撤銷刪除,不小心刪除的文件同樣適用。
8、文字圖片放大
電腦分辨率很高,但屏幕文字圖片太小,看不清楚怎么辦?
試試Windows鍵和+,想放大多少倍都可以。縮小可按Windows鍵和一。
9、快速調節電腦
如何快速打開無線網絡,調節顯示器亮度、調節音量大小?
按Windows鍵+X,統統都能搞定!
10、多標簽切換
QQ、IE都是在同一個窗口里面打開幾個頁面,用Ctrl+Tab,可以在幾個頁面之間互相切換。
11、屏幕錄像功能
需要錄制一段電腦操作教程,但卻找不到好用的第三方屏幕錄制工具。
按Windows鍵+R,輸入psr.exe回車,然后就可以開始記錄了。
12、永久刪除文件
電腦里不用的程序、文件,如果想要永久刪除,還要再到回收站二次操作。
按Shift+Delete,一次永久刪除所選項。
13、快速查找關鍵字
想要快速定位某個關鍵詞的位置?需要在海量的文字里核對某一句話,卻找了半天沒找到?
按Ctrl+F查找,立刻準確定位關鍵字。
14、調出虛擬鍵盤
按Windows+R輸入osk,出現炫酷虛擬鍵盤!你按下一個鍵,它也會同樣顯示出來按下的狀態喔!
15、打開系統屬性
按windows鍵不放,再按下Fn,再按下Home,你就可以打開系統屬性了。
16、快速截取全屏
用QQ或微信截圖截不了全屏,怎么辦?
按Print Scr Sysrq或fn+Print Scr,在需要粘貼截圖的地方按Ctrl+V就自動生成了。
17、強行刷新網頁
如果網頁運行到一半突然沒有響應,用鼠標點刷新也沒有反應,怎么辦?
按Ctrl+F5,可強行刷新網頁。
18、快速移動光標
需要處理的文檔太長,每次返回目錄或去往文末都需要拖動滾動條?
按Ctrl+Home/Esc,可使光標快速移到文件頭/尾。
一. 計算機網絡發展(分四個階段)
第一階段:以單個計算機為中心的遠程聯機系統,只有外部設備無CPU和內存,以傳輸信息為目的。標志著計算機網絡的誕生。(雛形)
第二階段:以多個主機通過通信線路互聯起來協同工作的系統。典型代表ARPANET,接口報文處理機IMP互聯。以共享資源為目的(概念)以通信子網為中心
第三階段:具有統一網絡體系結構并遵循國際標準的開放式和標準化的網絡(為開放式網絡互聯奠定了基礎)
第四階段:講多個具有獨立工作能力的計算機,通過通信設備和線路,由功能完善的網絡軟件實現資源共享和數據通信的系統。
二. 根據距離分三類
1.局域網LAN,位于一個建筑或一個單位內,構作距離幾米到10km,信息傳輸率高。 經營權和管理權屬于某個單位;支持傳輸介質眾多;通信一般由網卡完成;傳輸質量好,誤碼率低;有規則的拓撲結構 。
組成:計算機及智能型外圍設備;網卡、電纜和網絡設備、網絡操作系統及有關軟件
從網絡架構方式分:
(1)對等式網絡:每臺計算機地位平等,既可以是工作站也可是服務器
優點:容易實現,便于操作;使用的操作系統比較簡單熟悉;有更大容錯性;投入自己小;網絡技術要求相對較低
缺點:安全性較差;網絡管理混亂;網絡性能不好;可用性差;可擴展性差
(2)工作站/服務器網絡
至少有一臺服務器為其他工作站提供網絡資源和網絡服務
優點:網絡資源集中管理;較高安全性;計算機性能改善;資源查找方便擴展性好
缺點:成本高;需要專門的管理員;服務器成為單一的故障點
(3)無盤工作站
2.城域網MAN,10~100km,通常是一座城市,100Mbit/s~1Gbit/s
3.廣域網WAN,100km以上,通過IMP和線路連接,網狀結構,10~500Mbit/s。國際互聯網是目前最大的廣域網
三. 構成網絡的三要素
至少兩臺計算機互聯
通信設備和傳輸介質
網絡軟件,通信協議和網絡操作系統
http0.9流程:
客戶端,構建請求,通過DNS查詢IP地址,三次握手建立TCP連接,客戶端發起請求,服務器響應,四次揮手,斷開TCP連接。(與服務器只有一個來回)
http1.0流程:
客戶端,構建請求,通過DNS查詢IP地址,三次握手建立TCP連接,客戶端發起請求,服務器響應,四次揮手,斷開TCP連接。(與服務器有兩個來回)
因為不足缺陷,就有了http1.1。
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,對頁面引用資源排優先級,添加引用資源到請求隊列。(如果頁面上的關鍵資源已經接收到,就開始渲染頁面),判斷是否有還要繼續接收資源,繼續解析渲染,直到結束。
第一種GET方法:發送一個請求來獲取服務器上的某一些資源。
第二種POST方法:向URL指定的資源提交數據或附加新的數據。
第三種PUT方法:跟POST方法一樣,可以向服務器提交數據,但是它們之間也所有不同,PUT指定了資源在服務器的位置,而POST沒有哦。
第四種HEAD方法:指請求頁面的首部。
第五種DELETE方法:刪除服務器上的某資源。
第六種OPTIONS方法:它用于獲取當前URL所支持的方法,如果請求成功,在Allow的頭包含類似GET,POST等的信息。
第七種TARCE方法:用于激發一個遠程的,應用層的請求消息回路。
第八種CONNECT方法:把請求連接轉換到TCP/TP通道。
簡單說說,瀏覽器根據請求的url交給dns域名解析,查找真正的ip地址,向服務器發起請求;服務器交給后臺處理后,返回數據,瀏覽器會接收到文件數據,比如,html,js,css,圖像等;然后瀏覽器會對加載到的資源進行語法解析,建立相應的內部數據結構;載入解析到得資源文件,渲染頁面,完成顯示頁面效果。
不夠清楚明白碼?
那就再次詳細一下,咳咳,從瀏覽器接收url,開始進行網絡請求線程,發出一個完整的HTTP請求,從服務器端接收請求到對應的后臺接收到請求,然后是后臺和前臺的http交互;其中的緩存問題(http的緩存),瀏覽器接收到http數據包后的解析流程,css的可視化格式模型,js引擎解析過程等;其他呈現頁面效果。
:這里就需要你對瀏覽器內核的理解:其中主要的渲染引擎和JS引擎,這里了解一下你對瀏覽器內核的理解。
瀏覽器的內核的不同對于網頁的語法解釋會有不同,所以渲染的效果也不相同。其實最開始渲染引擎和JS引擎是沒有區分明確的,不過后來JS引擎越來越獨立,so,內核就傾向于渲染引擎。
對于資源請求/獲取,資源響應/頁面渲染,會給網絡帶寬和設備資源帶來壓力,這個時候就會考慮到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會造成額外的往返傳輸)
除了網絡,還有頁面內容本身或服務器性能,如首字節時間TTFB,內容下載時間,開始渲染時間,文檔加載完成的時間等。
那么什么是TTFB,它是指客戶端從開始定位到web頁面,至接收到主體頁面響應的第一字節所耗費的時間。它是測量:從瀏覽器發起請求至收到其第一字節之間的耗時。
內容下載時間是等同于被請求資源的最后字節到達時間。
開始渲染時間,從客戶看到空白頁面的時長。
優化技術:
對于http1的問題,迎來了http2。其中http1的問題:
隊頭阻塞,大多數情況下,瀏覽器會希望同時獲取許多資源,但http1未提供機制來同時請求這些資源,如果僅是使用一個連接,需要發起請求,等待響應,然后才能發起下一個請求。
在http1中要給特性為管道化,可以允許一次發送一組請求,但是需要按照發送順序依次接收響應。所以在請求應答過程中,如發生什么情況,剩下的工作都會被阻塞,這就是“隊頭阻塞”(阻塞在那次請求應答發生錯誤),阻礙網絡傳輸和web頁面的渲染,指導失去響應。
低效的TCP利用,TCP協議作為最可靠的協議之一,其核心是擁塞窗口。
擁塞窗口,是衛星通信在因特網中防止通信擁塞的一種措施,它是在發端采用了一種“擁塞避免”算法和“慢速啟動”算法相結合的機制。“擁塞窗口”就是“擁塞避免”的窗口,它是一個裝在發送端的可滑動窗口,窗口的大小是不超過接收端確認通知的窗口。
擁塞窗口指在接收方確認數據包之前,發送方可以發送的TCP包的數據。(如擁塞窗口指定為1的情況,那么發送方就發出1哥數據包之后,只有接收方確認了那個發出的數據包,才能發送下一個)
擁塞控制能防止過多的數據注入到網絡中,用于避免網絡過載,TCP中可以通過慢啟動探索當前連接對應擁塞窗口的合適大小。即發送者發送數據的時候并非一開始注入大量數據到網絡中,而是發送一個數據包進行測試,當得到確認回復后,額外發送一個未確認包。
這意味著得到一個確認回復,可以發送兩個數據包,得到兩個確認回復,可以發送四個數據包,以幾何形式增長很快到達協議規定的擁塞窗口大小(發包數上限),這時候連接進入擁塞避免階段,這種機制需要往返幾次才能得知最佳擁塞窗口大小,但往返幾次所需的時間成本不可忽略。
tcp中的慢啟動概念,是用來探索當前連接對應擁塞窗口的合適大小。用來弄清楚新連接當前的網絡情況。“慢速啟動”是在連接建立后,每收到一個來自收端的確認,就控制窗口增加一個段值大小,當窗口值達到“慢速啟動”的限值后,慢速啟動便停止工作,避免了網絡發生擁塞。
TCP傳輸控制協議的設計思路是,對假設情況很保守情況下,能夠公平對待同一網絡的不同流量的應用,它的避免擁塞機制被設計城即使在最差的網絡情況下也可以起作用。
臃腫的消息首部,HTTP/1.1能壓縮請求內容,但是消息首部卻不能壓縮。它可能占據請求的絕大部分(也可能是全部)也是比較常見了。(在這里如果能壓縮請求首部,把請求變得更小,就能夠緩解帶寬壓力了,降低系統的總負載)
受限的優先級設置,即如果瀏覽器針對指定域名開啟多個socket請求,若web頁面某些資源會比另外一些資源重要,會加重資源的排隊效應,會延遲請求其他的資源,優先級高的資源先獲取,優先級低的資源會在資源高的資源處理完成,(在處理過程中,瀏覽器不會發起新的資源請求)等待高的完成后再發起請求,(這就會讓總的頁面下載時間延長)。
在請求優先級高的資源的時間區間內瀏覽器并不會發起優先級較低的新請求
小結:HTTP1.1慢啟動影響資源首次加載速度,TCP建立連接后,會開始請求傳輸,開始比較慢,然后不斷加快,為了防止出現網絡擁堵,會讓頁面的首次渲染時間變長。開始多個tcp,如出現網絡下降,無法識別資源的優先級,會出現競態問題。
數據壓縮,在瀏覽器中發送請求時會帶著Content-Encoding: gzip,里面時瀏覽器支持的壓縮格式列表,有多種如,gzip,deflate,br等。這樣服務器就可以從中選擇一個壓縮算法,放進Content-Encoding響應頭里,再把原數據壓縮后發給瀏覽器。
分塊傳輸,就是將傳輸的文件分解成多個小塊,然后分發給瀏覽器,瀏覽器收到后再重新組裝復原。
每個分開包含兩個部分,分塊長度和分塊數據(長度頭和數據塊),長度頭以CRLF結尾的一行明文,數據塊緊跟在長度頭后面,也是用CRLF結尾,最后用一個長度為0的塊表示結束。
在響應報文里用頭字段Transfer-Encoding:chunked表示報文里的body部分不是一次性發送過來的,而是分成了許多塊逐個發送的。
在Transfer-Encoding:chunked和Content-Length中,這兩個字段是互斥的。
一個響應報文的傳輸長度要么已知,要么長度未知(chunked)。
Content-Length: 299
斷點續傳
要實現該功能需要制定下載的實體范圍,這種制定范圍發送請求叫做范圍請求。
Accept-Ranges:服務器使用http響應頭Accept-Ranges標識自身支持范圍請求,字段的具體值用于定義范圍請求的單位。
語法
Accept-Ranges: bytes,范圍請求的單位是 bytes (字節)
Accept-Ranges: none,不支持任何范圍請求單位
范圍請求時用于不需要全部數據,只需要其中的部分請求時,可以使用范圍請求,允許客戶端在請求頭里使用專用字段來表示只獲取文件的一部分。
Range的格式,請求頭Range是HTTP范圍請求的專用字段,格式是“bytes=x-y”,以字節為單位的數據范圍。
示例:
執行范圍時會使用頭部字段 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
多端數據,就是在Range頭里使用多個“x-y",一次性獲取多個片段數據。使用一種特殊的MIME類型:“multipart/byteranges”,用來表示響應報文包含了多個范圍時使用。多重范圍請求 響應會在頭部 Content-Type 表明 multipart-byteranges。
多段數據圖:分隔標記boundary來區分不同的分段
存儲的大小
cookie的數據大小不能超過4k;sessionStorage和localStorage雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或者更大。
有限期時間
因為CDN緩存更方便;突破瀏覽器并發限制;節約cookie帶寬;節約主域名得連接數,優化頁面響應速度;防止不必要得安全性問題。
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的幀頭 + 可邊長的正文不同。根據幀的類型不同,正文部分的結構也不一樣。
幀頭:
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中的默認資源請求優先級策略。
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消息示例:
IP 的基本思路
Ip地址的表示方法
IP地址的結構-子網掩碼表示網絡號與主機號之間的邊界。
解析器的調用方法
DNS服務器的基本工作
DNS 服務器之間的查詢操作
數據通過類似管道的結構來流動
計算機網絡,可以將規模分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參考模型中負責將從傳輸層到應用層的數據進行轉換和轉發的設備。
代理服務:
第一,我們可以禁止使用iframe,第二,可以禁止使用gif圖片來實現loading效果,降低CPU的消耗,來提升渲染性能,第三,使用CSS3代碼來代替JS動畫。
對于一些小圖標,可以使用base64位編碼,以減少網絡請求,但不建議大圖使用,因為比較耗費CPU,小圖標優勢在于,可以減少HTTP請求,避免文件跨域,修改及時生效。
頁面頭部的style和script會阻塞頁面,在Renderer進程中的JS線程和渲染線程是互斥的。
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用于分組數據較少或者多播,廣播通信以及視頻通信等領域。
應用層
在不同層次的協議?
數據包首部:
以太網包首部:IP包首部,TCP包首部,數據
IP包首部:TCP包首部,數據
TCP包首部:數據
每個分層中,都會對所發送的數據附加一個首部,它包含了該層中必要的信息。(發送的目標地址,協議相關的信息等)
數據包的首部,明確表明了協議應該如何讀取數據。掌握數據包首部,通常,為協議提供的信息為包首部,所要發送的內容為數據。
發送數據包,TCP/IP通信流程:
數據包,經過以太網的數據鏈路時,大致上附加了以太網包首部,IP包首部,TCP包首部或者UDP包,以及應用自己的包首部和數據,最后包追加了包尾。
分層中包的結構
數據包接收流程
在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的概念:(流,消息,幀)
多個幀可以亂序發送,可根據幀首部的標識流進行重新組裝。
對于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隊頭阻塞,丟失的包需要重新傳即可。
補充:
對于QUIC的包都是經過認證的,除了個別,so,這樣,通過加密認證的報文,就可以降低安全風險。
HTTP2-TLS,TCP,IP
小結QUIC特點:(基于UDP)--- http3-QUIC,UDP,IP
UPD面向報文的協議,就是UDP只是報文的搬運工,不會對報文進行任何拆分和拼接操作,在發送端,應用層將數據傳給傳輸層的UDP協議,UDP會給數據加一個UDP頭標識下是UUDP協議,然后傳給網絡層。
接收端,網絡層將數據傳給傳輸層,UDP只去除IP報文頭就傳給應用層,不會任何拼接操作。
UDP是無連接,通信不需要建立和斷開連接,UDP是不可靠的,不關心數據的安全等問題,UDP是沒有擁塞控制,在網絡條件不好的情況下可能會導致丟包。
傳輸:UDP 支持一對一,一對多,多對多,多對一的的傳輸方式, UDP 提供了單播,多播,廣播的功能。
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
表示發送端發送數據到接收到對端數據所需的往返時間
小結
建立連接開始時,兩端都是CLOSED狀態,通信開始前,雙方都會創建 TCB,后進入 LISTEN 狀態,開始等待客戶端發送數據。
第一次握手
客戶端向服務器端發送連接請求報文段,請求發送后,客戶端進入SYN-SENT 狀態。
第二次握手
服務端收到連接請求報文段后,發送完成后便進入 SYN-RECEIVED 狀態。
第三次握手
客戶端收到連接同意的應答后,要向服務端發送一個確認報文。客戶端發完這個報文段后便進入ESTABLISHED 狀態,服務端收到這個應答后也進入 ESTABLISHED狀態,此時連接建立成功。
有人問了,兩次握手就可以建立連接了,為啥要第三次呢?
因為防止失效的連接請求報文段被服務器端接收,從而導致錯誤。
100為繼續,一般發送post請求時,已經發送了http header之后服務端將返回此信息,表示確認,之后發送具體參數信息;201,請求成功并且服務器創建了新的資源;202,服務器已接受請求,但未處理。
301,請求的網頁已經永久移動到新的位置;302,臨時性重定向;303,臨時性重定向,且總是使用GET請求新的URI;304,自從上次請求后,請求的網頁未修改過。
404,服務器無法理解請求;401,請求未授權;403,禁止訪問。
傳輸,為了準確無誤地把數據傳輸給目標,TCP協議采用了三次握手策略,用TCP協議把數據包送出去后,會向對方確認是否成功達到,發送端發送一個帶SYN標志的數據包給到對方,接收端收到后,會回傳一個帶有SYN/ACK標志的數據包表示傳送到達的確認信息,然后發送端也再次回傳一個帶有ACK標志的數據包,表示“握手”結束了。
握手過程中使用的標志:SYN和ACK
斷開一個TCP連接需要四次揮手:
第一次揮手
主動關閉的一方,發送一個FIN(上述講過---當FIN=1,表示此報文段是一個釋放連接的請求報文),傳送數據,用來告訴對方(被動關閉方),說不會再給你發送數據了。---主動關閉的一方可以接受數據。
第二次揮手
被動關閉方 收到 FIN 包,發送 ACK 給對方,確認序號。
第三次揮手
被動關閉方 發送一個 FIN,關閉方,說我不會再給你發數據了。(你不給我發送數據,我也不給你發送數據了)
第四次揮手
主動關閉一方收到 FIN ,發送要給 ACK ,用來確認序號
其實HTTP協議時承載于TCP協議之上的,再HTTP和TCP之間添加一個安全協議層,SSL或者TSL(ssl/tls協議傳輸,包含證書,卸載,流量轉發,負載均衡,頁面適配,瀏覽器適配,refer傳遞等),則就是常說的HTTPS。
HTTP報文的組成部分包含:請求報文和響應報文
請求報文:有請求行,請求頭, 空行,請求體
響應報文:有狀態行,響應頭,空行,響應體
請求報文包含:
1.請求方法,2.請求URL,3.HTTP協議以及版本,4.報文頭,5.報文體
響應報文包含:
1.報文協議以及版本,2,狀態碼以及狀態描述,3,響應頭,4,響應體
在http1.0中,客戶端每隔很短時間會對服務器發出請求,查看是否有新的數據,只要輪詢足夠快,就可以造成交互實時進行,但這個做法,會對兩端造成大量的性能浪費。
對于http1.1中的長連接,使用connection:keep-alive進行長連接,客戶端只請求一次,但是服務器會將繼續保持連接,再次請求時,避免了重新建立連接。
注意,keep-alive不會永久保持連接,只有保持一個時間段。
CSRF的基本概念,攻擊原理,防御措施
CSRF(Cross-site request forgery):跨站請求偽造
理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。
以你名義發送郵件,發消息,盜取你的賬號,甚至于購買商品,虛擬貨幣轉賬……造成的問題包括:個人隱私泄露以及財產安全。
CSRF的原理:(要完成一次CSRF攻擊)
XSS的基本概念,跨域腳本攻擊。
xss是一種發生在web前端的漏洞,所以其危害的對象也主要是前端用戶。
跨域腳本攻擊是,惡意攻擊者往web頁面里插入惡意的script代碼,在瀏覽器中運行script代碼,達到惡意攻擊用戶的目的。
so,實現xss攻擊具備2個條件,第一需要向web頁面注入惡意的代碼,第二,這些惡意代碼被瀏覽器成功的執行。
CSRF和XSS的區別:
一個HTTP請求的分層解析流程:
TCP,它是面向連接的,可靠的,基于字節流的傳輸層通信協議。
特點:
TCP連接,源地址,源端口,目的地址,目的端口
從TCP-IP協議底層
滑動窗口協議與累計確認(延時ACK)
滑動窗口大小同通過tcp三次握手和對端協商,且受網絡狀況影響
什么是HTTPS協議,由于HTTP天生“明文”的特點,整個傳輸過程完全透明,任何人都能夠在鏈路中截獲,修改或者偽造請求、響應報文,數據不具有可信性。
使用HTTPS時,所有的HTTP請求和響應發送到網絡前,都要進行加密。
https=http + ssl/tls
對稱加密:加密 解密使用同一密鑰
非對稱加密:公鑰-隨意分發,私鑰-服務器自己保持
公鑰加密的數據,只能通過私鑰解密
私鑰加密的數據,只能公鑰能解密
加密算法:
對稱密鑰加密算法,編,解碼使用相同密鑰的算法
非對稱密鑰加密算法,一個公鑰,一個私鑰,兩個密鑰是不同的,公鑰可以公開給如何人使用,私鑰是嚴格保密的。
加密通道的建立:
數字證書的申請和驗證
如何申請:
HTTPS ,超文本傳輸安全協議,目標是安全的HTTP通道,應用是安全數據傳輸。HTTP協議雖然使用廣,但是存在不小的安全缺陷,主要是數據的明文傳送和消息完整性檢測的缺乏。
HTTPS協議是由HTTP加上TLS/SSL協議構建的可進行加密傳輸,身份認證的網絡協議。
通過, 數字證書,加密算法,非對稱密鑰 等技術完成互聯網數據傳輸加密,實現互聯網傳輸安全保護。
HTTPS主要特性:
客戶端和服務器端在傳輸數據之前,會通過基于證書對雙方進行身份認證。客戶端發起SSL握手消息給服務端要求連接,服務端將證書發送給客戶端。客戶端檢查服務器端證書,確認是否由自己信任的證書簽發機構簽發,如果不是,將是否繼續通訊的決定權交給用戶選擇,如果檢查無誤或者用戶選擇繼續,則客戶端認可服務端的身份。
服務端要求客戶端發送證書,并檢查是否通過驗證,失敗則關閉連接,認證成功,從客戶端證書中獲得客戶端的公鑰。
HTTP原理
客戶端的瀏覽器首先要通過網絡與服務器建立連接,該連接時通過TCP來完成的,一般TCP連接的端口號是80,建立連接后,客戶端發送一個請求給服務器端;服務器端接收到請求后,給予相應的響應信息。
HTTPS原理
客戶端將它所支持的算法列表和一個用作產生密鑰的隨機數發送給服務器,服務器從算法列表中選擇一種加密算法,并將它和一份包含服務器公用密鑰的證書發送給客戶端,該證書還包含了用于認證目的的服務器標識,服務器同時還提供了一個用作產生密鑰的隨機數。
客戶端對服務器的證書進行驗證,并抽取服務器的公用密鑰,再產生一個稱作pre_master_secret的隨機密碼串,并使用服務器的公用密鑰對其進行加密,并將加密后的信息發送給服務器。
客戶端與服務器端根據pre_master_secret以及客戶端與服務器的隨機數獨立計算出加密和MAC密鑰。
混合加密
在傳輸數據中使用對稱加密,但對稱加密的密鑰采用非對稱加密來傳輸,混合加密比較安全,但無法知道數據是否被篡改
CA認證
CA認證, 即是電子認證服務,指電子簽名相關各方提供真實性,可靠性驗證的活動。
特性:參閱百度百科—簡介,點擊進入
http傳輸方式:明文傳輸,網站或相關服務與用戶之間的數據交互無加密,容易被監聽,篡改。
https傳輸方式:在HTTP加入了SSL層,用于數據傳輸加密。
http身份認證:無任何身份認證,用戶無法通過http辨認出網站的真實身份。
https身份認證:經過CA多重認證,包含域名管理權限認證等。
http成本:無任何使用成本,所有網站默認是http模式。
https需要成本,需要申請SSL證書來實現https。
http連接端口:80端口。
https連接端口:443端口。
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 的多路復用解決了隊頭阻塞問題
擁塞控制:
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允許服務器未經請求,主動向客戶端發送資源(服務器推送)
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都會被發送到服務端。
token的出現,是在客戶端頻繁向服務端請求數據,服務端頻繁的去數據庫查詢用戶名和密碼并進行對比,判斷用戶名和密碼正確與否,并作出相應提示。token是服務端生成的一串字符串,以作客戶端進行請求的一個令牌,第一登錄時,服務器生成一個token,將此token返回給客戶端,客戶端帶上這個token,無需再次帶上用戶名和密碼了。
token的出現減輕了服務器的壓力,減少頻繁地數據庫查詢。
token的優點
基于Token的身份驗證的過程
瀏覽器,輸入userName, Password,到mysql,校驗成功 生成token,將token返回給客戶端,當客戶端發起請求時,每次訪問api都攜帶token到服務器端,經過過濾器,校驗token,校驗成功后返回請求數據,校驗失敗后返回錯誤碼。
cookie,記錄訪問過的網站或正在訪問的網站,對于HTTP 協議是無狀態的,服務器不知道瀏覽器上一次訪問做了什么,也無法對用戶會話進行跟蹤連接,所以,cookie是由服務器發送到客戶端瀏覽器的一段文本文件,包含了網站訪問活動信息。Cookie 存放在客戶端,用來保存客戶端會話信息;由于存儲在客戶端,它的安全性不能完全保證。
session表示是c/s架構中服務器和客戶端一次會話的過程,用來保存認證用戶信息。session是一種HTTP存儲機制,提供持久機制。Session存放在服務器端,用戶驗證客戶端信息。由于存儲在服務器,安全性有一定的保證。
token是一種認證方式(是“令牌”的意思,主要是用于身份的驗證方式。)
網頁的URL的協議、域名、端口有一個不同,就算是跨域了
跨域:JSONP
46.思維導圖http小結
對于 TCP 而言
起始行 + 頭部 + 空行 + 實體
GET /home HTTP/1.1
HTTP/1.1 200 OK
空行是用來分開頭部和實體。
URL統一資源定位符,URI,統一資源標識符。URI用于區分網絡上不同的資源。
URI包含了URN和URL。
URL的結構:
協議名,登錄主機的用戶信息,主機名和端口,請求路徑,查詢參數,URI上定位資源內的一個錨點。
了解一些特定的HTTP狀態碼:
特點是:
缺點是:
TCP中是報文,HTTP是請求。
對于解決HTTP的隊頭阻塞問題是:并發連接和域名分片。
代理服務器功能:1,負載均衡,2,保障安全(利用心跳機制監控服務器,一旦發現故障機就將其踢出集群。),3,緩存代理。
理解代理緩存:
緩存的作用:
代理服務器或客戶端本地磁盤內保存的資源副本,利用緩存可減少對源服務器的訪問,可以節省通信流量和通信時間。
示例:
Cache-Control: max-age=300;
表示時間間隔,再次請求的時間間隔300s內,就在緩存中獲取,否則就在服務器中
Cache-Control:
強緩存:瀏覽器直接從本地存儲中獲取數據,不與服務器進行交互
協商緩存:瀏覽器發送請求到服務器,瀏覽器判斷是否可使用本地緩存
學習了解強緩存:
強緩存主要學習expires和cache-control
cache-control該字段:max-age,s-maxage,public,private,no-cache,no-store。
cache-control: public, max-age=3600, s-maxage=3600
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%的高壓縮率。
服務器推送
瀏覽器-服務器結構,B/S結構,客戶端不需要安裝專門的軟件,只需要瀏覽器即可,瀏覽器通過web服務器與數據庫進行交互,可以方便的在不同平臺下工作。
B/S結構簡化了客戶端的工作,它是隨著Internet技術興起而產生的,對C/S技術的改進,但該結構下服務器端的工作較重,對服務器的性能要求更高。
統一資源標識符是一個用于標識某一互聯網資源名稱的字符串。該標識允許用戶對網絡中的資源通過特定的協議進行交互操作。URI常見形式為統一資源定位符(URL),URN為統一資源名稱。用于在特定的命令空間資源的標識,以補充網址。
HTTP超文本傳輸協議是互聯網上應用最為廣泛的一種網絡協議。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源標識符來標識
HTTP 協議主要特點
數據鏈路層:以太網,無線LAN,PPP。。。(無線,光纖。。。)
數據鏈路是讓互聯網計算機之間相互通信的一種協議,通信手段
TCP是一個面向連接,可靠,基于字節流的傳輸層協議。
UDP是一個面向無連接的傳輸層協議。
TCP是面向連接的,客戶端和服務器端的連接,雙方互相通信之前,TCP需要三次握手建立連接,而UDP沒有建立連接的過程
tcp是面向字節流,udp是面向報文的。UDP的數據傳輸是基于數據報的,TCP繼承了IP層的特性,TCP為了維護狀態,將一個個IP包變成了字節流。
TCP報文格式圖:
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不需要。
對于連接四次握手多余,二次握手,會帶來資源的浪費,當遇到丟包,重傳,連接關閉后,丟包到達服務端,就默認建立連接,可客戶端以及關閉,所以三次握手就可以了。
TCP 四次揮手的過程
三次揮手,當服務器將ack和fin合并為一次揮手,會導致長時間的延遲,以至于客戶端誤認為fin沒有到達客戶端,讓客戶端不斷重發fin。
TCP 滑動窗口:
TCP連接,擁塞控制:
了解TCP/IP協議四層
DNS是域名解析系統,它的作用非常簡單,就是根據域名查出對應的IP地址。