本文的題目整理自大佬文章,語句本身稍做處理,其餘內容來自網絡和《圖解 HTTP》一書,都是網絡相關的。
HyperText Transfer Protocol,超文本傳輸協議。TCP/IP
協議族的一個子集。用於客戶端與服務器間的通訊。是一種無狀態協議
。爲了實現保持狀態的功能,引入了Cookie
技術。目前主流版本HTTP 1.0(普遍使用在服務器端)
和HTTP 1.1(當前最新版)
。
計算機和網絡設備須要相互通訊,雙方必須基於相同的方法。好比,如何探測到通訊設備、由哪一方現發起通訊、使用哪一種語言通訊、怎樣結束通訊等都須要事先肯定規則,咱們把這種規則稱之爲
協議(protocol)
。
TCP/IP
協議是互聯網相關連的協議的集合的總稱,包括 TCP、IP、UDP、HTTP、DNS、FTP...
等等面試
TCP/IP 協議的其餘兩種說法:api
IP
和 TCP
兩種協議;IP
協議在通訊過程當中,使用到的協議族的統稱。
TCP/IP
協議族中最重要的一點就是分層。
TCP/IP
協議族分爲 4 層:跨域
分層後的好處:若是互聯網只由一個協議統籌,某個地方須要改變設計時,就須要把全部的部分總體替換掉。分層以後,只須要把變更的層替換掉便可。把各層之間的接口設計後後,各層內部就能自由改動了。
瀏覽器
一、應用層緩存
應用層決定了向用戶提供應用服務時通訊的活動。安全
TCP/IP
協議族內置了各種通用的應用服務。如 FTP(File Transfer Protocol,文件傳輸協議)
和 DNS(Domain Name System,域名系統)
。 HTTP 協議也屬於應用層
。服務器
二、傳輸層cookie
爲「應用層」提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。網絡
該層的有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)
和 UDP(User Data Protocol,用戶數據報協議)
。
三、網絡層(又網絡互聯層)
該層用來處理在網絡上流動的數據包
。數據包是網絡傳輸的最小單位。
該層規定了經過怎樣的路徑(即傳輸路線
)到達對方計算機,並把數據包傳輸給對方。與對方計算機之間經過多臺計算機或者網絡設備進行傳輸時,網絡層的做用就是在衆多選項內選擇一條傳輸路線。
四、鏈路層
又名數據鏈路層,網絡接口層
用來處理鏈接網絡的硬件部分
。包括控制操做系統、硬件設備的驅動、NIC(網絡適配器)
及光纖等物理可見部分(還包括鏈接器等一切傳輸媒介)。
發送端從應用層往下走,接收端從應用層往上走。
服務器發送到用戶瀏覽器,並
存儲在本地
的一段通常不超過 4KB 的小型文本數據。
服務器指定 cookie 後,瀏覽器每次請求都會攜帶 cookie。
Cookie主要用於如下三個方面:
cookie
:HTTP
請求到服務器HTTP
請求時,在響應頭裏面添加一個 Set-Cookie
字段Cookie
Cookie
字段將 Cookie
信息發送給服務器。Cookie
:瀏覽器關閉以後它會被自動刪除,不須要指定過時時間(Expires
)或者有效期(Max-Age
)
注意:有的瀏覽器提供了會話恢復功能,即便關閉了瀏覽器,會話期 cookie
依然會被保存下來,就像沒關閉瀏覽器同樣
Cookie
:持久性Cookie
能夠指定一個特定的過時時間(Expires)
或有效期(Max-Age)
。
Secure
和 HttpOnly
標記標記爲 Secure 的Cookie只應經過被HTTPS協議加密過的請求發送給服務端。
爲避免跨域腳本 (XSS) 攻擊,經過 JavaScript 的 Document.cookie
API沒法訪問
帶有 HttpOnly
標記的Cookie,
Domain
和 Path
標識定義了Cookie的做用域.
Domain
標識指定了哪些主機能夠接受Cookie。若是不指定,默認爲當前文檔的主機(不包含子域名
)。若是指定了Domain,則通常包含子域名。
例如:設置 Domain = brandhuang.com
,則 cookie 也包含子啊子域名中,如 api.brandhuang.com
、static.brandhuang.com
等
Path
標識指定了主機下的哪些路徑能夠接受Cookie
例如,設置 Path=/docs,則如下地址都會匹配:
SameSite Cookie
容許服務器要求某個cookie在跨站請求時不會被髮送,從而能夠阻止跨站請求僞造攻擊(CSRF)
SameSite 能夠有下面三種值:
以前默認是 None 的,Chrome80 後默認是 Lax。
好文推薦:http://www.javashuo.com/article/p-rdwvufau-mw.html
session 是一種維持客戶端與服務器端會話的機制
。
可是與 cookie 把會話信息保存在客戶端本地不同,session 把會話保留在服務端
。
許多 web應用中,session 機制就是經過 cookie 來實現的。固然還能夠用其餘方式來實現。
關鍵詞:訪問 DNS 服務器
、獲取 IP 地址
、三次握手創建 TCP 鏈接
、本機發送 HTTP 請求
、服務器響應並返回數據
、瀏覽器渲染顯示
首先咱們要訪問 DNS 服務器
得到網站對應的 IP 地址
拿到網站的 IP 地址
後就能夠與該網站的服務器創建 TCP 鏈接
(須要進行三次握手
)
三次握手創建鏈接後,本機就能夠向服務器發送 HTTP 請求
服務器接受到了請求會作出相應的響應
,把請求的數據發送給本機瀏覽器,最終瀏覽器
把服務器響應的數據渲染顯示
出來
其餘方面參考:
https://juejin.im/post/5ddff9565188256eaf01dee4#heading-2
http://www.javashuo.com/article/p-avjgoedh-cc.html
大佬原文地址戳我>>
若是是 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 請求數也是能夠沒有上限地持續發送。
本文先整理這麼多吧,反正一次也消化不完。
若是喜歡本文但願能點個贊~
固然能夠關注我來獲取後續文章
也能夠關注我我的博客
還也能夠關注我公衆號「九零後重慶崽兒」。