1. ajax 跨域問題
2. xss 琉兜,csrf 等前端安全問題陨溅,原理是什么,如何防范
3. 如何去理解javascript的異步概念
4. promise饲鄙,async凄诞,await,你用過哪些忍级,可以跟我說說使用場景帆谍、技巧等,如果瀏覽器不支持的情況下轴咱,怎么辦
5. 多人協(xié)作的情況下汛蝙,如何保證代碼規(guī)范和如何快速安全整合代碼
6. 頁面優(yōu)化手段有哪些,盡量提出10種以上
7. 描述一下瀏覽器緩存的原理朴肺,和緩存過程
/**
* 1窖剑、瀏覽器對(duì)于javascript的同源策略的限制,
* 同源指的是:相同域名,端口相同,協(xié)議相同,
* 只要有一個(gè)條件不符合就屬于跨域請(qǐng)求戈稿。
*
* 2西土、
* 1) XSS攻擊(Cross-Site Scripting)跨站腳本攻擊。
* 能注入惡意的HTML/JavaScript代碼到用戶瀏覽的網(wǎng)頁上器瘪,從而達(dá)到Cookie資料竊取翠储、會(huì)話劫持、釣魚欺騙等攻擊橡疼。<攻擊代碼不一定(非要)在 script標(biāo)簽 中>
* 防范:
* a:HttpOnly? ? 瀏覽器禁止頁面的JS訪問帶有HttpOnly屬性的Cookie援所。
* b: 對(duì)于用戶輸入操作,需要做格式及內(nèi)容檢查
* c:輸出檢查? ? 在變量輸出到html頁面時(shí)欣除,可以使用編碼或轉(zhuǎn)義的方式來防御XSS攻擊
* d: 對(duì)于需要輸出script標(biāo)簽或者HTML標(biāo)簽或style標(biāo)簽住拭,我們可以通過js先進(jìn)行轉(zhuǎn)碼再渲染到頁面。
*
* 2) CSRF攻擊跨站請(qǐng)求偽造(通常偽造一個(gè)正常的http請(qǐng)求)历帚。
* 本質(zhì):重要操作的所有參數(shù)都是可以被攻擊者猜測到的滔岳。攻擊者預(yù)測出URL的所有參數(shù)與參數(shù)值,才能成功地構(gòu)造一個(gè)偽造的請(qǐng)求挽牢。
* 防范:
* a:? 驗(yàn)證碼谱煤、? Referer Check 檢查請(qǐng)求是否來自合法的源(可被偽造)。
* b: Token使用Anti-CSRF Token在URL中保持原參數(shù)不變禽拔,新增一個(gè)參數(shù)Token刘离。Token的值是隨機(jī)的(必須使用足夠安全的隨機(jī)數(shù)生成算法,或者采用真隨機(jī)數(shù)生成器)睹栖,其為用戶與服務(wù)器所共同持有硫惕,可以放在用戶的Session中,或者瀏覽器的Cookie中野来。 注意保密恼除,盡量把Token放在表單中(構(gòu)造一個(gè)隱藏的input元素),以POST提交曼氛,避免Token泄露豁辉。
*
* 3令野、異步加載也叫非阻塞模式加載,瀏覽器在下載js的同時(shí),還會(huì)執(zhí)行后續(xù)的頁面處理.
*
* 4、用過promise秋忙,Promise 是異步編程的一種解決方案彩掐,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。
* 使用場景:通常我們需要異步請(qǐng)求數(shù)據(jù)的時(shí)候灰追,為了避免傳統(tǒng)的ajax請(qǐng)求回調(diào)地獄,可以使用promise狗超。
* 用過async await:這兩方法通常是配合使用的弹澎,你可以理解為他們是promise的加強(qiáng)版
* 因此使用場景相似。
*
* 5努咐、多人協(xié)作苦蒿,對(duì)于代碼規(guī)范我們可以先規(guī)定一套規(guī)范,所有成員都必須按照這套規(guī)范來書寫代碼渗稍,
* 對(duì)于協(xié)作方面佩迟,我們可以借助第三方工具,比如git或者svn -->一個(gè)代碼版本管理工具竿屹,
* 只要我們使用這些工具报强,就能快速的進(jìn)行代碼的整合。
*
* 6拱燃、
* a: 優(yōu)化圖像
* b: 去掉不必要的插件
* c: 減少DNS查詢(DNS lookups)
* d: 把CSS文件放在頁面頂部秉溉,而JS文件放在底部
* c: 利用瀏覽器緩存
* e: 使用 CSS Sprites 整合圖像(即可以適當(dāng)使用精靈圖)
* f: 壓縮CSS和JavaScript
* g: 啟用GZIP壓縮,在服務(wù)器上壓縮網(wǎng)站的頁面
* h: 代碼層面的優(yōu)化
*? ? 1) 少用全局變量
*? ? 2) 用 innerHTML 代替 DOM 操作,減少 DOM 操作次數(shù)碗誉,優(yōu)化 javascript 性能
*? ? 3) 緩存DOM節(jié)點(diǎn)查找的結(jié)果
*? ? 4) 避免全局查詢
*? ? 5) 避免使用with(with會(huì)創(chuàng)建自己的作用域召嘶,會(huì)增加作用域鏈長度)
*? ? 6) 避免圖片和iFrame等的空Src∠保空Src會(huì)重新加載當(dāng)前頁面弄跌,影響速度和效率
*? ? 7) 盡量避免寫在HTML標(biāo)簽中寫Style屬性
*
* 7、瀏覽器與服務(wù)器通信的方式為應(yīng)答模式尝苇,即是:瀏覽器發(fā)起HTTP請(qǐng)求 – 服務(wù)器響應(yīng)該請(qǐng)求铛只。那么瀏覽器第一次向服務(wù)器發(fā)起該請(qǐng)求后拿到請(qǐng)求結(jié)果,會(huì)根據(jù)響應(yīng)報(bào)文中HTTP頭的緩存標(biāo)識(shí)茎匠,決定是否緩存結(jié)果格仲,是則將請(qǐng)求結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存中,簡單的過程如下圖:
* 即:
* 瀏覽器每次發(fā)起請(qǐng)求诵冒,都會(huì)先在瀏覽器緩存中查找該請(qǐng)求的結(jié)果以及緩存標(biāo)識(shí)
* 瀏覽器每次拿到返回的請(qǐng)求結(jié)果都會(huì)將該結(jié)果和緩存標(biāo)識(shí)存入瀏覽器緩存中
*
* */