图解HTTP(笔记)
1. 了解 Web 及網絡基礎
1.1?3項 WWW?構建技術
1)把 SGML 作為頁面的文本標記語言的 HTML;
2)作為文檔傳遞協議的 HTTP ;
3)指定文檔所在地址的 URL。
1.2?網絡基礎?TCP/IP
1.2.1 TCP/IP 是互聯網相關的各類協議族的總稱
1.2.2?TCP/IP 分層管理
應用層:決定了向用戶提供應用服務時通信的活動。
傳輸層:對上層應用層提供處于網絡連接中的兩臺計算機之間的數據傳輸。
網絡層:又名網絡互連層,用來處理在網絡上流動的數據包。
鏈路層:又名數據鏈路層,網絡接口層,用來處理連接網絡的硬件部分。
1.2.3?TCP/IP 通信傳輸流
1.2.4 與 HTTP 關系密切的協議:IP、TCP 和 DNS
1)負責傳輸的 IP 協議
IP 地址指明了節點被分配到的地址,MAC 地址是指網卡所屬的固定地址,ARP 根據通信方的 IP 地址就可以反查出對應的 MAC 地址。
2)確??煽啃缘?TCP?協議
為了準確無誤地將數據送達目標處,TCP 協議采用了三次握手(three-way handshaking)策略,握手過程中使用了 TCP 的標志(flag)、SYN(synchronize) 和 ACK(acknowledgement)。
3)負責域名解析的 DNS 服務
1.2.5?各協議與 HTTP 協議的關系
2. 簡單的 HTTP 協議
2.1?HTTP?協議用于客戶端和服務器端之間的通信,通過請求和響應的交換達成通信
請求報文的構成:
響應報文的構成:
2.2?HTTP 是無狀態的協議
HTTP 是無狀態的協議,它不對之前發生過的請求和響應的狀態進行管理。
2.3?告知服務器意圖的 HTTP 方法
1)GET:獲取資源
2)POST:傳輸實體主體
3)PUT:傳輸文件
4)HEAD:獲得報文首部
5)DELETE:刪除文件
6)OPTIONS:詢問支持的方法
7)TRACE:追蹤路徑
8)CONNECT:?要求用隧道協議連接代理
2.4 持久連接節省通信量
持久連接:只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態。
管線化:可以同時并行發送多個請求,不需要一個接一個地等待響應了。
2.5?使用?Cookie 的狀態管理
通過在請求和響應報文中寫入 Cookie 信息來控制客戶端的狀態。
3.?HTTP 報文內的 HTTP 信息
3.1?HTTP 報文的結構
3.2 請求報文和響應報文的結構
3.3 編碼提升傳輸速率
3.3.1?報文主體和實體主體的差異
報文(message):是 HTTP 通信中的基本單位,由 8 位組字節流(octet sequence,其中 octet 為 8 個比特)組成,通過 HTTP 通信傳輸。
實體(entity):作為請求或響應的有效載荷數據(補充項)被傳輸,其內容由實體首部和實體主體組成。
HTTP 報文的主體用于傳輸請求或響應的實體主體。
3.3.2?壓縮傳輸的內容編碼
內容編碼指明應用在實體內容上的編碼格式,并保持實體信息原樣壓縮。內容編碼后的實體由客戶端接收并負責解碼。
常用的內容編碼:
1)gzip(GNU zip)
2)compress(UNIX 系統的標準壓縮)
3)deflate(zlib)
4)identity(不進行編碼)
3.3.3?分割發送的分塊傳輸編碼
在 HTTP 通信過程中,請求的編碼實體資源尚未全部傳輸完成之前,瀏覽器無法顯示請求頁面。在傳輸大容量數據時,通過把數據分割成多塊,能夠讓瀏覽器逐步顯示頁面。這種把實體主體分塊的功能稱為分塊傳輸編碼(Chunked Transfer Coding)。
4.?返回結果的 HTTP 狀態碼
4.1 1XX:Informational(信息性狀態碼),接收的請求正在處理
4.2 2XX:Success(成功狀態碼),請求正常處理完畢
1) 200 OK:表示從客戶端發來的請求在服務器端被正常處理了。
2)204 No Content:表示服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分,瀏覽器顯示的頁面不發生更新。
3)206 Partial Content:表示客戶端進行了范圍請求,而服務器成功執行了這部分的 GET 請求,響應報文中包含由 Content-Range 指定范圍的實體內容。
4.3 3XX:Redirection(重定向狀態碼),需要進行附加操作以完成請求
1)301 Moved Permanently:永久性重定向,表示請求的資源已被分配了新的 URI,以后應使用資源現在所指的 URI。也就是說,如果已經把資源對應的 URI 保存為書簽了,這時應該按 Location 首部字段提示的 URI 重新保存。
2)302 Found:臨時性重定向,表示請求的資源已被分配了新的 URI,希望用戶(本次)能使用新的 URI 訪問。
3)303 See Other:表示由于請求對應的資源存在著另一個 URI,應使用 GET 方法定向獲取請求的資源。
4)304 Not Modified:表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但因發生請求未滿足條件的情況后,直接返回 304 Not Modified(服務器端資源未改變,可直接使用客戶端未過期的緩存)。
5)307 Temporary Redirect:臨時重定向,307 會遵照瀏覽器標準,不會從 POST 變成 GET。但是對于處理響應時的行為,每種瀏覽器有可能出現不同的情況。
4.4 4XX:Client Error(客戶端錯誤狀態碼),服務器無法處理請求
1)400 Bad Request:表示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容后再次發送請求。另外,瀏覽器會像 200 OK 一樣對待該狀態碼。
2)401 Unauthorized:表示發送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若之前已進行過 1 次請求,則表示用戶認證失敗。
3)403 Forbidden:表明對請求資源的訪問被服務器拒絕了。
4)404 Not Found:表明服務器上無法找到請求的資源,也可以在服務器端拒絕請求且不想說明理由時使用。
4.5 5XX:Server Error(服務器錯誤狀態碼),服務器處理請求出錯
1)500 Internal Server Error:表明服務器端在執行請求時發生了錯誤,也可能是 Web 應用存在的 bug 或某些臨時的故障。
2)503 Service Unavailable:表明服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。
5. 通信數據轉發程序
5.1?代理
代理服務器的基本行為就是接收客戶端發送的請求后轉發給其他服務器。代理不改變請求 URI,會直接發送給前方持有資源的目標服務器。持有資源實體的服務器被稱為源服務器,從源服務器返回的響應經過代理服務器后再傳給客戶端。
1)緩存代理
代理轉發響應時,緩存代理(Caching Proxy)會預先將資源的副本(緩存)保存在代理服務器上。當代理再次接收到對相同資源的請求時,就可以不從源服務器那里獲取資源,而是將之前緩存的資源作為響應返回。
2)透明代理
轉發請求或響應時,不對報文做任何加工的代理類型被稱為透明代理(Transparent Proxy)。反之,對報文內容進行加工的代理被稱為非透明代理。
5.2?網關
網關能使通信線路上的服務器提供非 HTTP 協議服務。利用網關能提高通信的安全性,因為可以在客戶端與網關之間的通信線路上加密以確保連接的安全。
5.3 隧道
隧道可按要求建立起一條與其他服務器的通信線路,使用 SSL 等加密手段進行通信。隧道的目的是確??蛻舳四芘c服務器進行安全的通信,HTTP 請求保持原樣中轉給之后的服務器。隧道會在通信雙方斷開連接時結束。
6. HTTP 首部字段
6.1?通用首部字段(General Header Fields)
請求報文和響應報文雙方都會使用的首部。
6.1.1 Cache-Control:控制緩存的行為
1)緩存請求指令
no-cache:強制向源服務器再次驗證
no-store:不緩存請求或響應的任何內容
max-age = [秒]:響應的最大Age值
max-stale( = [秒]):接收已過期的響應
min-fresh = [秒]:期望在指定時間內的響應仍有效
no-transform:代理不可更改媒體類型
only-if-cached:從緩存獲取資源
cache-extension:新指令標記(token)
2)緩存響應指令
public:可向任意方提供響應的緩存
private:僅向特定用戶返回響應
no-cache:緩存前必須先確認其有效性
no-store:不緩存請求或響應的任何內容
no-transform:代理不可更改媒體類型
must-revalidate:可緩存但必須再向源服務器進行確認
proxy-revalidate:要求中間緩存服務器對緩存的響應有效性再進行確認
max-age = [秒]:響應的最大Age值
s-maxage = [秒]:公共緩存服務器響應的最大Age值
cache-extension:新指令標記(token)
6.1.2 Connection:逐跳首部、連接的管理
1)控制代理不再轉發的首部字段
2)管理持久連接
6.1.3 Date:創建報文的日期時間
表明創建 HTTP 報文的日期和時間。
6.1.4 Pragma:報文指令
Pragma 是 HTTP/1.1 之前版本的歷史遺留字段,僅作為與 HTTP/1.0 的向后兼容而定義。
6.1.5 Trailer:報文末端的首部一覽
Trailer 會事先說明在報文主體后記錄了哪些首部字段。該首部字段可應用在 HTTP/1.1 版本分塊傳輸編碼時。
6.1.6 Transfer-Encoding:指定報文主體的傳輸編碼方式
HTTP/1.1 的傳輸編碼方式僅對分塊傳輸編碼有效。
6.1.7 Upgrade:升級為其他協議
Upgrade 用于檢測 HTTP 協議及其他協議是否可使用更高的版本進行通信,其參數值可以用來指定一個完全不同的通信協議。
6.1.8 Via:代理服務器的相關信息
追蹤客戶端與服務器之間的請求和響應報文的傳輸路徑。報文經過代理或網關時,會先在首部字段 Via 中附加該服務器的信息,然后再進行轉發。
6.1.9 Warning:錯誤通知
HTTP/1.1 的 Warning 首部是從 HTTP/1.0 的響應首部(Retry-After)演變過來的,該首部通常會告知用戶一些與緩存相關的問題的警告。
HTTP/1.1 警告碼:
110:Response is stale(響應已過期),代理返回已過期的資源
111:Revalidation failed(再驗證失敗),代理再驗證資源有效性時失敗(服務器無法到達等原因)
112:Disconnection operation(斷開連接操作),代理與互聯網連接被故意切斷
113:Heuristic expiration(試探性過期),響應的使用期超過24小時(有效緩存的設定時間大于24小時的情況下)
199:Miscellaneous warning(雜項警告),任意的警告內容
214:Transformation applied(使用了轉換),代理對內容編碼或媒體類型等執行了某些處理時
299:Miscellaneous persistent warning(持久雜項警告),任意的警告內容
6.2?請求首部字段(Request Header Fields)
從客戶端往服務器端發送請求報文中所使用的字段,用于補充請求的附加信息、客戶端信息、對響應內容相關的優先級等內容。
1)Accept:用戶代理可處理的媒體類型
2)Accept-Charset:優先的字符集
3)Accept-Encoding:優先的內容編碼
4)Accept-Language:優先的語言(自然語言)
5)Authorization:Web 認證信息
6)Expect:期待服務器的特定行為
7)From:用戶的電子郵箱地址
8)Host:請求資源所在服務器
9)If-Match:比較實體標記(ETag)
10)If-Modified-Since:比較資源的更新時間
11)If-None-Match:比較實體標記(與 If-Match 相反)
12)If-Range:資源未更新時發送實體?Byte?的范圍請求
13)If-Unmodified-Since:比較資源的更新時間(與If-Modified-Since相反)
14)Max-Forwards:最大傳輸逐跳數
15)Proxy-Authorization:代理服務器要求客戶端的認證信息
16)Range:實體的字節范圍請求
17)Referer:對請求中 URI 的原始獲取方
18)TE:傳輸編碼的優先級
19)User-Agent:HTTP?客戶端程序的信息
6.3?響應首部字段(Response Header Fields)
從服務器端向客戶端返回響應報文時使用的首部,補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
1)Accept-Ranges:是否接受字節范圍請求
2)Age:推算資源創建經過時間
3)ETag:資源的匹配信息
4)Location:令客戶端重定向至指定 URI
5)Proxy-Authenticate:代理服務器對客戶端的認證信息
6)Retry-After:對再次發起請求的時機要求
7)Server:HTTP 服務器的安裝信息
8)Vary:代理服務器緩存的管理信息
9)WWW-Authenticate:服務器對客戶端的認證信息
6.4?實體首部字段(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部,補充了資源內容更新時間等與實體有關的信息。
1)Allow:資源可支持的 HTTP 方法
2)Content-Encoding:實體主體適用的編碼方式
3)Content-Language:實體主體的自然語言
4)Content-Length:實體主體的大小(單位:字節)
5)Content-Location:替代對應資源的 URI
6)Content-MD5:實體主體的報文摘要
7)Content-Range:實體主體的位置范圍
8)Content-Type:實體主體的媒體類型
9)Expires:實體主體過期的日期時間
10)Last-Modified:資源的最后修改日期時間
6.5?為 Cookie 服務的首部字段
6.5.1 Set-Cookie
表示開始狀態管理所使用的 Cookie 信息,屬于響應首部字段。
Set-Cookie 字段的屬性:
1)NAME = VALUE:賦予 Cookie 的名稱和其值(必需項)
2)expires = DATE:Cookie 的有效期(若不明確指定則默認為瀏覽器關閉前為止)
3)path = PATH:將服務器上的文件目錄作為 Cookie 的適用對象(若不指定則默認為文檔所在的文件目錄)
4)domain = 域名:作為 Cookie 適用對象的域名 (若不指定則默認為創建 Cookie 的服務器的域名)
5)Secure:僅在 HTTPS 安全通信時才會發送 Cookie
6)HttpOnly:加以限制,使 Cookie 不能被 JavaScript 腳本訪問
6.5.2 Cookie
首部字段 Cookie 會告知服務器,當客戶端想獲得 HTTP 狀態管理支持時,就會在請求中包含從服務器接收到的 Cookie。接收到多個 Cookie 時,同樣可以以多個 Cookie 形式發送。
6.6?其他首部字段
1)X-Frame-Options
首部字段 X-Frame-Options 屬于 HTTP 響應首部,用于控制網站內容在其他 Web 網站的 Frame 標簽內的顯示問題,其主要目的是為了防止點擊劫持(clickjacking)攻擊。
2)X-XSS-Protection
首部字段 X-XSS-Protection 屬于 HTTP 響應首部,它是針對跨站腳本攻擊(XSS)的一種對策,用于控制瀏覽器 XSS 防護機制的開關。
3)DNT
首部字段 DNT 屬于 HTTP 請求首部,其中 DNT 是 Do Not Track 的簡稱,意為拒絕個人信息被收集,是表示拒絕被精準廣告追蹤的一種方法。
4)P3P
首部字段 P3P 屬于 HTTP 響應首部,通過利用 P3P(The Platform for Privacy Preferences,在線隱私偏好平臺)技術,可以讓 Web 網站上的個人隱私變成一種僅供程序可理解的形式,以達到保護用戶隱私的目的。
7. 確保 Web?安全的 HTTPS
7.1 HTTP 的缺點
7.1.1 通信使用明文(不加密),內容可能會被竊聽
互聯網上的任何角落都存在通信內容被竊聽的風險:
7.1.2 不驗證通信方的身份,有可能遭遇偽裝
1)無法確定請求發送至目標的 Web 服務器是否是按真實意圖返回響應的那臺服務器,有可能是已偽裝的 Web 服務器。
2)無法確定響應返回到的客戶端是否是按真實意圖接收響應的那個客戶端,有可能是已偽裝的客戶端。
3)無法確定正在通信的對方是否具備訪問權限,因為某些 Web 服務器上保存著重要的信息,只想發給特定用戶通信的權限。
4)無法判定請求是來自何方、出自誰手,即使是無意義的請求也會照單全收。
5)無法阻止海量請求下的 DoS 攻擊(Denial of Service,拒絕服務攻擊)。
7.1.3 無法證明報文的完整性,有可能已遭篡改
沒有任何辦法確認,發出的請求 / 響應和接收到的請求 / 響應是前后相同的。
中間人攻擊(Man-in-the-Middle attack,MITM):
7.2?HTTPS
7.2.1?HTTP + 加密 + 認證 + 完整性保護 = HTTPS
7.2.2?HTTPS 是身披 SSL 外殼的 HTTP
HTTPS 并非是應用層的一種新協議,而是 HTTP 通信接口部分用 SSL 和 TLS 協議代替而已。
7.2.3?相互交換密鑰的公開密鑰加密技術
SSL 采用一種叫做公開密鑰加密(Public-key cryptography)的加密處理方式。
7.2.4 證明公開密鑰正確性的證書
7.2.5 HTTPS 通信
8.?確認訪問用戶身份的認證
8.1 核對信息
1)密碼:只有本人才會知道的字符串信息;
2)動態令牌:僅限本人持有的設備內顯示的一次性密碼;
3)數字證書:僅限本人(終端)持有的信息;
4)生物認證:指紋和虹膜等本人的生理信息;
5)IC 卡等:僅限本人持有的信息。
8.2 認證方式
1)BASIC 認證(基本認證)
2)DIGEST 認證(摘要認證)
3)SSL 客戶端認證
為達到 SSL 客戶端認證的目的,需要事先將客戶端證書分發給客戶端,且客戶端必須安裝此證書。
SSL 客戶端認證采用雙因素認證,第一個認證因素的 SSL 客戶端證書用來認證客戶端計算機,另一個認證因素的密碼則用來確定這是用戶本人的行為。
4)FormBase 認證(基于表單認證)
基于表單的認證方法并不是在 HTTP 協議中定義的,客戶端會向服務器上的 Web 應用程序發送登錄信息(Credential),按登錄信息的驗證結果認證,一般會使用 Cookie 來管理 Session(會話)。
專業術語:
HTTP:HyperText Transfer Protocol,超文本傳輸協議
SGML:Standard Generalized Markup Language,標準通用標記語言
HTML:HyperText Markup Language,超文本標記語言
URI:Uniform Resource Identifier,統一資源標識符,用字符串標識某一互聯網資源
URL:Uniform Resource Locator,統一資源定位符,表示資源的地點(互聯網上所處的位置)
CGI:Common Gateway Interface,公共網關接口
FTP:File Transfer Protocol,文件傳輸協議
DNS:Domain Name System,域名系統
IP:Internet Protocol,網際協議
TCP:Transmission Control Protocol,傳輸控制協議
UDP:User Data Protocol,用戶數據報協議
NIC:Network Interface Card,網絡適配器,即網卡
ARP:Address Resolution Protocol,地址解析協議
MAC 地址:Media Access Control Address,用來定義網絡設備的位置
RFC:Request for Comments,征求修正意見書
REST:Representational State Transfer,表征狀態轉移
SSL:Secure Sockets Layer,安全套接層
TLS:Transport Layer Security,傳輸層安全
MIME:Multipurpose Internet Mail Extensions,多用途因特網郵件擴展
WebDAV:Web-based Distributed Authoring and Versioning,基于萬維網的分布式創作和版本控制
CERN:Conseil Européen pour la Recherche Nucléaire(法語),European Organization for Nuclear Research(英語),歐洲核子研究組織
NCSA:National Center for Supercomputer Applications,美國國家超級計算機應用中心
ICANN:Internet Corporation for Assigned Names and Numbers,互聯網名稱與數字地址分配機構
IANA:Internet Assigned Numbers Authority,互聯網號碼分配局
SNS:Social Networking Service,社交網絡服務
總結
以上是生活随笔為你收集整理的图解HTTP(笔记)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标梵互动智建中健健身整合营销方案
- 下一篇: [译]ng指令中的compile与lin