前端知識:網(wǎng)絡相關

OSI 七層模型與 TCP/IP 五層模型

  • OSI 七層模型:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話層、展示層、應用層
  • TCP/IP 五層模型:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、應用層

HTTP/ HTTPS 協(xié)議

HTTP 0.9

  • 只有GET命令
  • 響應后就馬上關閉連接

HTTP 1.0

  • 增加了HEAD、POST方法
  • 增加了HTTP Headers和響應狀態(tài)碼

HTTP 1.1(普遍使用)

  • 持久連接(Keep-Alive),通道復用
  • 增加了PUT、DELETE,OPTIONS 等方法
  • 新增斷點續(xù)傳,身份認證,狀態(tài)管理,緩存等特性

HTTP 2.0

  • 數(shù)據(jù)以二進制分幀進行傳輸
  • 頭信息壓縮
  • 服務端推送

HTTPS

  • 使用SSL加密傳輸?shù)?code>HTTP安全版本

URL 和 URI 的區(qū)別

  • URI = URL + URN
  • URI:統(tǒng)一資源標識符,用來唯一標識互聯(lián)網(wǎng)上的信息資源,就像身份證號可以獨一無二的標識出來
  • URL:統(tǒng)一資源定位符,通過資源位置來標識資源,就像是身份證上的地址

常見狀態(tài)碼

  • 1xx:請求正在處理
  • 200 OK:請求成功
  • 201 Created:已創(chuàng)建,POSTPUT請求成功的響應
  • 202 Accepted:已接受,但未響應
  • 204 No Content:請求成功,但無內(nèi)容
  • 206 Partial Content:請求部分內(nèi)容,如斷點續(xù)傳
  • 301 Moved Permanently:永久性重定向,比如請求路徑忘記添加最后的斜杠
  • 302 Found:臨時性重定向
  • 304 Not Modified:資源未修改,使用緩存
  • 400 Bad Request:請求語法錯誤
  • 401 Unauthorized:要求身份認證
  • 403 Forbidden:請求資源被拒絕
  • 404 Not Found:資源不存在
  • 405 Method Not Allowed:請求的方法不支持
  • 500 Internal Server Error:服務器錯誤
  • 502 Bad Gateway:代理服務器錯誤
  • 504 Gateway Timeout:請求超時

GET 和 POST

GET:語義上是指請求獲取指定的資源,使用URL進行傳參,數(shù)據(jù)長度有限制,資源可以被緩存
POST:語義上是指對請求資源做出處理,請求數(shù)據(jù)放在body中,數(shù)據(jù)長度無限制,相對GET更安全,支持更多的編碼類型,不能被緩存

本質(zhì)區(qū)別:GET是冪等的,而POST不是冪等的。就是說對于相同的請求,GET請求返回相同的結(jié)果,而POST會有副作用。所以不應該使用GET請求做增刪改操作,也不應該使用POST請求做查詢操作

常用請求/相應頭

通用頭

  • Cache-Control:控制緩存行為
    • no-cache:向服務器驗證后,再決定緩存獲取或還是請求
    • no-store:不進行緩存,直接從服務器獲取
    • max-age:設置緩存最大有效時間,單位是秒
  • Connection:連接管理
    • keep-alive:持久連接
    • close:每次請求都會重新創(chuàng)建TCP連接
  • Date:服務端發(fā)送資源時的時間
  • Via:代理服務器相關信息

請求頭

  • Accept:可接受的響應內(nèi)容類型
  • Accept-Language:可接受的響應內(nèi)容語言列表
  • Cookie:客戶端存儲的Cookie字符串
  • Host:請求資源所在的服務器
  • If-Modified-Since:上次訪問時的更改時間,資源未修改的情況下返回304 Not Modified
  • If-None-Match:此次訪問使用的E-Tag
  • Range:請求實體的字節(jié)范圍,用于斷點續(xù)傳
  • Referer:請求資源的原始URI
  • User-Agent:客戶端相關信息

響應頭

  • Content-Type:資源資源的內(nèi)容類型
  • Etag:資源標識信息,標識資源是否更新,用于緩存驗證
  • Last-Modified:資源最后修改日期
  • Server:服務器軟件信息
  • Set-Cookie:設置Cookie
  • Access-Control-Allow-Origin:跨域設置

TCP三次握手和四次揮手

三次握手

  • 客戶端發(fā)送SYN標志,等待服務器確認
  • 服務器確認SYN標志后,發(fā)送SYN+ACK包給客戶端
  • 客戶端接收到SYN+ACK包后,發(fā)送ACK包,雙方建立連接

四次揮手

  • 客戶端 -- FIN --> 服務端,關閉數(shù)據(jù)傳送,客戶端進入FIN_WAIT_1狀態(tài)
  • 服務端 -- ACK -> 客戶端,服務端進入CLOSE_WAIT狀態(tài)
  • 服務端 -- ACK + FIN --> 客戶端,服務端進入LAST_ACK狀態(tài)
  • 客戶端 -- ACK -> 服務端,服務端進入CLOSED狀態(tài)

跨域

同源策略限制:如果兩個URL的協(xié)議,域名和端口相同則表示它們同源,否則被當做跨域

跨域解決方法:

  • JSONP:利用<script>標簽不受跨域限制,缺點是只支持GET請求
  • CORS:設置Access-Control-Allow-Origin頭允許跨域

HTTP 緩存策略

強緩存

根據(jù)Cache-ControlExpires頭來判斷是否強緩存,如果命中強緩存,則直接從緩存讀取資源,不會發(fā)請求到服務器,在Chrome瀏覽器下如下所示:

協(xié)商緩存

通過Last-ModifiedEtag來驗證資源是否命中協(xié)商緩存,如果命中則服務器會返回這個請求,但不會返回這個資源的數(shù)據(jù),依然是從緩存中讀取數(shù)據(jù),在Chrome瀏覽器下如下所示:

緩存策略

安全

  • XSS:跨站腳本攻擊,瀏覽器內(nèi)運行非法的HTML標簽或JS進行的一種攻擊
    • Cookie設置為HttpOnly
    • 轉(zhuǎn)義頁面上的輸入內(nèi)容和輸出內(nèi)容
  • CSRF:跨域請求偽造,攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求

RESTful

URL 設計

  • 動詞(HTTP Methods) + 賓語,注意方法要語義明確
  • 賓語必須是名詞,如/articles,而不是/getArticles
  • 復數(shù)URL,如GET /articles/2,而不是GET /article/2
  • 避免多級URL,除了第一級其余級別都用查詢字符串,如GET /authors/12?categories=2,而不是GET /authors/12/categories/2

狀態(tài)碼

按照不同的場景,返回對應合適的狀態(tài)碼

服務器響應

  • API返回的數(shù)據(jù)格式應該是一個JSON對象,而不是純文本,需要將服務器的響應頭Content-Type設置為application/json
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容