《图解HTTP》全文笔记梳理
-按層學。學每一層中的協議時一定要看此協議的英文全稱(所以此文章整理讀書筆記時有意記錄了協議的全稱,因為這正是我欠缺的地方~)
-串聯各層。(多看網絡應用的文章)
第一章:了解Web及網絡基礎
1. Web使用一種名為HTTP(HyperText Transfer Protocol,超文本傳輸協議)的協議作為規范,完成從客戶端到服務器端等一系列運作流程。
2. 為知識共享而規劃Web
最初設想的基本理念:借助多文檔之間相互關聯形成的超文本(HyperText),連成可相互參閱的WWW(World Wide Web,萬維網)。
WWW的三項構建技術:
- 頁面文本標記語言HTML(HyperText Markup Language,超文本標記語言)
- 作為文檔傳遞協議的HTTP
- 指定文檔所在地址的URL(Uniform Resource Locator,統一資源定位符)
3. TCP/IP:
NIC(Network Interface Card,網絡適配器)即網卡。
4. 與HTTP關系密切的協議:IP、TCP和DNS
- IP協議:把各種數據包傳送給對方。
- TCP協議:
- DNS服務:負責域名解析
5. URI和URL
- URI 就是由某個協議方案表示的資源的定位標識符。協議方案是指訪問資源所使用的協議類型名稱。
eg:采用HTTP協議時,協議方案就是http。 - URI用字符串標識某一互聯網資源,而URL表示資源的地點(互聯網上所處的位置)。
- URL 是URI 的子集
第二章:簡單的HTTP協議
1. 通過“請求-響應”的交換達成通信
2. HTTP不保存狀態
1.無狀態的優點:HTTP協議設計的很簡單,就能更快的處理大量事務,確保協議的可伸縮性;由于不必保存狀態,自然可減少服務器的 CPU 及內存資源的消耗。從另一側面來說,也正是 因為 HTTP 協議本身是非常簡單的,所以才會被應用在各種場景里。
2. 無狀態的缺點:無法根據之前的狀態進行本次的請求處理(網站需保存用戶的狀態) —— 引入Cookie技術。
3. HTTP/1.1中可用的方法(告知服務器意圖的HTTP方法)(8個方法)(方法名區分大 小寫,注意要用大寫字母)
此方法自身不帶驗證機制,任何人都能上傳文件,存在安全性問題,因此一般的Web網站不使用該方法。若配合Web應用程序的驗證機制,或架構設計采用REST(REpresentational State Transfer,表征狀態轉移)標準的同類Web網站,就可能會開放使用PUT方法。
不返回報文主體部分。用于確認URI的有效性及資源更新的日期時間等。
與PUT相反的方法。
來查詢針對請求 URI 指定的資源支持的方法。
讓 Web 服務器端將之前的請求通信環回給客戶端的方法。
CONNECT 方法要求在與代理服務器通信時建立隧道,實現用隧道協議進行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接 層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容 加 密后經網絡隧道傳輸。
4. 持久連接 — 減少通信量
每次的請求都會造成無謂的 TCP 連接建立和斷開,增加通信量的開銷。
5. 管線化
持久連接使得多數請求以管線化(pipelining)方式發送成為可能。從前發送請求后需等待并收到響應,才能發送下一個請求。管線化技術出現后,不用等待響應亦可直接發送下一個請求。—— 同時并行發送多個請求,而不需要一個接一個地等待響應了。
6. 使用 Cookie 的狀態管理
第三章:HTTP報文內的HTTP信息
1. 請求報文和響應報文的結構
2. 編碼 — 提升傳輸速率
- 向待發送郵件內增加附件時,為了使郵件容量變小,我們會先用 ZIP 壓縮文件之后再添加附件發送。HTTP 協議中有一種被稱為內容編碼 的功能也能進行類似的操作。
- 內容編碼指明應用在實體內容上的編碼格式,并保持實體信息原樣壓縮。內容編碼后的實體由客戶端接收并負責解碼。
- 常用的內容編碼:gzip(GNU zip);compress(UNIX 系統的標準壓縮);deflate(zlib);identity(不進行編碼)
- 在傳輸大容量數據時,通過把數據分割成 多塊,能夠讓瀏覽器逐步顯示頁面。 這種把實體主體分塊的功能稱為分塊傳輸編碼(Chunked Transfer Coding)
3. 發送多種數據的多部分對象集合
發送郵件時,我們可以在郵件里寫入文字并添加多份附件。這是因為 采用了 MIME(Multipurpose Internet Mail Extensions,多用途因特網郵件擴展)機制,它允許郵件處理文本、圖片、視頻等多個不同類型的 53數據。例如,圖片等二進制數據以 ASCII 碼字符串編碼的方式指明, 就是利用 MIME 來描述標記數據類型。而在 MIME 擴展中會使用一 種稱為多部分對象集合(Multipart)的方法,來容納多份不同類型的數據。
相應地,HTTP 協議中也采納了多部分對象集合,發送的一份報文主體內可含有多類型實體。通常是在圖片或文本文件等上傳時使用。
在 HTTP 報文中使用多部分對象集合時,需要在首部字段里加上 Content-type。
多部分對象集合包含的對象:
- multipart/form-data:在 Web 表單文件上傳時使用。
- multipart/byteranges 狀態碼 206(Partial Content,部分內容)響應報文包含了多個范圍的內容時使用。
4. 獲取部分內容的范圍請求
可恢復的機制。所謂恢復是指能從之前下載中斷處恢復下載。
- 5001~10 000 字節: Range: bytes=5001-10000
- 從 5001 字節之后全部的: Range: bytes=5001-
- 從一開始到 3000 字節和 5000~7000 字節的多重范圍:Range: bytes=-3000, 5000-7000
5. 內容協商返回最合適的內容
同一個 Web 網站有可能存在著多份相同內容的頁面。比如英語版和中文版的 Web 頁面,它們內容上雖相同,但使用的語言卻不同。 當瀏覽器的默認語言為英語或中文,訪問相同 URI 的 Web 頁面時, 則會顯示對應的英語版或中文版的 Web 頁面。這樣的機制稱為內容協商(Content Negotiation)。
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
- 服務器驅動協商(Server-driven Negotiation)
由服務器端進行內容協商。以請求的首部字段為參考,在服務器端自動處理。但對用戶來說,以瀏覽器發送的信息作為判定的依據,并不一定能篩選出最優內容。 - 客戶端驅動協商(Agent-driven Negotiation)
由客戶端進行內容協商的方式。用戶從瀏覽器顯示的可選項列表中手動選擇。還可以利用 JavaScript 腳本在 Web 頁面上自動進行上述選擇。比如按 OS 的類型或瀏覽器類型,自行切換成 PC 版頁面或手機版頁面。 - 透明協商(Transparent Negotiation)
是服務器驅動和客戶端驅動的結合體,是由服務器端和客戶端各自進行內容協商的一種方法。
第四章:返回結果的HTTP狀態碼
HTTP 狀態碼負責表示客戶端 HTTP 請求的返回結果、標記服務器端的處理是否正常、通知出現的錯誤等工作。狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。借助狀態碼,用戶可以知道服務器端是正常處理了請求,還是出現了錯誤。
1. 狀態碼的類別
一般在只需要從客戶端往服務器發送信息,而對客戶端不需要發送新信息內容的情況下使用。
第五章:與HTTP協作的Web服務器
一臺 Web 服務器可搭建多個獨立域名的 Web 網站,也可作為通信路徑上的中轉服務器提升傳輸效率。
1. 通信數據轉發程序 :代理、網關、隧 道
HTTP 通信時,除客戶端和服務器以外,還有一些用于通信數據轉發的應用程序,例如代理、網關和隧道。它們可以配合服務器工作。
代理是一種有轉發功能的應用程序,它扮演了位于服務器和客戶端“中間人”的角色,接收由客戶端發送的請求并轉發給服務器,同時 也接收服務器返回的響應并轉發給客戶端。
使用代理服務器的理由有:利用緩存技術(稍后講解)減少網絡帶寬的流量,組織內部針對特定網站的訪問控制,以獲取訪問日志為主要目的等等。
代理有多種使用方法,按兩種基準分類。一種是是否使用緩存,另一種是是否會修改報文。
網關是轉發其他服務器通信數據的服務器,接收從客戶端發送來的請求時,它就像自己擁有資源的源服務器一樣對請求進行處理。有時客戶端可能都不會察覺,自己的通信目標是一個網關。
利用網關可以由 HTTP 請求轉化為其他協議通信。
網關的工作機制和代理十分相似。而網關能使通信線路上的服務器提供非 HTTP 協議服務。 利用網關能提高通信的安全性,因為可以在客戶端與網關之間的通信線路上加密以確保連接的安全。比如,網關可以連接數據庫,使用 SQL語句查詢數據。另外,在 Web 購物網站上進行信用卡結算時, 網關可以和信用卡結算系統聯動。
隧道是在相隔甚遠的客戶端和服務器兩者之間進行中轉,并保持雙方 通信連接的應用程序。
2. 保存資源的緩存
- 緩存是指代理服務器或客戶端本地磁盤內保存的資源副本。利用緩存可減少對源服務器的訪問,因此也就節省了通信流量和通信時間。
- 緩存服務器是代理服務器的一種,并歸類在緩存代理類型中。換句話說,當代理轉發從服務器返回的響應時,代理服務器將會保存一份資源的副本。
- 緩存服務器的優勢在于利用緩存可避免多次從源服務器轉發資源。因此客戶端可就近從緩存服務器上獲取資源,而源服務器也不必多次處理相同的請求了。
客戶端的緩存
第六章:HTTP首部
使用首部字段是為了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。
七、確保Web安全的HTTPS(Secure,超文本傳輸安全協議)
在 HTTP 協議中有可能存在信息竊聽或身份偽裝等安全問題。使用 HTTPS 通信機制可以有效地防止這些問題。
加密的對象可以有這么幾個:
- 通信的加密:HTTP 協議中沒有加密機制,但可以通過和 SSL(Secure Socket Layer,安全套接層)或 TLS(Transport Layer Security,安全層傳輸協議)的組合使用, 加密 HTTP 的通信內容。
- 內容的加密:
HTTP+ 加密 + 認證 + 完整性保護 = HTTPS
HTTPS 是身披 SSL 外殼的 HTTP
加密方法:
HTTPS 采用混合加密機制
HTTPS 采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機制。若密鑰能夠實現安全交換,那么有可能會考慮僅使用公開密鑰加密來通信。但是公開密鑰加密與共享密鑰加密相比,其處理速度要慢。 所以應充分利用兩者各自的優勢,將多種方法組合起來用于通信。在交換密鑰環節使用公開密鑰加密方式,之后的建立通信交換報文階段則使用共享密鑰加密方式。
業務流程為:
數字證書認證機構在判明提出申請者的身份之后,會對已申請的公開密鑰做數字簽名,然后分配這個已簽名的公開密鑰,并將該公開密鑰放入公鑰證書后綁定在一起。
公鑰證書也可叫做數字證書或直接稱為證書。
- 認證服務器的公開密鑰的是真實有效的數字證書認證機構。
- 服務器的公開密鑰是值得信賴的。
使用通信方式時,如何安全轉交是一件很困難的事,因此,多數瀏覽器開發商發布版本時,會事先在內部植入常用認證機關的公開密鑰。
在以上流程中,應用層發送數據時會附加一種叫做 MAC(Message Authentication Code)的報文摘要。MAC 能夠查知報文是否遭到篡改,從而保護報文的完整性。
HTTPS 的通信步驟:
HTTPS 比 HTTP 要慢 2 到 100 倍。
九、基于HTTP的功能追加協議
1. Ajax(Asynchronous JavaScript and XML, 異 步 JavaScript 與 XML技 術)
是一種有效利用 JavaScript 和 DOM(Document Object Model,文檔對象模型)的操作,以達到局部 Web 頁面替換加載的異步通信手段。和以前的同步通信相比,由于它只更新一部分頁面,響應中傳輸的數據量會因此而減少,這一優點顯而易見。
Ajax 的核心技術是名為 XMLHttpRequest 的 API,通過 JavaScript 腳本語言的調用就能和服務器進行 HTTP 通信。借由這種手段,就能從已加載完畢的 Web 頁面上發起請求,只更新局部頁面。 而利用 Ajax 實時地從服務器獲取內容,有可能會導致大量請求產生。另外,Ajax 仍未解決 HTTP 協議本身存在的問題。
十、構建Web內容的技術
1. 更易控制 HTML 的 DOM
DOM 是用以操作 HTML文檔和 XML文檔的 API(Application Programming Interface,應用編程接口)。使用 DOM 可以將 HTML內 的元素當作對象操作,如取出元素內的字符串、改變那個 CSS 的屬性等,使頁面的設計發生改變。
通過調用 JavaScript 等腳本語言對 DOM 的操作,可以以更為簡單的方式控制 HTML的改變。
2. Servlet
Servlet 是一種能在服務器上創建動態內容的程序。Servlet 是用 Java 語言實現的一個接口,屬于面向企業級 Java(JavaEE,Java Enterprise Edition)的一部分。
3. XML可擴展標記語言
XML(eXtensible Markup Language,可擴展標記語言)是一種可按應用目標進行擴展的通用標記語言。旨在通過使用 XML,使互聯網數據共享變得更容易。 XML和 HTML都是從標準通用標記語言 SGML(Standard Generalized 192
Markup Language)簡化而成。與 HTML相比,它對數據的記錄方式做了特殊處理。
XML和 HTML一樣,使用標簽構成樹形結構,并且可自定義擴展標簽。從 XML文檔中讀取數據比起 HTML更為簡單。由于 XML的結構基本上都是用標簽分割而成的樹形結構,因此通過語法分析器 (Parser)的解析功能解析 XML結構并取出數據元素,可更容易地對數據進行讀取。
4. JavaScript 衍生的輕量級易用 JSON
JSON(JavaScript Object Notation)是一種以 JavaScript(ECMAScript)的對象表示法為基礎的輕量級數據標記語言。能夠處理的數據類型有 false/null/true/ 對象 / 數組 / 數字 / 字符 串,這 7 種類型。 {“name”: “Web Application Security”, “num”: “TR001”} JSON 讓數據更輕更純粹,并且 JSON 的字符串形式可被 JavaScript 輕易地讀入。當初配合 XML使用的 Ajax 技術也讓 JSON 的應用變得更為廣泛。另外,其他各種編程語言也提供豐富的庫類,以達到輕便 操作 JSON 的目的。
十一、Web的攻擊技術
簡單的 HTTP 協議本身并不存在安全性問題,因此協議本身幾乎不會成為攻擊的對象。應用 HTTP 協議的服務器和客戶端,以及運行在服務器上的 Web 應用等資源才是攻擊目標。 目前,來自互聯網的攻擊大多是沖著 Web 站點來的,它們大多把 Web 應用作為攻擊目標。
對 Web 應用的攻擊模式有以下兩種:
- 以服務器為目標的主動攻擊
- 以服務器為目標的被動攻擊
1. 跨站腳本攻擊(Cross-Site Scripting,XSS)
是指通過存在安全漏洞的 Web 網站注冊用戶的瀏覽器內運行非法的 HTML標簽或 JavaScript 進行的一種攻擊。動態創建的 HTML部分有可能隱藏著安全漏洞。就 這樣,攻擊者編寫腳本設下陷阱,用戶在自己的瀏覽器上運行時,一 不小心就會受到被動攻擊。
2. SQL 注入攻擊
3. DoS 攻擊(Denial of Service attack)
是一種讓運行中的服務呈停止狀態的攻擊。有時也叫做服務停止攻擊或拒絕服務攻擊。DoS 攻擊的對象不僅限于 Web 網站,還包括網絡設備及服務器等。
4. 中間人攻擊
由于 HTTP 協議無法證明通信的報文完整性,因此,在請求或響應送出之后直到對方接收之前的這段時間內,即使請求或響應的內容遭到篡改,也沒有辦法獲悉。
像這樣,請求或響應在傳輸途中,遭攻擊者攔截并篡改內容的攻擊稱為中間人攻擊(Man-in-the-Middle attack, MITM)。
應對方法:MD5/SHA-1 散列值校驗;確認文件的數字簽名。都有問題,如果 MD5 本身被篡改,無法檢測到。
文章中的圖片均來自《圖解HTTP》
總結
以上是生活随笔為你收集整理的《图解HTTP》全文笔记梳理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 头条面经(同学一)
- 下一篇: Typora,世界上最漂亮的写作App