1. 程式人生 > >前端面試題總結 HTTP\瀏覽器篇 (一)

前端面試題總結 HTTP\瀏覽器篇 (一)

cookie和session的機制是什麼?有什麼區別?

會話(Session)跟蹤是Web程式中常用的技術,用來跟蹤使用者的整個會話,它可以彌補http協議無狀態的不足。常用的會話跟蹤技術是cookie與session。cookie通過在客戶端記錄資訊確定使用者身份,session通過在伺服器端記錄資訊確定使用者身份。

cookie有什麼作用?

cookie可以解決http的無狀態的問題,與伺服器進行互動,作為http規範存在。它具有極高的簡便性、可擴充套件性和可用性,也可以通過加密和SSL技術來提高其安全性。因此推薦使用cookie作為標識而不是身份驗證的工具。

cookie的缺點

(1) 大小和數目受限制。瀏覽器對一個域cookie的條目數有上限要求,且每個cookie的大小不得超過4kb。

(2)存在安全性問題,易被人攔截。

(3)需要指定域,不可以跨域

(4)浪費頻寬,因為我每次請求一個新的頁面,cookie都會被自動傳送過去。

(5)有的移動端瀏覽器不支援cookie或瀏覽器禁用cookie

(6)有些狀態不可能儲存在客戶端。例如,為了防止重複提交表單,我們需要在伺服器端儲存一個計數器。如果我們把這個計數器儲存在客戶端,那麼它起不到任何作用。

如何刪除cookie

在伺服器端,以java為例,可以將同名cookie的maxAge屬性置0;在客戶端,可以將expires屬性設定為過去的一個時間。即:
document.cookie = ‘name=’+cookie_name+’;expires=’+ passed_date

什麼是重排和重繪?什麼時候會發生重繪?如何避免重繪?

重繪是指的螢幕的一部分要重新繪製,比如元素的背景色發生了改變,但幾何尺寸未發生改變。重排意味著元素的幾何尺寸發生了改變,需要重新計算生成渲染樹。

下面幾種情況會發生重排:

(1)resize視窗時

(2)修改網頁預設字型時

(3)修改CSS樣式改變尺寸時

(4)JS操作dom樹

(5)一些影響佈局的動畫

(6)使用JS指令碼獲得一些佈局屬性時,比如offsetTop

相應的,可以採取以下方法來減少重排:

(1)不要一條條的修改DOM樣式,改變className來“統一修改”(注:現代瀏覽器會進行增量非同步reflow,即“攢夠”一些修改後再統一修改)

(2)把dom離線修改,比如將其至於記憶體或設定display:none。

(3)為html動畫原件使用position:absolute佈局或fixed佈局,這樣不會引起重排和重繪。

(4)不要使用table佈局,因為稍加改動就會導致table的重新佈局。

(5)將offsetTop等屬性快取成區域性變數。

瀏覽器是如何渲染頁面的?

首先,瀏覽器會解析html\xhtml\svg,生成一個dom樹,解析css檔案生成css規則樹,解析javascript以獲得其對html和css的影響。解析完成後,瀏覽器會根據dom樹和css規則樹來生成渲染樹。渲染樹不包括像header元素這樣頁面中不會出現的元素。之後,會進行layout,定義元素的座標。最後通過呼叫系統Native GUI的API繪製。

網頁中如何優化影象

網頁中優化圖片的方式有:

(1)去掉沒有意義的修飾

(2)使用CSS和向量圖代替點陣圖

(3)惰性載入圖片,使得圖片可見後再進行載入

(4)使用CSS Sprites,將多張小圖拼成一張大圖

png和jpg格式的區別:

png屬於無失真壓縮,而jpg則是有失真壓縮,這意味著一張圖片多次使用jpg格式壓縮的話會逐漸失真。png格式的圖片儲存空間明顯大於jpg格式的圖片

常見的Web攻擊有哪些?

(1)跨站指令碼攻擊(XSS)

(2)分散式拒絕服務(DDOS)

基本方法是利用合理的請求佔用伺服器的大量資源,使正常使用者無法得到伺服器的相應。

(3)跨站請求偽造攻擊(CSRF)

攻擊者通過各種方法偽造一個請求,模仿使用者提交表單的行為,從而達到修改使用者的資料,或者執行特定任務的目的。解決方法是儘量使用post請求。

(4)sql注入

攻擊主要針對後臺使用sql拼接方式查詢的情況,攻擊者注入類似or 1 = 1的sql語句,致使表內的全部資訊洩露。

post請求和get請求的區別

(1) get請求一般用來獲得資料,而post請求一般用來發送資料。人們期望,get請求不會對伺服器造成任何影響,而post請求則可能會影響伺服器端的資料。get請求消耗的資源較post請求而言,會少一些,但相對安全性較差。傳送同樣大小的資料,get請求的效率最高可以達到post請求的2倍。

(2)一般按照約定,使用get請求時,將資料通過url進行傳遞,而是用post請求時,將資料放在body裡。但這並非硬性規定,因為method和data本身是正交的。post請求亦可將資料放在url中。

(3)就協議底層實現而言,在get請求中,只產生一個TCP資料包,瀏覽器會將header和data一併傳送出去,等待伺服器的迴應;而在post請求中,會產生2個TCP資料包。,瀏覽器先發送header,伺服器響應100 continue,瀏覽器再發送data。

站內跳轉和外部重定向有何區別

(1)直觀而言,站內跳轉不會改變url,而外部重定向會改變url。

(2)重定向可以跳轉到web應用以外的頁面,而站內跳轉則不行。

(3)站內跳轉可以通過request傳遞資料,而重定向不可傳遞資料。