
Web前端就是當用戶在瀏覽器地址欄中輸入一行字母看到的頁面結(jié)果。然而,從輸入字母到看到頁面中都發(fā)生了什么,數(shù)據(jù)是怎么得到的?這些都離不開HTTP/HTTPS。然而,這部分內(nèi)容通常被讀者忽略,所以應(yīng)試者需要收集與之相關(guān)的知識,這也是讀者應(yīng)該掌握的。1、HTTP與HTTPS有什么聯(lián)系?它們的端口號是多少?HTTP通常承載于TCP之上,在HTTP和TCP之間添加一個安全協(xié)議層(SSL或TSL),這個時候,就成了我們常說的HTTPS。HTTP默認的端口號為80,Https默認的端口號為443。在網(wǎng)絡(luò)請求中,需要有很多服務(wù)器、路由器的轉(zhuǎn)發(fā)。其中的節(jié)點都可能篡改信息,而如果使用HTTPS,密鑰在終點站才有。HTTPS之所以比HTTP安全,是因為它利用 SSL/TLS協(xié)議傳輸。它包含證書、卸載、流量轉(zhuǎn)發(fā)、負載均衡、頁面適配、瀏覽器適配、 refer傳遞等技術(shù),保障了傳輸過程的安全性。HTTP/2引入了“服務(wù)器端推送”(server push)的概念,它允許服務(wù)器端在客戶端需要數(shù)據(jù)之前主動將數(shù)據(jù)發(fā)送到客戶端緩存中,從而提高性能。HTTP2使用多路技術(shù),允許多個消息在一個連接上同時交差。它增加了頭壓縮( header compression),因此請求非常小,請求和響應(yīng)的 header都只會占用很小的帶寬比例。(1)100 Continue表示繼續(xù),一般在發(fā)送post請求時,已發(fā)送了 HTTP header之后,服務(wù)器端將返回此信息,表示確認,之后發(fā)送具體參數(shù)信息。(3)201 Created表示請求成功并且服務(wù)器創(chuàng)建了新的資源。(4)202 Accepted表示服務(wù)器已接受請求,但尚未處理。(5)301 Moved Permanently表示請求的網(wǎng)頁已永久移動到新位置。(7)303 See Other表示臨時性重定向,且總是使用GET請求新的URI。(8)304 Not Modified表示自從上次請求后,請求的網(wǎng)頁未修改過,(9)400 Bad Request表示服務(wù)器無法理解請求的格式,客戶端不應(yīng)當嘗試再次使用相同的內(nèi)容發(fā)起請求。(10)401 Unauthorized表示請求未授權(quán)。(12)404 Not Found表示找不到如何與URI相匹配的資源。(13)500 Internal Server error表示最常見的服務(wù)器端錯誤。(14)503 Service Unavailable表示服務(wù)器端暫時無法處理請求(可能是過載或維護)。(4)服務(wù)器端響應(yīng)HTTP請求,瀏覽器得到HTML代碼。(5)瀏覽器解析HTML代碼,并請求HTML代碼中的資源。(6)瀏覽器對頁面進行渲染并呈現(xiàn)給用戶。6、實現(xiàn)一個簡單的HTTP服務(wù)器。在Node.js中加載HTTP模塊,并創(chuàng)建服務(wù)器,監(jiān)聽端口代碼。如下所示:var http = require('http');http.createServer ( function (req,res) { res. writeHead (200,{' Content-Type':'text/htm1'});res. write('< meta charset="UTF-8"><h1>有課前端網(wǎng)</h1>1');res.end ( );.listen(3000);
HTTP是客戶端和服務(wù)器端之間數(shù)據(jù)傳輸?shù)母袷揭?guī)范,表示“超文本傳輸協(xié)議”。8、什么是HTTP無狀態(tài)協(xié)議?如何克服HTTP無狀態(tài)協(xié)議的缺陷?(1)無狀態(tài)協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)需要處理,需要前面提供的信息。(2)克服無狀態(tài)協(xié)議缺陷的辦法是通過 cookie和會話保存信息。9、HTTP的請求報文和響應(yīng)報文包含哪些部分?(1)請求行,包含請求方法、URI、HTTP版本信息。(1)狀態(tài)行,包含HTTP版本、狀態(tài)碼、狀態(tài)碼的原因短語。(1)GET:請求訪問已經(jīng)被URI(統(tǒng)一資源標識符)識別的資源,可以通過URL,給服務(wù)器傳遞參數(shù)數(shù)據(jù)(2)POST:傳輸信息給服務(wù)器,主要功能與GET方法類似,但傳遞的數(shù)據(jù)量通常不受限制。(3)PUT:傳輸文件,報文主體中包含文件內(nèi)容,保存到對應(yīng)URI位置。(4)HEAD:獲得報文首部,與GET方法類似,只是不返回報文主體,一般用于驗證URI是否有效。(5) DELETE:刪除文件,與PUT方法相反,刪除對應(yīng)URL位置的文件。(6)OPTIONS:查詢相應(yīng)URI支持的HTTP方法。11、HTTP協(xié)議中1.0版本規(guī)范與1.1版本規(guī)范的區(qū)別是什么?在HTTP1.0中,當建立連接后,客戶端發(fā)送一個請求,服務(wù)器端返回一個信息后就關(guān)閉連接,當瀏覽器下次請求的時候又要建立連接。顯然,這種不斷建立連接的方式會造成很多問題。在HTTP1.1中,引入了持續(xù)連接的概念。通過這種連接,瀏覽器可以在建立一個連接之后,發(fā)送請求并得到返回信息,然后繼續(xù)發(fā)送請求再次等到返回信息。也就是說,客戶端可以連續(xù)發(fā)送多個請求,而不用等待每一個響應(yīng)的到來。(1)通用首部字段(請求報文與響應(yīng)報文都會使用的首部字段)。(3)響應(yīng)首部字段(響應(yīng)報文會使用的首部字段)。Server : HTTP服務(wù)器的安裝信息(4)實體首部字段(請求報文與響應(yīng)報文的實體部分使用的首部字段)。Allow:資源可支持的HTTP方法。
Content-Type:實體主體的類型。
Content- Encoding:實體主體使用的編碼方式。
Content-Language:實體主體的自然語言。
Content- Length:實體主體的字節(jié)數(shù)。
Content- Range:實體主體的位置范圍,一般用于發(fā)出部分請求時使用。
(1)通信使用明文,不加密,內(nèi)容可能被竊聽,也就是被抓包分析。HTTPS就是HTTP+加密處理(一般是SSL安全通信線路)+認證+完整性保護。利用負載均衡優(yōu)化和加速HTTP應(yīng)用請求;利用HTTP緩存來優(yōu)化網(wǎng)站請求。支持客戶端/服務(wù)器模式,簡單快速,靈活,無連接,無狀態(tài)。(1)默認持久連接,節(jié)省通信量,只要客戶端服務(wù)端中任意一端沒有明確指出斷開TCP連接,就一直保持連接,可以多次發(fā)送HTTP請求。(2)管線化,客戶端可以同時發(fā)出多個HTTP請求,而不用一個個等待響應(yīng)。17、說說TCP傳輸?shù)娜挝帐?、四次揮手策略。為了準確無誤地把數(shù)據(jù)送達目標處,TCP采用了三次握手策略。用TCP把數(shù)據(jù)包發(fā)送出去后,TCP不會對傳送后的數(shù)據(jù)置之不理,它一定會向?qū)Ψ酱_認是否成功送達。握手過程中使用了TCP的標志,即SYN和ACK。發(fā)送端首先給接收端發(fā)送一個帶SYN標志的數(shù)據(jù)包。接收端收到后,回傳一個帶有SYN/ACK標志的數(shù)據(jù)包以表示正確傳達,并確認信息。最后,發(fā)送端再回傳一個帶ACK標志的數(shù)據(jù)包,代表“握手”結(jié)東。若在握手過程中的某個階段莫名中斷,TCP會再次以相同的順序發(fā)送相同的數(shù)據(jù)包。第一次握手:主動關(guān)閉方發(fā)送一個FIN,用來關(guān)閉主動關(guān)閉方到被動關(guān)閉方的數(shù)據(jù)傳送,也就是主動關(guān)閉方告訴被動關(guān)閉方,主動關(guān)閉方已經(jīng)不會再給被動關(guān)閉方發(fā)送數(shù)據(jù)了(當然,在FIN包之前發(fā)送出去的數(shù)據(jù),如果沒有收到對應(yīng)的ACK確認報文主動關(guān)閉方依然會重發(fā)這些數(shù)據(jù)),但是,此時主動關(guān)閉方還可以接收數(shù)據(jù)。第二次握手:被動關(guān)閉方收到FIN包后,給對方發(fā)送一個ACK,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)。第三次握手:被動關(guān)閉方發(fā)送一個FIN,用來關(guān)閉被動關(guān)閉方到主動關(guān)閉方的數(shù)據(jù)傳送,也就是告訴主動關(guān)閉方,被動關(guān)閉方的數(shù)據(jù)也發(fā)送完了,不會再給主動關(guān)閉方發(fā)送數(shù)據(jù)了。第四次握手:主動關(guān)閉方收到FIN后,給被動關(guān)閉方發(fā)送一個ACK,確認序號為收到序號+1,至此,完成四次握手。TCP( Transmission control protocol,傳輸控制協(xié)議)是基于連接的協(xié)議,也就是說,在正式收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。一個TCP連接必須要經(jīng)過3次“對話”才能建立起來。UDP( User Datagram Protocol,用戶數(shù)據(jù)報協(xié)議)是與TCP相對應(yīng)的協(xié)議。它是面向非連接的協(xié)議,它不與對方建立連接,而是直接就把數(shù)據(jù)包發(fā)送過去。UDP適用于次只傳送少量數(shù)據(jù)、對可靠性要求不高的應(yīng)用環(huán)境。19、一個頁面從輸入URL到頁面加載顯示完成,這個過程中都發(fā)生了什么?(1)當發(fā)送一個URL請求時,不管這個URL是Web頁面的URL還是Web頁面上毎個資源的URL,瀏覽器都會開啟一個線程來處理這個請求,同時在遠程DNS服務(wù)器上啟動一個DNS查詢。這能使瀏覽器獲得請求對應(yīng)的IP地址。(2)瀏覽器與遠程Web服務(wù)器通過TCP三次握手協(xié)商來建立一個TCPP連接。該握手包括一個同步報文、一個同步-應(yīng)答報文和一個應(yīng)答報文,這3個報文在瀏覽器和服務(wù)器之間傳遞。該握手首先由客戶端嘗試建立起通信,然后服務(wù)器應(yīng)答并接受客戶端的請求,最后由客戶端發(fā)出已經(jīng)接受該請求的報文。(3)一旦TCP/IP連接建立,瀏覽器會通過該連接向遠程服務(wù)器發(fā)送HTTP的GET請求。遠程服務(wù)器找到資源并使用HTTP響應(yīng)返回該資源,值為200的HTTP響應(yīng)狀態(tài)碼表示一個正確的響應(yīng)(4)此時web服務(wù)器提供資源服務(wù),客戶端開始下載資源。請求返回后,便進入了瀏覽器端模塊。瀏覽器會解析HTML生成 DOM Tree,其次會根據(jù)CSS生成CSS規(guī)則樹,而 JavaScript又可以根據(jù) DOM API操作DOM。20、網(wǎng)絡(luò)分層模型有哪七層?七層分別是應(yīng)用( Application)層、表示( Presentation)層、會話( Session)層傳輸( Transport)層、網(wǎng)絡(luò)( Network)層、數(shù)據(jù)鏈路(Link)層和物理( Physical)層。應(yīng)用層:允許訪問OSI環(huán)境的手段。
表示層:對數(shù)據(jù)進行翻譯、加密和壓縮。
會話層:建立、管理和終止會話。
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(fù)。
網(wǎng)絡(luò)層:負責(zé)數(shù)據(jù)包從源到宿的傳遞和網(wǎng)際互聯(lián)。
數(shù)據(jù)鏈路層:將比特組裝成幀并實現(xiàn)點到點的傳遞。
物理層:通過媒介傳輸比特,確定機械及電氣規(guī)范。
21、網(wǎng)絡(luò)七層模型中,你所熟知的協(xié)議有哪些?ICMP,即因特網(wǎng)控制報文協(xié)議。它是TCP/IP協(xié)議族的一個子協(xié)議,用于在IP主機、路由器之間傳遞控制消息。
TFTP,即TCPP協(xié)議族中一個用來在客戶機與服務(wù)器之間進行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。
HTTP,即超文本傳輸協(xié)議,是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷快速的方式,適用于分布式超媒體信息系統(tǒng)。
DHCP,即動態(tài)主機配置協(xié)議,是一種讓系統(tǒng)得以連接到網(wǎng)絡(luò)并獲取所需要配置參數(shù)的手段。
服務(wù)器首先為請求生成ETag,服務(wù)器可在稍后的請求中,使用它來判斷頁面是否已經(jīng)修改。本質(zhì)上,客戶端通過將該記號傳回服務(wù)器要求服務(wù)器驗證其(客戶端)是否緩存。304是HTTP狀態(tài)碼,服務(wù)器用它來標識這個文件沒有修改,不返回內(nèi)容,瀏覽器在接收到個狀態(tài)碼后,會使用瀏覽器已緩存的文件。客戶端請求頁面A。服務(wù)器返回頁面A,并給A加上一個ETag。客戶端展現(xiàn)該頁面,并將頁面連同ETag一起緩存。客戶端再次請求頁面A,并將上次請求時服務(wù)器返回的ETag起傳遞給服務(wù)器。服務(wù)器檢查該ETag,并判斷岀該頁面自上次客戶端請求之后還未被修改,直接返回響應(yīng)304(未修改一 Not modified)和一個空的響應(yīng)體。當發(fā)送一個服務(wù)器請求時,瀏覽器首先會進行緩存過期判斷。瀏覽器根據(jù)緩存過期時間判斷緩存文件是否過期若沒有過期,則不向服務(wù)器發(fā)送請求,直接使用緩存中的結(jié)果。此時,我們在瀏覽器控制臺中可以看到200 OK( from cache),這種情況就是完全使用緩存,瀏覽器和服務(wù)器沒有任何交互。若已過期,則向服務(wù)器發(fā)送請求。此時,請求中會帶上文件修改時間和Etag,然后進行資源更新判斷。服務(wù)器根據(jù)瀏覽器傳過來的文件修改時間,判斷自瀏覽器上一次請求之后,文件是否被修改過。根據(jù)Etag,判斷文件內(nèi)容自上一次請求之后,有沒有發(fā)生變化。若兩種判斷的結(jié)論都是文件沒有被修改過,服務(wù)器就不給瀏覽器發(fā)送新的內(nèi)容,而是直接告訴瀏覽器,文件沒有被修改過,可以繼續(xù)使用緩存—-304 Not Modified。此時,瀏覽器就會從本地緩存中獲取請求資源的內(nèi)容,這種情況叫協(xié)議緩存,瀏覽器和服務(wù)器之間有一次請求交互。若修改時間或文件內(nèi)容判斷中有任意一個沒有通過,則服務(wù)器會受理此次請求,并返回新的數(shù)據(jù)注意,只有g(shù)et請求會被緩存,post請求不會。Etag由服務(wù)器端生成,客戶端通過 If-Match或者If-None- Match這個條件判斷請求來驗證資源是否修改。常見的是使用I-None- Match。請求一個文件的流程如下。第一次請求時,客戶端發(fā)起 Http Get請求,以獲取一個文件,服務(wù)器處理請求,返回文件內(nèi)容和請求頭(包括Eag),并返回狀態(tài)碼200第二次請求時,客戶端發(fā)起 Http Get請求,以獲取一個文件。注意,這個時候客戶端同時發(fā)送一個If-None- Match頭,這個頭的內(nèi)容就是第一次請求時服務(wù)器返回的Etag服務(wù)器判斷發(fā)送過來的Etag和計算出來的Etag是否匹配。如果If- None-Match為 False,不返回200,返回304,客戶端繼續(xù)使用本地緩存。如果服務(wù)器設(shè)置了 Cache- Control:max-age和 Expires,服務(wù)器端在完全匹配 If-Modified- Since和 If-None-Match后,即檢查完修改時間和Etag之后,才能返回304。25、Expires和 Cache- Control的作用是什么?Expires要求客戶端和服務(wù)器端的時間嚴格同步。HTTP1.1引入Cache-Control來克服 Expires頭的限制。如果max-age和 Expires同時出現(xiàn),則max-age有更高的優(yōu)先級。Cache-Control:no-cache, private, max-age=0ETag:"8b4c-55f16e2e30000"Expires:Thu, 02 Dec 2027 11:37:56 GMTLast-Modified:Wed, 29 Nov 2017 03:39:44 GMT
反向代理( Reverse Proxy)是指通過代理服務(wù)器來接收互聯(lián)網(wǎng)上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并把從服務(wù)器上得到的結(jié)果返回給互聯(lián)網(wǎng)上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器。相關(guān)推薦
【前端面試題】01—42道常見的HTML5面試題(附答案)
【前端面試題】02—59道CSS面試題(附答案)
【前端面試題】03—200+道常見JavaScript基礎(chǔ)面試題上(附答案)
【前端面試題】04—33道基礎(chǔ)CSS3面試題(附答案)
【前端面試題】05—17道面向?qū)ο蟮拿嬖囶}(附答案)
【前端面試題】06—16道設(shè)計模式面試題(附答案)
【前端面試題】07—47道基礎(chǔ)的VueJS面試題(附答案)