這是面試過程中一道高頻考題。
從面試官的角度思考:
基本回答:
如果應聘者只回答了上述步驟,很多關鍵步驟(前端應該了解的知識點)沒有提及,很有可能達不到面試官想要的回答效果。
筆者針對一些關鍵步驟,具體展開說明。讓這道題成為我們面試考卷中的加分項。
瀏覽器會構建請求行:
// 請求方法是 GET,路徑為根路徑,HTTP 協議版本為 1.1
GET / HTTP/1.1
復制代碼
然后根據 Cache-control 和 Expires 字段,檢查強緩存,如果命中直接使用,否則進入下一步。關于強緩存,如果不清楚可以參考下圖:
由于我們輸入的是域名,而數據包是通過 IP 地址傳給對方的。因此我們需要得到域名對應的 IP 地址。這個過程需要依賴一個服務系統,這個系統將域名和 IP 一一映射,我們將這個系統就叫做 DNS (域名系統)。
DNS 協議提供通過域名查找 IP 地址,或逆向從 IP 地址反查域名的服務。得到具體 IP 的過程就是 DNS 解析。
DNS 是一個網絡服務器,我們的域名解析簡單來說就是在 DNS 上記錄一條信息記錄。
例如 baidu.com 220.114.23.56(服務器外網IP地址)80(服務器端口號)
復制代碼
瀏覽器通過域名去查詢 URL 對應的 IP :
TCP 三次握手的過程如下:
謝希仁著《計算機網絡》中講“三次握手”的目的是“為了防止已失效的連接請求報文段突然又傳送到了服務端,因而產生錯誤”。
現在 TCP 連接建立完畢,瀏覽器可以和服務器開始通信,即開始發送 HTTP 請求。瀏覽器發 HTTP 請求要攜帶三樣東西:請求行、請求頭和請求體。
1.請求行包含請求方法、URL、協議版本
POST /user.html HTTP/1.1
復制代碼
2.請求頭包含請求的附加信息,由關鍵字/值對組成,如下
// 服務器可以接受的文件格式
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng;q=0.8,application/signed-exchange;v=b3
// 指定瀏覽器可以支持的 Web 服務器返回的內容壓縮編碼類型
Accept-Encoding: gzip, deflate, br
// 瀏覽器支持的語言
Accept-Language: zh-CN,zh;q=0.9
// 緩存機制
Cache-Control: no-cache
// 是否需要持久連接
Connection: keep-alive
// 發送該請求域名下所有 Cookie 值到服務器
Cookie: /* 省略cookie信息 */
// 指定請求的服務器的域名和端口號
Host: www.baidu.com
Pragma: no-cache
Upgrade-Insecure-Requests: 1
// 用戶代理 UA,包含發出請求的用戶信息
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
復制代碼
3.請求體,可以承載多個請求參數的數據,包含回車符、換行符和請求數據,一般在 POST 方法下存在。
跟請求部分類似,網絡響應具有三個部分:響應行、響應頭和響應體。
1.響應行包含:協議版本,狀態碼,狀態碼描述
HTTP/1.1 200 OK
復制代碼
狀態碼規則如下:
2.響應頭部包含響應報文的附加信息,由 名/值 對組成,如下:
// 緩存機制
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
// 表示具體請求中的媒體類型信息,決定瀏覽器將以什么形式、什么編碼讀取這個文件
Content-Type: text/html;charset=utf-8
// 原始服務器消息發出的時間
Date: Wed, 04 Dec 2019 12:29:13 GMT
// Web 服務器軟件名稱
Server: apache
// 由服務器端向客戶端發送 cookie
Set-Cookie: rsv_i=f9a0SIItKqzv7kqgAAgphbGyRts3RwTg%2FLyU3Y5Eh5LwyfOOrAsvdezbay0QqkDqFZ0DfQXby4wXKT8Au8O7ZT9UuMsBq2k; path=/; domain=.baidu.com復制代碼
這里注意下 Set-Cookie 中關于網絡安全方面的兩個值:HttpOnly、SameSite
設置了 HttpOnly 屬性的 cookie 不能使用 JavaScript 經由 Document.cookie 屬性、XMLHttpRequest 和 Request APIs 進行訪問,以防范跨站腳本攻擊(XSS)。
SameSite=Lax 允許服務器設定一則 cookie 不隨著跨域請求一起發送,這樣可以在一定程度上防范跨站請求偽造攻擊(CSRF)。
3.響應主體包含回車符、換行符和響應返回數據,并不是所有響應報文都有響應數據
響應完成之后要判斷 Connection 字段,如果請求頭或響應頭中包含 Connection: Keep-Alive ,表示建立了持久連接,這樣 TCP 連接會一直保持,之后請求統一站點的資源會復用這個連接。 否則斷開 TCP 連接, 請求-響應流程結束。
總結瀏覽器端的網絡請求過程:
瀏覽器解析渲染頁面分為以下五個步驟:
回流時,以上流程會重新走一遍。重繪時,會重新計算樣式,跳過中間步驟直接生成繪制列表。可見,重繪不一定導致回流,但回流一定發生了重繪。
CSS 樣式來源一般為三種:
瀏覽器無法直接識別 CSS 樣式文本,這里渲染引擎接收到 CSS 文本之后將其轉化為一個結構化的對象,即 styleSheets 。
可以在瀏覽器控制臺輸入 document.styleSheets 來查看這個最終結構(包含上述三種 CSS 來源)。
有一些渲染引擎不容易直接理解的 CSS 樣式數值,需要在計算樣式之前將它們標準化。如:em -> px,red -> #ff0000,bold -> 700 等等。
計算具體樣式主要遵循兩個規則:繼承和層疊
計算完樣式之后,所有樣式值會被掛載到 window.getComputedStyle 中,也就是可以通過 JS 獲取計算后的樣式。
布局樹生成主要分兩部:
布局樹只包含可見元素,對于 head 標簽和設置了 display: none 的元素將不會被放入其中。
如果想了解布局的細節,可以讀一讀人人 FED 團隊的文章從Chrome源碼看瀏覽器如何layout布局。
這里分兩種情況,一種是顯式合成,一種是隱式合成。
一、擁有層疊上下文的節點
層疊上下文也基本上是有一些特定的 CSS 屬性創建的,一般有以下情況:
二、需要剪裁的地方
比如一個 div,你只給他設置 100 * 100 像素的大小,而你在里面放了非常多的文字,那么超出的文字部分就需要被剪裁。當然如果出現了滾動條,那么滾動條會被單獨提升為一個圖層。
簡單說就是層疊等級低的節點被提升為單獨的圖層之后,那么所有層疊等級比它高的節點都會成為一個單獨的圖層。
這個隱式合成其實隱藏著巨大風險,如果在一個大型應用中,當一個 z-index 比較低的元素被提升為單獨圖層之后,層疊在它上面的元素統統會被提升為單獨的圖層,可能會增加上千個圖層,大大增加內存壓力,甚至直接讓頁面崩潰。這就是層爆炸的原理
當需要 repaint 時,只需要 repaint 本身,而不會影響到其他層。
渲染引擎會將圖層的繪制拆分成一個個繪制指令,比如先畫背景、再描繪邊框......然后將這些指令按順序組合成一個待繪制列表。
大家可以 F12 打開 Chrome 開發者工具,在設置欄展開 more tools ,然后選擇 Layers 面板,就能看到繪制列表了。
后面就是渲染進程的主線程把繪制列表提交給合成線程。然后合成線程選擇視口附近的圖塊,把它交給柵格化線程池生成位圖。
柵格化操作完成后,合成線程會生成一個繪制指令 DrawQuad,并發送給瀏覽器進程。瀏覽器進程中的 viz 組件 接收到命令,把頁面內容繪制到內存,也就是生成了頁面。
當數據傳送完畢,需要斷開 TCP 連接,此時發起四次揮手。
如果本文對你有幫助,就點個贊支持下吧!感謝閱讀。
來源:掘金-推薦
動端應用到底需要做SEO嗎?答案很重要。隨著智能手機的出現,越來越多的人使用智能手機進行搜索。交通意味著一切。很多人會在零碎的時間內使用手機來滿足他們的搜索和查詢需求。如果移動網站搜索引擎優化做得不錯,這意味著他們可以分享流量紅利。所以手機上的seo非常重要。
如何做手機站SEO?移動站定位和頁面設計移動站和PC站除了頁面大小,顯示形式不同,在分析用戶需求時都要做。例如,對于一個地方裝修網站,PC站是重點展示裝修效果的圖紙案例、裝修報價和公司裝修設計師的風度,所以移動站應該重點關注公司的聯系人、地圖、電話等。移動網站需要”及時、快速“。同時,考慮到網站的反應速度,整個頁面應該用DIV CSS代碼編寫。不要為了方便而使用flash或js,所以搜索引擎很難掌握。還有許多移動瀏覽器不支持Flash播放。你需要單獨安裝手機falsh插件,但是為什么用戶有那么多時間等待呢?
移動站應簡潔,用戶瀏覽量大的手機內容,或者屏幕大一些,在平板電腦上瀏覽,但不大于普通電腦屏幕,所以移動站頁面應更簡潔,特別是對于有下載需求的網站,移動站上的下載按鈕應為CLE。Arly放在用戶面前。用戶知道在哪里單擊以查找所需的內容。還有一點,內容頁面不應該太長,因為用手機瀏覽網站的用戶,時間非常緊迫,而且有些還在騎行過程中,流量和網絡速度是一個大問題,所以一個問題可以用一句話一張圖來解決,不要講太長的故事。
對于商場的移動支付,除了以上幾點之外,最重要的支付頁面必須簡單化。這可以參考京東和淘寶,他們的支付頁面做得很好。移動臺應該簡單大方。
移動臺應禁止使用彈窗(必須禁止)彈窗。PC站的用戶已經夠煩躁了。如果在像手機或平板電腦這樣的地方做了一個子彈窗,用戶會說不出話來:”我們進來吧,但這并不能讓我們輕松地看到它。“哪種網絡語言更適合移動臺?這一點我在之前的移動網站優化教程中已經討論過,詳細分析了HTML4和HTML5作為移動站的區別。
URL路徑必須標準化為移動站。不要使用列表頁面來節省空間成本,也不要購買新的空間。最好使用單獨的輔助域名作為移動站。表單為m.xxx.com或wap.xx.com。
PC站和移動站做開放匹配,我的裝修網站,移動站,在線后只有針對性的更新內容,一個外鏈不存在,現在大部分的主要關鍵字都排在主頁上,最重要的原因是我的移動站做了開放匹配。
如果你不知道如何做開放匹配,你可以在我的博客的移動網站優化部分看到如何做開放匹配,這是以視頻的形式顯示的,一步一步地教你如何做開放匹配。關于機器人、地圖、關鍵字設置等問題,與PC站是一樣的,PC站怎么辦,移動站怎么辦。手機站首頁的標題只能寫公司品牌的文字,也可以和PC站的標題相同,這是沒有危害的 。
前幾天看到有同學問“H5和html5是一個東西嗎?它們有什么區別?”
有網友回答說“H5和html5就像ps和photoshop一樣,h5更厲害一點兒”
這個機智的回答我真的是看笑了~
很多人都以為H5是html5的簡稱,符合 HTML5 標準實現的頁面,大家為了方便,簡稱 H5“。百度和搜狗百科上的答案也似乎是這樣——H5(HTML5)”一般是指“html5,但是真的是這樣的嗎? 當連續有人問相關的問題,并詳細了解一些業務以后,慢慢的發現 H5 已經不單單是一個技術相關的詞。
按照百度百科理解來說:“符合 HTML5 標準實現的頁面就是 H5頁面”,那么當前互聯網上的網站基本上都在采用了 HTML5 標準。
但大多數的客戶要求是把微信里面那種好友之間,或者朋友圈分享的那種帶有主題性質的宣傳頁面(實在是不知道怎么描述)和我們平時電腦上訪問的頁面通過技術區分識別出來。所以說在業務人員和一些客戶眼里,微信上分享的那種炫酷的頁面就是H5頁面。所以 H5 和 HTML5就不是一個東西了。
如果 H5 不等于 HTML5 了,那 H5 到底是什么呢?
網友猜想可能是這樣的:HTML5 在 2013 年左右就發布,在 2014 年底宣布標準制定完成,但是市面的瀏覽器的支持主要還是在手機上,電腦上主要有 IE 的存在導致標準普及緩慢,所以開始有開發者在手機上做很多酷炫的頁面,當這些酷炫的效果在業務人員看到了以后,開始加以有效的利用,特別是在活動宣傳和廣告方面,為了宣傳業務人員會問技術人員:“這種炫酷的效果是怎么實現的?”
技術人員說:“我用的是HTML5的技術”。業務人員的宣傳營銷能力那是相當厲害,在客戶面前大量的宣傳:“我們用到了一個牛逼技術,讓你的手機網頁非常炫酷好看”,慢慢的客戶都知道了有一種技術可以把頁面在手機上做的非常好看,非常炫酷,然后客戶又開始對其他人說:“我們的這個網頁用了現在最新的技術,叫什么什么5頁面,對H5頁面”。然后客戶之間口口相傳,當以后遇到同樣的業務需求的時候,找另外一家供應商說:“我要一個H5頁面,要長的類似什么..一樣的網頁”,然后這一家做網站的公司開始也把這種網站也開始叫著H5頁面。
最后鋪天蓋地的“H5頁面”就出來了。
當然,這只是網友的一個猜想……
最后
為幫助那些往想互聯網方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我搜集整理了一套完整的IT學習資料,包括Java、SEO優化、Python入門書籍等等等,比自己在網上零散收集的結構性和連貫性更強,只為幫助那些想學習的人!需要的同學可私信!私信!回復“學習”
*請認真填寫需求信息,我們會在24小時內與您取得聯系。