當同步任務執行完畢後,先去等待任務隊列中的全部的微任務找出來,挨個執行,當微任務執行完畢,再把全部的宏任務執行;前端
微任務
- Promise 的 then
- async 函數中 await 後面的代碼;
- process.nextTick
宏任務
定時器 setInterval 和 setTimeout
複製代碼
async 和 await ES6新增關鍵字 將異步程序轉爲同步
- async 在函數定義時使用,用 async 函數聲明的函數默認返回一個 promise 實例,返回值能夠直接 .then
- await 右邊若是是 Promise 就等着 Promise 狀態發生變動,若是是同步代碼直接執行;若是 await 執行的方法返回的 promise 對象,咱們能夠直接在對象使用 then 方法;此外,await 下面的代碼都會變成微任務
cookie 是 http 協議的一部分,不屬於客戶端也不屬於服務端;
- cookie 存儲在客戶端 可是服務端和客戶端均可以操做cookie
- cookie 用於記錄用戶的信息,而且在每次請求服務器的時候都會自動帶上 cookie 的信息;等服務器接收到請求就能夠從 cookie 獲取到用戶的信息,從這些信息中獲知用戶是否登陸;
js操做 cookie
- 獲取 cookie document.cookie
- 設置 cookie document.cookie = 'key = value'
- 設置 cookie 是=時須要注意
- cookie 是個字符串,而且值要寫成 'key=value;'的形式;
- cookie 設置能夠同名,後面的並不會覆蓋前面的
cookie 屬性
- domain 當前能夠訪問 cookie 的域
- path 能夠訪問當前 cookie 的路徑,通常設置爲 / 表示根目錄; 這個路徑的子級能夠訪問上面的,可是高層級的路徑不能訪問低層級的 cookie;例如 path 設置爲/a ,/a/b 可使用/a的 cookie;可是若是設置爲 /a/b,/a就不能使用 /a/b 的 cookie;
- expires: cookie 的過時時間,cookie 都是有時效的,是個 GMT 時間,若是超過這個時間,cookie 失效,瀏覽器會刪除它;(這也是刪除 cookie 的原理,將 cookie 的過時時間設置爲一個過去的時間,通常設置爲 1970 年)
- maxAge cookie 有效期,和 expires 不一樣,這個是一個以毫秒爲單位的絕對時間,如 1000ms 或者 5000ms;(這個東西只能服務端設置)
- http-only: 表示該屬性只能由 http 使用,不容許客戶端經過 js 代碼操做;
session 服務端技術 會話控制
和 cookie 不一樣,session 是保存在服務器上的,並且並不會隨着 http 傳遞;由於 cookie 保存在客戶端,仍是很不安全的,服務器爲了杜絕這種事情,在服務器上也搞了一個存儲用戶信息的東西,這就是 session。通常用於用戶的登陸狀態,用戶 id 等敏感信息的保存; cookie 中保存着 session 的 id,在 http 請求中會帶着 cookie 請求,服務器從 cookie 中獲取 session 的 idpromise
1. 以登陸爲例,當咱們登陸後,服務端會在 cookie 中設置當前用戶的登陸狀態爲已經登陸,
2. 同時在服務器上生成一份 session 文件,session 中存儲用戶 id,登陸狀態的有效期限等;這個 session 文件有一個 id,生成 session 文件後,服務器還會把 session-id 寫進 cookie。而後返回給客戶端,此時用戶的客戶端收到的 cookie 中包含登陸狀態和 session-id;
3. 等下一次再去請求時,http 協議會自動帶着全部的 cookie 去請求;等服務器收到請求後,從 cookie 中把用戶信息拿出來,而後再根據 session-id 把 session 讀取出來,再從 session 中查詢登陸狀態,若是登陸狀態有效,就繼續正常的響應,不然就返回登陸失效的狀態,要求用戶登陸;
複製代碼
token 令牌 身份校驗機制 是一個字符串,這個字符串通常是加密過的,通常包含了用戶 id,登陸的時間戳,以及 sign (簽名,生成 token 的前幾位進行加密的結果,能夠防止 token 被篡改,一旦篡改了後面這一段和前面的對不上了);
- 通常在用戶登陸時,客戶端把用戶的用戶名和密碼傳遞給服務器,服務端進行校驗,若是沒有問題,就會生成一個 token;
- 生成 token 後,服務器把 token 返回給前端,而後前端下次請求的時候須要帶上這個 token,而後服務端在接收到請求後會首先校驗這個 token 是否有效,若是有效繼續受理請求,若是無效則直接拒絕;
使用token的方式
- 服務端也能夠直接把 token 寫進 cookie 中,下次客戶端發起請求時會自動帶上;
- 服務端也能夠做爲數據返給前端,可是前端此時須要手動的保存 這個 token,能夠保存在 localStorage 中,下次發請求時從 ls 中取出做爲參數傳給服務器便可
- 服務端返回 token 後,客戶端能夠把這個 token 寫進請求頭中,而後服務端每次從請求頭中獲取; 具體使用哪種,須要和服務端商定;