前端面試:http專場,你須要懂的知識

游泳健身瞭解一下:github 和小夥伴一塊兒搞的平常總結html

講一講強緩存和協議緩存?

http的緩存分爲強緩存和協商緩存
強緩存:
    cache-control : max-age: 22222 //緩存時間
        from memory cache // 內存
        from disk cache // 硬盤
協商緩存
        Last-modified // 當前服務器時間
        ETag // 當前服務器的哈希

判斷過程:先判斷當前強緩存時間是否過時,沒有過去就去請求本地的內存和硬盤,過時就去協商緩存,
返回if-Modified-Since(Last-modified) 和 if-no-Match(ETag)來判斷當前文件是否有更新,
若是沒有更新返回304,更新則返回200和當前更新文件
複製代碼

TCP握手過程和分手過程

握手過程:
    發送端 -> 接收端  你聽獲得嗎?
    接收端 -> 發送端  我聽到的到,你聽的到我嗎?
    發送端 -> 接收端  我聽的到,咱們開始說話吧
    
具體過程
    發送端發送當前seq(發送端序號)x 發送給當前接收端(發送SYN表識數據包)
    接收端返回ack(確認序號)x+1,seq(接收端序號) y 給發送端(發送SYN表識數據包)
    發送單發送ack(確認序號)y+1給接收端(發送ACK表識數據包)

分手過程
    客戶端 -> 服務器 請求關閉連接
    服務器 -> 客戶端 確認到關閉
    服務器 -> 客戶端 我要關閉了,你確認一下
    客戶端 -> 服務端 我關閉了,你也關閉吧,不用回覆了 
具體過程
    客戶端發送seq x+2(序號)ACK y+1 (確認序號)給服務端(FIN包)
    服務器發送ACK(確認序號)x+1(ACK包)
    服務器發送seq y+1 (序號)(FIN包)
    客戶端發送ACK(確認序號)y+2
複製代碼

TCP三次握手和四次揮手?以其存在乎義。

三次握手
    想一想一下若是不確認一次,那麼咱們發送若是網絡很差那麼服務端一直開着一個連接,客戶端過了一會又發了一個信息,
    那麼服務器端認爲是一個新端請求就會建立一個新的連接,形成了沒必要要的性能的開銷,三次握手就表示雙方都收到,
    就不會出現上面的問題了
    
四次揮手
    因爲咱們的tcp是雙向的,咱們客戶端發送給服務端說能夠斷開連接了,可是可能咱們的服務端端數據尚未發送完成,
    因此須要進行一次確認,咱們服務端發送一個ACK確認包給客戶端,(我收到了),而後服務端再發送一個FIN包
    (我已經傳輸完畢了),能夠斷開連接了,而後客戶端確認到關閉端請求,給服務端發送收到端消息,雙方就關閉了
複製代碼

302.304.301.401.403的區別?

301:當前永久重定向(不會保存以前的url 會使用新的url)
302:臨時重定向(保存以前的url 會使用新的url)
304:強緩存,緩存有效(資源沒有過時)
401:訪問缺乏信息沒有受權
403:拒絕訪問
複製代碼

有了【Last-Modified,If-Modified-Since】爲什麼還要有【ETag、If-None-Match】

當前時間(按秒來建立)可能會建立多個文件,因此時間可能會相同
hash值惟一不會相同
複製代碼

nginx 瞭解嗎?你都用來作什麼?

映射服務器文件,反響代理服務器
複製代碼

你是如何解決跨域的?都有幾種?

ajax new XMLHttpRequest GET text/plain 等簡單請求
nginx 反向代理
服務器 配置 Access-Control-Allow-Origin: * || Access-Control-Allow-Methods: POST
jsonp 使用script 標籤加載 經過callback方法來回調
postmessage // 跨頁面操做
websocket //長連接
圖片的src
複製代碼

https的握手過程

1.客戶端發送請求給服務端
2.服務器端拿着數字證書的公鑰進行非對稱加密(生成私鑰),返回數字證書
3.客戶端收到服務端返回端數字證書,對數字證書進行校驗(是否過時,是否正確)
4.客戶端生成隨機數,與數字證書裏的公鑰進行對稱加密,返回給服務端
5.服務端用私鑰對當前客戶端的值進行解密,獲取隨機數
6.服務端把客戶端須要的數據和隨機數進行對稱加密返回給客戶端
7.客戶端收到數據,(經過隨機數)進行解密,獲取數據
複製代碼

CSRF 跨站請求僞造和XSS 跨站腳本攻擊是什麼?

XSS 注入腳本攻擊
例子:
    1.你使用了url上的某個字段直接innerhtml到頁面裏面,我把某個字段改成<script> 頁面就會執行咱們的js,
    就是注入腳本進行攻擊
    2.最多見的就是富文本編譯器,咱們輸入而後前端進行展現,好比裏面輸入<script>
    3.sql注入攻擊後臺沒有進行sql的攔截,能夠刪庫
預防: 咱們對<script> 改成 &t script 這樣標籤轉化

CSRF 跨站請求僞造
例子:
    1.你打開了某個頁面,登錄了用戶信息,你小夥伴給你發了一個連接你打開了,cookie 是一直髮的致使其餘頁面
    獲取了你的cookie,僞造你進行對以前頁面對請求,
預防:咱們添加token,後臺有存當前session用戶,進行匹配對當前用戶進行校驗,存着的token是不會對跨站進行保存

複製代碼

http的請求報文由什麼組成

請求行
請求方式 請求路由 協議/版本
post     /xx      http/1.1

請求頭
accept */* //請求須要的格式
user-agent //當前請求的瀏覽器信息
host //ip || 域名
空行 //分割主體和請求頭
請求體
// json,fromData等

複製代碼

http2和http1.1之間的區別

1.http2 是二進制傳輸
2.頭部壓縮,http1.1每次都要重複請求大量都頭部信息,http2只須要發送改變都頭部信息就能夠
3.服務器推送:服務器能夠在推送html的時候主動推送其餘的一些資源
4.多路由複用:http1.1好比咱們請求2個文件,一個文件請求須要1秒,第二個文件須要等待第一個請求響應結束
,才能夠進行三次握手傳遞文件,那麼時間就會增長,而http2中按流等形式進行傳輸,幀是流等最小單位,
幀中帶有下標,能夠識別從哪一個流來的,服務器會將幀數據從新整合成流,也就是多路由複用
複製代碼

http的狀態碼有哪些

1XX: 臨時響應
2XX:成功
    200:成功
    206:範圍請求,好比最大須要200k的數據
3XX: 重定向
    301:永久重定向
    302:臨時重定向
    304:強緩存還可使用
401: 客戶端錯誤
    400:請求錯誤(請求格式錯誤,請求頭錯誤)
    401:須要登錄信息,須要驗證身份
    403:拒絕訪問
    404:沒有當前資源
5XX:服務端錯誤
    500:服務端發生流錯誤
    502:服務器錯誤,過載或者任務不可用
複製代碼

HTTP和HTTPS握手差別?

https須要ca證書
tcp連接http訪問80端口,https訪問443端口
http明文,https加密
https 要比 http 多了證書校驗,增長了通訊的加密,比http安全
複製代碼

http的經常使用字段有哪些

accept
user-angent
cookie
content-length
last-modified
ETag
Host
if-no-match (ETag)
if-modified-Since (last-modified)
content-type
cache-control等
複製代碼

總結

有啥寫錯了,和問題能夠留言給我,會當即更正的前端

最後

多多點贊在github 上面對❤️是對我最好對鼓勵,我會盡可能分享一些本身使用得心得以及正確對食用方式 求靠譜內推(北京地區)能夠留言我 +。= 須要探討的小夥伴能夠加nginx

相關文章
相關標籤/搜索