小滴課堂-學習筆記:最接近使用者的協定-Http協定 願景:"讓程式設計不再難學,讓技術與生活更加有趣"
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yYiVWYkJzMwIWO3cTOjJ2NjZGMmFGZ1EDMzIzNkdzYy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
更多架構課程請通路 xdclass.net
第1集 http協定之核心面試知識點
簡介:http狀态碼和method知識點考查
- 考點:是否掌握Http基礎知識,遵循開發規範
- 難度:【***】
- 常見的Http Method有哪些,使用場景分别是?
http1.0定義了三種:
GET: 向伺服器擷取資源,比如常見的查詢請求
POST: 向伺服器送出資料而發送的請求
Head: 和get類似,傳回的響應中沒有具體的内容,用于擷取報頭
http1.1定義了六種
PUT:一般是用于更新請求,比如更新個人資訊、商品資訊全量更新
PATCH:PUT 方法的補充,更新指定資源的部分資料
DELETE:用于删除指定的資源
OPTIONS: 擷取伺服器支援的HTTP請求方法,伺服器性能、跨域檢查等
CONNECT: 方法的作用就是把伺服器作為跳闆,讓伺服器代替使用者去通路其它網頁,之後把資料原原本本的傳回給使用者,網頁開發基本不用這個方法,如果是http代理就會使用這個,讓伺服器代理使用者去通路其他網頁,類似中介
TRACE:回顯伺服器收到的請求,主要用于測試或診斷
- 常見http狀态碼解析
浏覽器向伺服器請求時,服務端響應的消息頭裡面有狀态碼,表示請求結果的狀态
分類
1XX: 收到請求,需要請求者繼續執行操作,比較少用
2XX: 請求成功,常用的 200
3XX: 重定向,浏覽器在拿到伺服器傳回的這個狀态碼後會自動跳轉到一個新的URL位址,這個位址可以從響應的Location首部中擷取;
好處:網站改版、域名遷移等,多個域名指向同個主站導流
必須記住: 301:永久性跳轉,比如域名過期,換個域名 302:臨時性跳轉
4XX: 客服端出錯,請求包含文法錯誤或者無法完成請求
必須記住:
400: 請求出錯,比如文法協定
403: 沒權限通路
404: 找不到這個路徑對應的接口或者檔案
405: 不允許此方法進行送出,Method not allowed,比如接口一定要POST方式,而你是用了GET
5XX: 服務端出錯,伺服器在處理請求的過程中發生了錯誤
必須記住:
500: 伺服器内部報錯了,完成不了這次請求
503: 伺服器當機
第2集 http協定無狀态解決方法 Cookie和Session
簡介:單機情況下 http無狀态解決方案,cookie和session
- 考點:是否掌握cookie和session知識點
- 難度:【** *】
- 說下Cookie和Session的差別和聯系
cookie資料儲存在用戶端,session資料儲存在服務端
cookie不是很安全,容易洩露,不能直接明文存儲資訊
Cookie大小和數量存儲有限制
- 你們公司C端業務登入的是怎樣做的(業務量大,叢集部署)
部分業務是采用redis替代本身的tomcat單機session (業務需要高度可控)
還有其他業務是使用JSON Web token (C端普通業務)
第3集 http協定之分布式業務無狀态解決方案 JWT
簡介:分布式業務場景的常見登入解決方案JWT
- 考點:是否知道JWT
- 難度:【** **】
- 你們公司是用JWT做叢集的登入解決是不是,能否介紹下JWT
- JWT 是一個開放标準,它定義了一種用于簡潔,自包含的用于通信雙方之間以 JSON 對象的形式安全傳遞資訊的方法。 可以使用 HMAC 算法或者是 RSA 的公鑰密鑰對進行簽名
- JWT格式組成 頭部、負載、簽名
- header+payload+signature
- 頭部:主要是描述簽名算法
- 負載:主要描述是加密對象的資訊,如使用者的id等,也可以加些規範裡面的東西,如iss簽發者,exp 過期時間,sub 面向的使用者
- 簽名:主要是把前面兩部分進行加密,防止别人拿到token進行base解密後篡改token
- header+payload+signature
- 簡單來說: 就是通過一定規範來生成token,然後可以通過解密算法逆向解密token,這樣就可以擷取使用者資訊
{
id:888,
name:'二當家小D',
expire:10000
}
funtion 加密(object, appsecret){
xxxx
return base64( token);
}
function 解密(token ,appsecret){
xxxx
//成功傳回true,失敗傳回false
}
- 為啥使用這個呢,有什麼優缺點
- 優點
- 生産的token可以包含基本資訊,比如id、使用者昵稱、頭像等資訊,避免再次查庫
- 存儲在用戶端,不占用服務端的記憶體資源,使用加解密的方式進行校驗,在分布式業務中能較好的提高性能和節省空間
- 缺點
- token是經過base64編碼,是以可以解碼,是以token加密前的對象不應該包含敏感資訊,如使用者權限,密碼等
- 如果沒有服務端存儲,則不能做登入失效處理,除非服務端改秘鑰
- 優點
- 生成的token,在用戶端或者浏覽器是怎麼存儲的
- 可以存儲在cookie,localstorage和sessionStorage裡面
第4集 浏覽器輸入url按回車背後經曆了哪些
簡介:浏覽器網絡請求鍊路
- 考點:是否掌握http請求産生到響應的鍊路
- 難度:【** **】
- 說下常用浏覽器輸入一個url到使用者看到結果,中間經過哪些流程
1、浏覽器輸入url, 解析url位址是否合法 2、浏覽器檢查是否有緩存, 如果有直接顯示。如果沒有跳到第三步。 3、在發送http請求前,需要域名解析(DNS解析),解析擷取對應過的ip位址。 4、浏覽器向伺服器發起tcp連結,完成tcp三次握手 5、握手成功後,浏覽器向伺服器發送http請求 6、伺服器收到處理的請求,将資料傳回至浏覽器 7、浏覽器收到http響應。 8、浏覽器解析響應。如果響應可以緩存,則存入緩存 9、浏覽器進行頁面渲染
第5集 浏覽器同源政策和跨域掌握了嗎?
簡介:什麼是浏覽器的同源政策和跨域知識點
- 考點:同源政策和跨域知識點
- 難度:【** **】
- 你是否知道什麼是浏覽器同源政策
同源政策(Same origin policy)是一種約定,它是浏覽器最核心也最基本的安全功能,如果缺少了同源政策,則浏覽器的正常功能可能都會受到影響。 由Netscape提出的一個著名的安全政策。 當一個浏覽器的兩個tab頁中分别打開來 百度和谷歌的頁面 當浏覽器的百度tab頁執行一個腳本的時候會檢查這個腳本是屬于哪個頁面的, 即檢查是否同源,隻有和百度同源的腳本才會被執行。 如果非同源,那麼在請求資料時,浏覽器會在控制台中報一個異常,提示拒絕通路。 同源政策是浏覽器的行為,是為了保護本地資料不被JavaScript代碼擷取回來的資料污染,是以攔截的是用戶端發 出的請求回來的資料接收,即請求發送了,伺服器響應了,但是無法被浏覽器接收
- 為什麼會出現跨域,有什麼常見的解決方案
- 跨域:浏覽器同源政策 1995年,同源政策由 Netscape 公司引入浏覽器。目前,所有浏覽器都實行這個政策。 最初,它的含義是指,A網頁設定的 Cookie,B網頁不能打開,除非這兩個網頁"同源"。所謂"同源"指的是"三個相同"
協定相同 http https 域名相同 www.xdclass.net 端口相同 80 81 一句話:浏覽器從一個域名的網頁去請求另一個域名的資源時,域名、端口、協定任一不同,都是跨域 浏覽器控制台跨域提示: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
- 跨域:浏覽器同源政策 1995年,同源政策由 Netscape 公司引入浏覽器。目前,所有浏覽器都實行這個政策。 最初,它的含義是指,A網頁設定的 Cookie,B網頁不能打開,除非這兩個網頁"同源"。所謂"同源"指的是"三個相同"
- 解決方法
- JSONP
- 頁面這層再包裝一層服務,目前最多就是nodejs
- Http響應頭配置允許跨域
- nginx代理伺服器
- 後端程式代碼配置
程式代碼中處理 SpringBoot 通過攔截器配置 //表示接受任意域名的請求,也可以指定域名 response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin")); //該字段可選,是個布爾值,表示是否可以攜帶cookie response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS"); response.setHeader("Access-Control-Allow-Headers", "*");