前端每次面試,基礎(chǔ)知識是必問,但是拉開薪資的差距就是一些稍微有點(diǎn)技術(shù)深度和一些技術(shù)廣度比較了解的同學(xué)。
WebSocket 的實(shí)現(xiàn)和應(yīng)用
參考回答:
(1)什么是WebSocket?
WebSocket是HTML5中的協(xié)議,支持持久連續(xù),http不支持持久性連接。Http1.0和HTTP1.1都不支持持久性的鏈接,HTTP1.1中的keep-alive,將多個(gè)http請求合并為1個(gè)。
(2) WebSocket是什么樣的協(xié)議,具體有什么優(yōu)點(diǎn)?
HTTP的生命周期通過Request來界定,也就是Request一個(gè)Response,那么在HTTP1.0協(xié)議中,這次HTTP請求就結(jié)束了 。在HTTP1.1中進(jìn)行了改進(jìn),其中有一個(gè)connection:Keep-alive,也就是說,在一個(gè)http連接中,可以發(fā)送多個(gè)Request,接收多個(gè)Response。但是必須記住,在HTTP中一個(gè)Request只能對應(yīng)有一個(gè)Response,而且這個(gè)Response是被動(dòng)的,不能主動(dòng)去發(fā)起。
WebSocket是基于HTTP協(xié)議的,或者說是借用了HTTP協(xié)議來完成一部分握手,在握手階段與HTTP是相同的。我們來看一個(gè)WebSocket握手協(xié)議 的實(shí)現(xiàn),基本是2個(gè)屬性,upgrade,connection。
基本請求如下:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Key:asdasdasd
Sec-WebSocket-Protocol:chat ,superChat
Sec-WebSocket-Version:13
Origin:http://example.com
多了下面2個(gè)屬性:
1 | Upgrade:webSocket |
2 | Connection:Upgrade |
告訴服務(wù)器發(fā)送的是WebSocket
1 | Sec-WebSocket-Key:asdasdasdasdas= |
2 | Sec-WebSocket-Protocol:chat,superchat |
3 | Sec-WebSocket-Version:13 |
HTTP請求的方式,HEAD方式
參考回答:
head:類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用戶獲取報(bào)頭options:允許客戶端查看服務(wù)器的性能,比如說服務(wù)器支持的請求方式等等。
一個(gè)圖片url訪問后直接下載是怎樣實(shí)現(xiàn)的?
參考回答:
請求的返回頭里面,用于瀏覽器解析的重要參數(shù)就是OSS的API文檔李阿敏返回http請求頭。決定用戶下載行為的參數(shù)。
下載的情況下:
1.X-oss-object-type:Normal
2.x-oss-request-id: 598asdasdasdas
3.x-oss-storage-class:Standard
說一下http2.0
參考回答:
首先補(bǔ)充一下,http和https的區(qū)別,我上一篇文章詳細(xì)介紹了之前的區(qū)別,大家可以再看下,https和http的區(qū)別。
簡要概括:
http2.0是基于1999年發(fā)布的http1.0后的首次更新。
提升了訪問速度(相對于之前,請求資源所需時(shí)間更少,訪問速度更快),允許多路復(fù)用:多路復(fù)用允許同事通過單一的HTTP/2連接發(fā)送多重請求-響應(yīng)信息。
改善了在http1.1中瀏覽器在同一時(shí)間,針對同一域名下的請求有一定數(shù)量限制(連接數(shù)量),超過限制會(huì)被阻塞。二進(jìn)制分幀:在HTTP2.0會(huì)將所有的傳輸信息分割為更小的信息或者幀,并且他們進(jìn)行二進(jìn)制編碼。首部壓縮,服務(wù)端進(jìn)行推送。