瀏覽器緩存分爲強緩存和協商緩存。當客戶端請求某個資源時,獲取緩存的流程以下: 先根據這個資源的一些 http header 判斷它是否命中強緩存, 若是命中,則直接從本地獲取緩存資源,不會發請求到服務器; 當強緩存沒有命中時,客戶端會發送請求到服務器, 服務器經過另外一些request header驗證這個資源是否命中協商緩存,稱爲http再驗證, 若是命中,服務器將請求返回,但不返回資源, 而是告訴客戶端直接從緩存中獲取,客戶端收到返回後就會從緩存中獲取資源; 強緩存和協商緩存共同之處在於, 若是命中緩存,服務器都不會返回資源; 區別是,強緩存不對發送請求到服務器,但協商緩存會。 當協商緩存也沒命中時,服務器就會將資源發送回客戶端。 當 ctrl+f5 強制刷新網頁時,直接從服務器加載,跳過強緩存和協商緩存; 當 f5 刷新網頁時,跳過強緩存,可是會檢查協商緩存;
(1)while循環的方式 function sleep(ms){ var start=Date.now(),expire=start+ms; while(Date.now()<expire); console.log('1111'); return; } 執行sleep(1000)以後,休眠了1000ms以後輸出了1111。上述循環的方式缺點很明顯,容易形成死循環。 (2)經過promise來實現 function sleep(ms){ var temple=new Promise( (resolve)=>{ console.log(111);setTimeout(resolve,ms) }); return temple } sleep(500).then(function(){ //console.log(222) }) //先輸出了111,延遲500ms後輸出222 (3)經過async封裝 function sleep(ms){ return new Promise((resolve)=>setTimeout(resolve,ms)); } async function test(){ var temple=await sleep(1000); console.log(1111) return temple } test(); //延遲1000ms輸出了1111 (4).經過generate來實現 function* sleep(ms){ yield new Promise(function(resolve,reject){ console.log(111); setTimeout(resolve,ms); }) } sleep(500).next().value.then(function(){console.log(2222)})
http: 超文本傳輸協議,是互聯網上應用最爲普遍的一種網絡協議,
是一個客戶端和服務器端請求和應答的標準(TCP),
用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,
它可使瀏覽器更加高效,使網絡傳輸減小。
https: 是以安全爲目標的HTTP通道,簡單講是HTTP的安全版,
即HTTP下加入SSL層,HTTPS的安全基礎是SSL,
所以加密的詳細內容就須要SSL。
https協議的主要做用是:
創建一個信息安全通道,來確保數組的傳輸,確保網站的真實性。
http傳輸的數據都是未加密的,也就是明文的,
網景公司設置了SSL協議來對http協議傳輸的數據進行加密處理,
簡單來講https協議是由http和ssl協議構建的可進行加密傳輸和身份認證的網絡協議,
比http協議的安全性更高。
主要的區別以下:
Https協議須要ca證書,費用較高。
http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。
使用不一樣的連接方式,端口也不一樣,通常而言,http協議的端口爲80,https的端口爲443
http的鏈接很簡單,是無狀態的;
HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
客戶端在使用HTTPS方式與Web服務器通訊時有如下幾個步驟:
客戶使用https url訪問服務器,則要求web 服務器創建ssl連接。
web服務器接收到客戶端的請求以後,會將網站的證書(證書中包含了公鑰),
返回或者說傳輸給客戶端。
客戶端和web服務器端開始協商SSL連接的安全等級,也就是加密等級。
客戶端瀏覽器經過雙方協商一致的安全等級,創建會話密鑰,
而後經過網站的公鑰來加密會話密鑰,並傳送給網站。
web服務器經過本身的私鑰解密出會話密鑰。
web服務器經過會話密鑰加密與客戶端之間的通訊。