《圖解HTTP》讀書筆記

《圖解HTTP》讀書筆記

第一章:瞭解Web及網路基礎

TCP/IP協議

把互聯網想關聯的協議集合起來總稱爲TCP/IP協議 TCP/IP 協議族按層次分爲:應用層,傳輸層,網絡層,數據鏈路層web

應用層

決定了向用戶提供應用服務時通訊的活動。 TCP/IP 協議族內預存了各種通用的應用服務,好比:FTPDNS 服務就是其中兩類 HTTP 協議也處於該層數據庫

傳輸層

傳輸層對上層應用層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸。 在傳輸層有兩個性質不一樣的協議:TCP(Transmission Control Protocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報協議)瀏覽器

網路層(又名網絡互聯層)

網路層用來處理網絡上流動的數據包。數據包是網絡傳輸的最小數據單位,該層規定了經過怎樣的路徑(所謂的傳輸路線)到達對方的計算機,並把數據包傳送給對方。與對方計算機之間經過多臺計算機或網絡設備進行傳輸時,網絡層所起的做用就是在衆多的選項內選擇一條傳輸路線。緩存

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

用來處理鏈接網絡的硬件部分。包括操做系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分,硬件上的範疇均在鏈路層的做用範圍以內。安全

TCP/IP 通訊傳輸流

Xnip2019-08-15_08-10-59

利用TCP/IP 協議族進行通訊時,會經過分層順序與對方進行通訊,發送端從應用層往下走,接收端則從應用層往上走。 發送端在層與層之間傳輸數據時,沒通過一層時一定會被打上一個該層所屬的首部信息,反之,接收端在層與層之間傳輸數據時,每通過一層時會把對應的首部消去。- 這種把數據信息包裝起來的作法稱爲封裝。服務器

確保可靠性的 TCP 協議

按層次分,TCP位於傳輸層,提供可靠的字節流服務(字節流:爲了方便傳輸,將大塊數據分割成以報文段爲單位的數據包進行管理)。 TCP 協議爲了更容易傳送大數據才把數據分割,並且 TCP 協議可以確認數據最終是否送達到對方。網絡

如何確保數據能到達目標?

TCP 協議採用了三次握手策略。用TCP協議把數據包送出去之後,TCP不會對傳送後的狀況置之不理,它必定會向對方確認是否成功送達,握手過程使用了TCP的標誌:SYN(synchronize)和 ACK(acknowledgement)。 發送端首先先發送一個帶SYN標誌的數據包給對方,接收端收到後,回傳一個帶有 SYN/ACK 標誌的數據包以示傳達確認信息,最後,發送端再回傳一個帶 ACK 標誌的數據包,表明握手結束。若捂手過程當中在某個階段莫名中斷,TCP協議會在此以相同的順序發送相同的數據包異步



Xnip2019-08-15_13-49-34

負責域名解析的 DNS 服務

DNS(Domain Name System)服務是和HTTP協議同樣位於應用層的協議,它提供域名到IP地址之間的解析服務。大數據

瀏覽一個網址的全過程:網站

Xnip2019-08-16_07-03-22

URL(Uniform Resource Locator,統一資源定位符) 和 URI(統一資源標示符)

URL 是訪問web頁面須要輸入的網頁地址 URI 是由某個協議方案表示的資源的定位標示符,協議方案是指訪問資源所使用的協議類型名稱

URI 用字符串標識某一互聯網資源,而URL表示資源的地點(互聯網上所處的位置),可見 URL 是 URI 的子集。

第二章:簡單的HTTP協議

HTTP請求報文由:請求方法、請求URI、協議版本、可選的請求首部字段和內容實體 構成

Xnip2019-08-16_07-24-28

HTTP 是一種不保存狀態,即無狀態協議。

HTTP 協議自身不對請求和響應之間的通訊狀態進行保存。目的是爲了更快的處理大量事務,確保協議的可伸縮性。 後來有一些場景須要保存客戶端的狀態,好比登陸狀態,因而引入了 Cookie 技術。有了 Cookie 再用HTTP協議通訊,就能夠管理狀態了。

告知服務器意圖的HTTP方法

  • GET : 獲取
  • POST: 傳輸實體主體
  • PUT : 傳輸文件
  • HEAD: 得到報文首部
  • DELETE: 刪除文件
  • OPTIONS: 詢問支持的方法
  • TRACE:追蹤路徑
  • CONNECT:要求用隧道協議鏈接代理

持久鏈接節省通訊量

HTTP 初始版本,每進行一次HTTP通訊就要斷開一次TCP鏈接,當年數據小沒問題,但隨着HTTP的普及,HTTP所傳輸的內容越來越多,每次請求都會形成無謂的TCP鏈接創建和斷開,增長通訊量的開銷。

爲解決上述TCP鏈接的問題,HTTP/1.1 和 一部分 HTTP/1.0 相處了持久鏈接的方法,特色是:只要任意一端沒有明確的提出斷開鏈接,則保持TCP鏈接狀態。

管線化

持久鏈接使得多數請求以管線化(pipelining)方式發送成爲可能,之前發送請求後需等待並受到響應,才能發送下一個請求。管線化技術出現後,不用等待響應亦可直接發送下一個請求。這樣就能作到同時並行發送多個請求。而不須要一個接一個地等待響應了。

第三章:HTTP報文內的HTTP信息

請求報文和響應報文的首部內容由如下數據組成:

  • 請求行 包含用於請求的方法,請求 URI 和 HTTP 版本

  • 狀態行 包含響應結果的狀態碼,緣由短語和HTTP版本

  • 首部字段 包含請求和響應的各類條件和屬性的各種首部 通常有四種首部:通用首部,請求首部,響應首部和實體首部

  • 其餘 可能包含HTTP的RFC 裏未定義的首部(Cookie等)

編碼提高傳輸速率

報文

是HTTP通訊中的基本單位,由8位字節流組成,經過 HTTP 通訊傳輸

實體

做爲請求或響應的有效載荷數據(補充項)被傳輸,其內容由實體首部和實體主體組成

HTTP 報文的主體用於傳輸請求或響應的實體主體。一般,報文主體等於實體主體。只有當傳輸中進行編碼操做時,實體主體的內容發生變化,才致使它和報文主體產生差別。

第四章:返回結果的HTTP狀態碼

狀態碼的類別

類別 緣由短語
1xx Infomational(信息性狀態碼) 接收的請求正常處理
2xx Success(成功狀態碼) 請求正常處理完畢
3xx Redirection(重定向狀態碼) 須要進行附加操做以完成請求
4xx Client Error(客戶端狀態錯誤碼) 服務器沒法處理請求
5xx Server Error(服務器狀態碼) 服務器處理請求出錯

常見錯誤碼

2xx - 成功

  • 200 OK : 請求被正常處理。
  • 204 No Content : 請求成功但返回的響應報文中不含實體的主體部分,通常只須要從客戶端往服務器發送信息,而對客戶端不須要發送新信息內容的狀況下使用。
  • 206 Partial Content : 客戶端進行了範圍請求,服務器成功執行了這部分GET請求,響應報文中包含由 Content-Range 指定範圍的實體內容

3xx - 重定向

  • 301 Moved Permanently : 永久性重定向,該狀態碼錶示請求的資源已被分配了新的URI,之後應使用資源如今所指的URI。
  • 302 Found : 臨時性重定向,表示請求的資源已被分配了新的URI,但願用戶本次能使用新的URI訪問
  • 303 See Other : 表示因爲請求對應的資源存在着另外一個URI,應使用GET方法定向獲取請求的資源。
  • 304 Not Modified : 表示客戶端發送附帶條件的請求時,服務端容許請求訪問資源,但未知足條件的狀況。
  • 307 Temporary Redirect : 臨時重定向

4xx - 客戶端錯誤

  • 400 Bad Request : 請求報文中存在語法錯誤,當錯誤發生時,需修改請求的內容後再次發送請求。
  • 401 Unauthorized : 表示發送的請求須要有同感HTTP認證的認證信息。
  • 403 Forbidden : 代表對請求資源的訪問被服務器拒絕了。例如未獲取到文件系統的訪問權限
  • 404 Not Found : 代表服務器上沒法找到請求的資源。

5xx - 服務器錯誤

  • 500 Internal Server Error : 服務器端在執行請求時發生了錯誤。
  • 503 Service Unavailable :代表服務器暫時處於超負載或正在進行停機去維護,如今沒法處理請求。

第五章:與 HTTP 協做的 Web 服務器

一臺 Web 服務器可搭建多個獨立域名的 Web 網站,也可做爲通訊路徑上的中轉服務器提高傳輸速率

代理

代理是一種由轉發功能的應用程序,扮演了位於服務器和客戶端中間人的角色,接收由客戶端發送的請求並轉發給服務器,同時也接收服務器返回的響應並轉發給客戶端 分緩存代理(緩存從源服務器獲取的數據)和透明代理(對請求不作任何加工)

網關

網關是轉發其餘服務器通訊數據的服務器,接收從客戶端發送來的請求時,它像本身擁有資源的源服務器同樣對請求進行處理。 工做機制和代理相似,而網關可以使通訊線路上的服務器提供非HTTP協議服務。利用網關可以提升通訊的安全性,由於能夠在客戶端與網關之間的通訊線路上加密以確保鏈接的安全。

隧道

隧道是在相隔甚遠的客戶端和服務器二者之間進行中轉,並保持雙方通訊鏈接的應用程序。 可按要求創建一條與其餘服務器的通訊線路,屆時使用 SSL 等加密手段進行通訊。隧道的目的是確保客戶端與服務器進行安全的通訊。

第六章:HTTP首部

HTTP 協議的請求和響應報文中必含HTTP首部,首部內容爲客戶端和服務器分別處理請求和響應提供所須要的信息。

請求報文

HTTP請求報文由:方法,URI,HTTP版本,HTTP首部字段等部分構成。

響應報文

HTTP響應報文由:HTTP版本,狀態碼(數字和緣由短語),HTTP首部字段等3部分構成。

HTTP首部字段

首部字段由首部字段名和字段值構成,中間用冒號 :分割。 例如HTTP首部中以 Content-Type 這個字段來表示報文主體的對象類型。

通用首部字段

Xnip2019-08-18_10-53-07

請求首部字段

Xnip2019-08-18_10-56-54

響應首部字段

Xnip2019-08-18_11-07-46

實體首部字段

Xnip2019-08-18_11-08-27

其餘首部字段: HTTP 首部字段是能夠自行擴展的

第七章:確保Web安全的HTTPS

HTTP 的缺點

  • 通訊使用明文(不加密),內容可能會被竊聽
  • 不驗證通訊方的身份,所以有可能遭遇假裝
  • 沒法證實報文的完整性,因此有可能已遭篡改

####加密處理防止被竊聽

通訊的加密

HTTP 協議中沒有加密機制,但能夠經過和SSL(Secure Socket Layer,安全套接層)或 TLS(Transport Layer Security,安全傳輸層協議)的組合使用,加密HTTP的通訊內容。

用SSL創建安全通訊線路以後,就能夠在這條線路上進行HTTP通訊的。與SSL組合使用的HTTP被稱爲 HTTPS(HTTP Secure,超文本傳輸安全協議)

內容的加密

經過使用證書,以證實通訊方就是意料中的服務器。

HTTP+加密+認證+完整性保護 = HTTPS

一般,HTTP直接和TCP通訊,當使用 SSL 時,則演變成先和 SSL 通訊,再由SSL 和 TCP 通訊了。

SSL 是獨立於HTTP的協議,因此不光是HTTP協議,其餘運行在應用層的SMTP和Telnet等協議都可配合SSL協議使用。能夠說 SSL 是當今世界上應用最爲普遍的網絡安全技術。

HTTPS 採用共享密鑰加密和公開密鑰加密二者並用的混合加密機制。

使用SSL速度不可避免的會變慢:1.通訊慢 2.大量消耗CPU和內存等資源,致使處理速度變慢。

第八章:確認訪問用戶身份的認證

認證的幾種常見方式:

  • 密碼:只有本人才會知道的字符串信息
  • 動態令牌:僅限本人持有的設備內顯示的一次性密碼
  • 數字證書:僅限本人(終端)持有的信息
  • 生物認證:指紋和虹膜等本人的生理信息
  • IC卡等:僅限本人持有的信息

HTTP/1.1 使用的認證方式:

  1. BASIC認證(基本認證)
  2. DIGEST認證(摘要認證)
  3. SSL客戶端認證
  4. FormBase認證(基於表單認證)

第九章:基於HTTP的功能追加協議

使用HTTP協議存在以下瓶頸:

  • 一條鏈接上只可發送一個請求
  • 請求只能從客戶端開始,客戶端不能夠接收除響應之外的指令
  • 請求/響應首部未經壓縮就發送。首部信息越多延遲越大
  • 發送冗長的首部,每次互相發送相同的首部形成的浪費較多
  • 可任意選擇數據壓縮格式。非強制壓縮發送

Ajax 的解決方法

Ajax(Asynchronous JavaScript and XML, 異步JavaScript與XML技術) 是一種有效利用JavaScript 和 DOM(Document Object Model) 的操做,以達到局部Web頁面替換加載的異步通訊手段。因爲它只更新一部分界面,響應中傳輸的數據量會所以而減小。

Comet 的解決方法

一般,服務端接收到請求,在處理完畢後就會當即返回響應,但爲了實現推送功能,Comet會先將響應置於掛起狀態,當服務端有內容更新時,再返回該響應。所以,服務端一旦有更新,就能夠當即反饋給客戶端。

SPDY 的目標

SPDY 沒有徹底改寫HTTP協議,而是再TCP/IP的應用層與傳輸層之間經過新加會話層的形式運做。同時,考慮到安全性問題,SDPY規定通訊中使用SSL。

Xnip2019-08-22_08-54-17

SDPY的設計圖示

使用 SDPY後,HTTP協議額外得到如下功能:

多路複用流

經過單一的TCP鏈接,能夠無限制處理多個HTTP請求。全部請求的處理都在一條TCP鏈接上完成,所以TCP處理效率獲得提升

賦予請求優先級
壓縮HTTP首部
推送功能
服務器提示功能

服務器能夠主動提示客戶端請求所需的資源。

WebSocket

Web 瀏覽器與 Web 服務器之間全雙工通訊標準。一旦Web服務器與客戶端之間創建起 WebSocket 協議的通訊鏈接,以後全部的通訊都依賴這個專用協議進行,通訊過程當中可互相發送JSON,XML,HTML或圖片等任意格式的數據。

WebSocket 通訊的主要特色:

  • 推送功能
  • 減小通訊量

第十章:構建Web內容的技術

HTML (HyperText Markup Language,超文本標記語言)。

CSS(Cascading Style Sheets,層疊樣式表),能夠指定如何展示HTML內的各類元素,屬於樣式表標準之一。

動態HTML(Dynamic HTML)

經過調用客戶端腳本語言JavaScript,實現對HTML的Web頁面的動態改造。利用 DOM(Document Object Model,文檔對象模型)可指定欲發生動態變化的HTML元素。

Web應用

數據發佈的格式及語言·

  • XML
  • RSS
  • JSON

第十一章:Web的攻擊技術

HTTP 不具有必要的安全功能

SQL注入攻擊

對Web應用使用的數據庫,經過運行非法的SQL而產生的攻擊。

HTTP首部注入攻擊

攻擊者經過在響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊。

  • 設置任何Cookie信息
  • 重定向至任意URL
  • 顯示任意的主體(HTTP響應截斷攻擊)

目標遍歷攻擊

對本無心公開的文件目錄經過非法截斷其目錄路徑後,達成訪問目的的一種攻擊。

因設置或設計上的缺陷引起的安全漏洞

密碼破解

算出密碼,突破認證

DoS攻擊

一種讓運行中的服務呈中止狀態的攻擊。

  • 集中利用訪問請求形成資源過載,資源用盡的同時,實際上服務也就呈中止狀態
  • 經過攻擊安全漏洞使服務中止

單純來說就是發生大量合法請求,服務器很難分辨何爲正常請求,何爲攻擊請求,所以很難防止DoS攻擊。 多態計算機發起的DoS攻擊成爲 DDoS攻擊(Distributed Denial of Service attack)。

相關文章
相關標籤/搜索