前端基礎整理 | 網絡相關(一)

本文的題目整理自大佬文章,語句本身稍做處理,其餘內容來自網絡和《圖解 HTTP》一書,都是網絡相關的。

文章首發地址:http://www.brandhuang.com/article/1584788722448web

HTTP

HyperText Transfer Protocol,超文本傳輸協議。 TCP/IP 協議族的一個子集。用於客戶端與服務器間的通訊。是一種 無狀態協議。爲了實現保持狀態的功能,引入了 Cookie 技術。目前主流版本 HTTP 1.0(普遍使用在服務器端)HTTP 1.1(當前最新版)

TCP/IP協議族概要

計算機和網絡設備須要相互通訊,雙方必須基於相同的方法。好比,如何探測到通訊設備、由哪一方現發起通訊、使用哪一種語言通訊、怎樣結束通訊等都須要事先肯定規則,咱們把這種規則稱之爲 協議(protocol)

TCP/IP 協議是互聯網相關連的協議的集合的總稱,包括 TCP、IP、UDP、HTTP、DNS、FTP...等等面試

TCP/IP 協議的其餘兩種說法:api

  1. IPTCP 兩種協議;
  2. IP 協議在通訊過程當中,使用到的協議族的統稱。

TCP/IP 的分層管理

TCP/IP 協議族中最重要的一點就是分層。

TCP/IP 協議族分爲 4 層:跨域

  1. 應用層
  2. 傳輸層
  3. 網絡層
  4. 數據鏈路層

分層後的好處:若是互聯網只由一個協議統籌,某個地方須要改變設計時,就須要把全部的部分總體替換掉。分層以後,只須要把變更的層替換掉便可。把各層之間的接口設計後後,各層內部就能自由改動了。瀏覽器

一、應用層緩存

應用層決定了向用戶提供應用服務時通訊的活動。安全

TCP/IP 協議族內置了各種通用的應用服務。如 FTP(File Transfer Protocol,文件傳輸協議)DNS(Domain Name System,域名系統)HTTP 協議也屬於應用層服務器

二、傳輸層cookie

爲「應用層」提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。網絡

該層的有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)UDP(User Data Protocol,用戶數據報協議)

三、網絡層(又網絡互聯層)

該層用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小單位。

該層規定了經過怎樣的路徑(即傳輸路線)到達對方計算機,並把數據包傳輸給對方。與對方計算機之間經過多臺計算機或者網絡設備進行傳輸時,網絡層的做用就是在衆多選項內選擇一條傳輸路線。

四、鏈路層

又名數據鏈路層,網絡接口層

用來處理鏈接網絡的硬件部分。包括控制操做系統、硬件設備的驅動、NIC(網絡適配器)及光纖等物理可見部分(還包括鏈接器等一切傳輸媒介)。

TCP/IP 通訊傳輸

發送端從應用層往下走,接收端從應用層往上走。

http://static.brandhuang.com/tcp-ip%20transfer.png

http://static.brandhuang.com/tcp-ip%20transfer%20detail.png

Cookie 和 Session

Cookie:

服務器發送到用戶瀏覽器,並 存儲在本地的一段通常不超過 4KB 的小型文本數據。

服務器指定 cookie 後,瀏覽器每次請求都會攜帶 cookie。

Cookie主要用於如下三個方面:

  • 會話狀態管理(如用戶登陸狀態、購物車、遊戲分數或其它須要記錄的信息)
  • 個性化設置(如用戶自定義設置、主題等)
  • 瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等)
設置 cookie:
  1. 客戶端發送 HTTP 請求到服務器
  2. 當服務器收到 HTTP 請求時,在響應頭裏面添加一個 Set-Cookie 字段
  3. 瀏覽器收到響應後保存下 Cookie
  4. 以後每一次請求中都經過 Cookie 字段將 Cookie 信息發送給服務器。
會話期 Cookie:

瀏覽器關閉以後它會被自動刪除,不須要指定過時時間(Expires)或者有效期(Max-Age

注意:有的瀏覽器提供了會話恢復功能,即便關閉了瀏覽器,會話期 cookie 依然會被保存下來,就像沒關閉瀏覽器同樣

持久性 Cookie:

持久性Cookie能夠指定一個特定的過時時間(Expires)或有效期(Max-Age)

Cookie 的 SecureHttpOnly 標記

標記爲 Secure 的Cookie只應經過被HTTPS協議加密過的請求發送給服務端。

爲避免跨域腳本 (XSS) 攻擊,經過 JavaScript 的 Document.cookie API沒法訪問帶有 HttpOnly 標記的Cookie,

Cookie 的做用域

DomainPath 標識定義了Cookie的做用域.

Domain 標識指定了哪些主機能夠接受Cookie。若是不指定,默認爲當前文檔的主機(不包含子域名)。若是指定了Domain,則通常包含子域名。

例如:設置 Domain = brandhuang.com,則 cookie 也包含子啊子域名中,如 api.brandhuang.comstatic.brandhuang.com

Path 標識指定了主機下的哪些路徑能夠接受Cookie

例如,設置 Path=/docs,則如下地址都會匹配:

  • /docs
  • /docs/Web/
  • /docs/Web/HTTP
SameSite Cookies

SameSite Cookie容許服務器要求某個cookie在跨站請求時不會被髮送,從而能夠阻止跨站請求僞造攻擊(CSRF)

SameSite 能夠有下面三種值:

  • Strict 僅容許一方請求攜帶 Cookie,即瀏覽器將只發送相同站點請求的 Cookie,即當前網頁 URL 與請求目標 URL 徹底一致。
  • Lax 容許部分第三方請求攜帶 Cookie
  • None 不管是否跨站都會發送 Cookie

以前默認是 None 的,Chrome80 後默認是 Lax。

好文推薦:http://www.javashuo.com/article/p-rdwvufau-mw.html

session

session 是一種維持客戶端與服務器端會話的機制

可是與 cookie 把會話信息保存在客戶端本地不同,session 把會話保留在服務端

許多 web應用中,session 機制就是經過 cookie 來實現的。固然還能夠用其餘方式來實現。

cookie 與 session 的區別。
  1. cookie 是瀏覽器提供的一種緩存機制,它能夠用於維持客戶端與服務端之間的會話
  2. session 指的是維持客戶端與服務端會話的一種機制,它能夠經過 cookie 實現,也能夠經過別的手段實現。
  3. 若是用 cookie 實現會話,那麼會話會保存在客戶端瀏覽器中
  4. session 機制提供的會話是保存在服務端的

(面試題目)在地址欄鍵入 URL 後,網絡世界發生了什麼?

關鍵詞: 訪問 DNS 服務器獲取 IP 地址三次握手創建 TCP 鏈接本機發送 HTTP 請求服務器響應並返回數據瀏覽器渲染顯示

首先咱們要訪問 DNS 服務器得到網站對應的 IP 地址

拿到網站的 IP 地址後就能夠與該網站的服務器創建 TCP 鏈接(須要進行三次握手

三次握手創建鏈接後,本機就能夠向服務器發送 HTTP 請求

服務器接受到了請求會作出相應的響應,把請求的數據發送給本機瀏覽器,最終瀏覽器把服務器響應的數據渲染顯示出來

(面試題目) Post 和 Get 的區別

  • Get 請求能緩存,Post 不能
  • Post 相對 Get 安全一點點,由於Get 請求都包含在 URL 裏,且會被瀏覽器保存歷史紀錄,Post 不會,可是在抓包的狀況下都是同樣的。
  • Post 能夠經過 request body來傳輸比 Get 更多的數據,Get 沒有這個技術
  • URL有長度限制,會影響 Get 請求,可是這個長度限制是瀏覽器規定的,不是 RFC 規定的
  • Post 支持更多的編碼類型且不對數據類型限制

其餘方面參考:

https://juejin.im/post/5ddff9565188256eaf01dee4#heading-2

http://www.javashuo.com/article/p-avjgoedh-cc.html

[高德一面]一個 tcp 鏈接能發幾個 http 請求?

大佬原文地址戳我>>

若是是 HTTP 1.0 版本協議,通常狀況下,不支持長鏈接,所以在每次請求發送完畢以後,TCP 鏈接即會斷開,所以一個 TCP 發送一個 HTTP 請求。

可是有一種狀況能夠將一條 TCP 鏈接保持在活躍狀態,那就是經過 Connection 和 Keep-Alive 首部,在請求頭帶上 Connection: Keep-Alive,而且能夠經過 Keep-Alive 通用首部中指定的,用逗號分隔的選項調節 keep-alive 的行爲,若是客戶端和服務端都支持,那麼其實也能夠發送多條,不過此方式也有限制,能夠關注《HTTP 權威指南》4.5.5 節對於 Keep-Alive 鏈接的限制和規則。

HTTP 1.1 版本協議,默認鏈接都是長鏈接(想斷開則指定 Connection 爲 close),所以只要 TCP 鏈接不斷開,即可以一直髮送 HTTP 請求,持續不斷,沒有上限;
一樣,若是是 HTTP 2.0 版本協議,支持多用複用,一個 TCP 鏈接是能夠併發多個 HTTP 請求的,一樣也是支持長鏈接,所以只要不斷開 TCP 的鏈接,HTTP 請求數也是能夠沒有上限地持續發送。

本文先整理這麼多吧,反正一次也消化不完。

若是喜歡本文但願能點個贊~

固然能夠關注我來獲取後續文章

也能夠關注我我的博客

還也能夠關注我公衆號「九零後重慶崽兒」。

brand.jpg

相關文章
相關標籤/搜索