HTTP协议简析《图解http》
一、概念
協議:協議是指計算機通信網絡中兩臺計算機之間進行通信所必須遵守的規定和規則。
HTTP協議:通常被翻譯為“超文本傳輸協議”,是一種詳細規定了瀏覽器和萬維網服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議(互聯網> 因特網> 萬維網)。它允許將超文本標記語言(html)文檔從Web服務器傳送到客戶端的瀏覽器。HTTP1.1是如今瀏覽器主流的超文本傳輸協議版本。HTTP協議是一個應用層協議。
TCP/IP協議族:因特網所有的傳輸都是通過TCP/IP進行的,HTTP協議是TCP/IP協議族的一個子集。其它的協議有:IEEE,FDDI,ICMP,IP,PPPoE,DNS,UDP,TCP,FTP,HTTP,SNMP,FDDI等。TCP/IP協議族。TCP/IP協議族中最重要的一點就是分層。
TCP/IP分層管理:TCP/IP協議族按層次分為:應用層,傳輸層,網絡層,數據鏈路層。
- 應用層:決定了向用戶提供應用服務時通訊活動。FTP,DNS,HTTP都處于應用層。
- 傳輸層:為上層應用層提供網絡連接中兩臺計算機的數據傳輸,TCP,UDP處于傳輸層。
- 網絡層:該層決定了通過怎樣的路徑到達目標計算機,并將數據包傳送給對方。
- 鏈路層:用來處理連接網絡的硬件部分,包括操作系統,硬件的設備驅動,網卡等。
二、TCP/IP通信傳輸流
利用TCP/IP協議族進行網絡通信時,會通過分層順序與對方進行通信,發送端從應用層往下,接收端反之。
HTTP協議通信舉例:
應用層(HTTTP協議)發送web頁面http請求,DNS協議解析域名成IP地址 ==>(TLS/SSL協議,https才有這一層) ===> 傳輸層(TCP協議)將數據分割,加TCP首部 ==> 網絡層(IP協議)增加MAC地址,搜索目標地址傳送 ==> 鏈路層 ==> 服務端正好相反過程。
《圖解HTTP》中TCP/IP通信傳輸截圖如下:
三、與HTTP關系密切的協議
DNS協議,位于應用層,提供域名和IP地址之間的解析服務
TCP協議,位于傳輸層,提供可靠的字節流服務。字節流指:為方便傳輸將大塊數據分割成以報文段為單位的數據包進行管理。可靠指:能夠把數據準確可靠的傳給對方(為了確認數據的傳達,采用了三次握手策略)。
IP協議,位于網絡層,將各種數據包傳送給對方,要想實現需要兩個重要的條件:IP地址和MAC地址。IP地址指明了節點被分配到的地址,MAC地址是指網卡所屬的固定地址,IP地址可以和MAC地址配對,IP地址是可變的,MAC一般是不可變的。
IP地址之間通信依賴MAC地址,需要經過多臺網絡設配中轉才能連接到目標設備,過程中會利用中轉設備的MAC地址搜索下一個中轉目標。這時會采用ARP協議,通過IP地址就可以反查出對應的MAC地址。
?
其它
URI/URL
URI是統一資源標識符;URL是統一資源定位符,是URL的子集。
URI相當于用身份證來確定一個人。URL是通過住址來確定這個人。
================================
一、概念
HTTP協議:TCP/IP協議族的一個子集,用于客戶端和服務端通信必須遵守的規則。通過請求方法請求和相應的交換達成客戶端和服務端的通信。
二、請求方法
告知服務器意圖的HTTP方法。
- GET:獲取資源
- POST: 傳輸實體主體
- PUT: 傳輸文件
- DELETE: 刪除文件
- HEAD、OPTIONS、TRACE、CONNECT
三、HTTP報文
用于HTTP協議交互的信息稱為HTTP報文,請求端的HTTP報文稱為請求報文,響應端的稱為響應報文。HTTP報文本身是字符串文本。
HTTP請求報文主要分為請求行、請求頭(首部)、主體。
請求行
①方法 ②URI ③HTTP協議
請求頭
請求首部、通用首部、實體首部 (下面分析)
主體
請求的入參、
HTTP響應報文主要分為狀態行、響應頭(首部)、主體。
狀態行
①協議版本 ②狀態碼 ③原因
響應頭
響應首部、通用首部、實體首部(下面分析)
主體
響應的出參
關于常用的首部列表如下(參考HTTP全部報文首部字段):
請求首部
| Accept | 用戶代理可處理的媒體類型text/html |
| Accept-Encoding | 優先的內容編碼gzip |
| Accept-Language | 優先的語言en-us,zh |
| Expect | 期待服務器的特定行為 |
| Host | 請求資源所在服務器www.jianshu.com |
| if-Match | 比較實體標記(ETag)緩存有關 |
| if-Modified-Since | 比較資源的更新時間 緩存有關 |
| Referer | 對請求中URI的原始獲取方法 http://**/f6507 |
| User-Agent | HTTP客戶端程序的信息 Mozilla/5.0... |
| … |
通用首部字段
| Cache | 控制緩存的行為,不讀取本地緩存 |
| Connection | 逐跳首部、連接的管理,持續連接相關 |
| Date | 創建報文的日期時間 |
| … |
響應首部字段
| Accept-Ranges | 是否接受字節范圍請求 |
| Age | 推算資源創建經過時間 緩存有關 |
| ETag | 資源的匹配信息 緩存有關 |
| Location | 令客戶端重定向至指定的URI |
| … |
實體首部字段
| Content-Range | 實體主體的位置范圍 “ |
| Content-Type | 實體主體的媒體類型 application/json; charset=utf-8 |
| Expires | 實體主體過期的日期時間 緩存有關 |
| Last-Modified | 資源的最后修改日期時間 緩存有關 |
| Set-Cookie | 服務器返回給客戶端設置緩存 |
| … |
四、狀態碼
狀態碼是用來告知從服務器請求來的結果
| 1xx | 請求正在處理 |
| 2xx | 請求正常處理完畢(success) |
| 3xx | 重定向 |
| 4xx | 客戶端錯誤 |
| 5xx | 服務端錯誤 |
只要遵守狀態碼類別的定義,即使改變RFC2616中定義的狀態碼,或服務器端自行創建狀態碼都是沒有問題的。
五、持續連接
在HTTP協議初始版本中,每進行一次HTTP通信就要斷開一次TCP連接。為了解決這一問題,在HTTP/1.1版本中加入了持續連接(默認是開啟的)。
持續連接使得多數請求以管線化方式發送成為可能。這樣就可以做到并行發送多個請求。
六、cookie
無狀態:HTTP協議是無狀態協議,它不對之前發送過的請求和響應的狀態進行管理。也就是說,無法根據之前的狀態進行本次的請求處理。
最常見的例子是,登錄態無法被保持住。為了解決這一問題,引入了cookie技術,cookie技術是通過在請求和響應首部中加入相關信息,從而達到客戶端和服務端的相互識別的通信。
客戶端發送請求 ==> 服務端生成session,在響應首部加入set-Cookie ==> 第二次請求中帶入cookie ==> 檢測cookie,識別身份
除了cookie以外,為了服務器性能等提出了tooken技術,具體可參考干掉狀態:從session到token
參考
《圖解HTTP》
HTTP全部報文首部字段
干掉狀態:從session到token
====================================
一、虛擬主機
HTTP1.1規范允許一臺HTTP服務器搭建多個web站點,這是利用了虛擬主機的功能。
兩個不同的域名,通過DNS協議映射到IP地址(域名解析)從而訪問目標站點,此時訪問到相同IP地址。因此在發送HTTP請求時,必須在Host首部內完整指定主機名或域名的URI。
二、數據轉發程序
這些應用程序和服務器可以將請求轉發給通信線路上的下一站服務器,并能接收從那臺服務器發送的響應再轉發給客戶端。
1.代理
代理服務器的本質是接收客戶端發送的請求后轉發給其他服務器。代理不改變請求URI,會直接發送給前方持有資源的目標服務器。每次通過代理服務器請求或響應時,會追加寫入Via首部信息。
主要功能:
- 突破自身IP訪問限制,訪問國外網站。
- 訪問單位內部資源,FTP之類。
- 提供訪問速度,代理服務器設置了緩存。
- 隱藏真實IP。
- 針對特定網站的訪問控制,已獲取訪問日志。
2.網關
從一個網絡向另一個網絡發送信網關息,也必須經過一道“關口”,這道關口就是網關。網關的工作機制和代理十分相似。而網關能使通信線路上的服務器提供非HTTP協議。
利用網關是為了提供通信的安全性,因為可以在客戶端與網關之間的通信線路上加密以確保連接的安全。例如網關可以連接數據庫等。
3.隧道
隧道可以按要求建立起一條與其他服務器的通信線路,使用SSL等加密手段進行通信。隧道的目的是為了確保數據交互的安全性。整個過程中不會解析HTTP協議。
三、資源緩存
緩存服務器是代理服務器的一種,當代理轉發從服務器返回的響應時,代理服務器將會保存一份資源的副本。
緩存服務器的優勢在于利用緩存可避免多次從服務器獲取,而其中缺點是版本更新時可能獲取過時的舊資源。為了解決此問題,可以通過設置緩存的有效期等手段,向原服務器確認資源的有效性。
緩存不僅可以存在于緩存服務器,也可以存在客戶端的瀏覽器中。
=======================================
一、Web攻擊
簡單的HTTP協議本身并不存在安全問題,并不會成為攻擊對象,然而應用HTTP協議的服務器和客戶端,以及運行在服務器上的Web**應用資源**才是攻擊目標。
HTTP最初的設計是一個通用的單純協議機制,具備較多的優勢,但是也有明顯的安全性方面的劣勢。好在如今大多數的Web網站都會使用會話管理(session)、加密處理等安全性方面的功能。
Web應用的攻擊模式
- 主動攻擊
- 被動攻擊
【主動攻擊】是攻擊者通過直接訪問Web應用,把攻擊代碼傳入的攻擊模式。由于該模式是直接針對服務器的資源進行攻擊,因此攻擊者需要能夠訪問到那些資源。代表性的攻擊有SQL注入攻擊和OS命令注入攻擊。
【被動攻擊】是指利用圈套策略執行攻擊代碼的攻擊模式。在被動攻擊過程中,攻擊者不直接對目標Web應用訪問發起攻擊。代表性的攻擊有跨站腳本攻擊和跨站點請求偽造。
被動攻擊通常的攻擊模式如下:
- 步驟1:攻擊者誘使用戶觸發已設置好的陷阱,而陷阱會啟動發送已嵌入攻擊代碼的HTTP請求。
- 步驟2:當用戶不知不覺中招之后,用戶的瀏覽器或郵件客戶端就會觸發這個陷阱。
- 步驟3:中招后的用戶瀏覽器會把含有攻擊代碼的HTTP請求發送給作為攻擊目標的Web應用,運行攻擊代碼。
- 步驟4:執行完攻擊代碼,存在安全漏洞的Web應用會成為攻擊者的跳板,可能導致用戶所持有的Cookie等個人信息被竊取,登錄狀態中的用戶權限被惡意濫用的結果。
SQL注入攻擊(主動攻擊)
SQL注入是指針對Web應用使用的數據庫,通過運行非法的SQL而產生的攻擊。
Web應用通常需要用到數據庫,當需要對數據庫表內的數據進行檢索或添加、刪除等操作時,會使用SQL語句連接數據庫進行特定的操作。如果在調用SQL語句的方式上存在疏漏,就可能執行被惡意注入非法SQL語句。
Web安全之SQL注入攻擊技巧與防范
OS命令注入攻擊(主動攻擊)
是指通過Web應用,執行非法的操作系統命令達到攻擊的目的。只要在能調用Shell函數的地方就存在被攻擊的風險。
跨站腳本攻擊(被動攻擊)
是指通過存在安全漏洞的Web網站注冊用戶的瀏覽器內運行非法的HTML標簽或JavaScript進行的一種攻擊。尤其動態創建(用戶輸入)的HTML部分有可能隱藏著安全漏洞(富文本編輯器)。
XSS 跨站腳本攻擊Cross Site Script)
HTTP首部注入攻擊(被動攻擊)
是指攻擊者通過在響應首部字段內插入換行,添加任意響應首部或者主體的一種攻擊。在發送請求時修改Location以及Set- Cookie可強制設置任何Cookie信息以及重定向至任何URL。
還有一種將兩個%0D%0A并排插入字符串后發送,利用這兩個連續的換行就可作出HTTP首部與主體分隔所需的空行了,這樣就能顯示偽造的主體,達到攻擊目的。這種攻擊叫做HTTP響應截斷攻擊。
其他的攻擊還包括:郵件首部注入攻擊、目錄遍歷攻擊、遠程文件包含漏洞、強制瀏覽、不正確的錯誤消息處理、開發重定向、會話劫持、跨站點請求偽造等攻擊方式。詳細可查看書籍《圖解HTTP》。
二、加密處理
近代的加密方法中加密的算法一般是公開的,而密鑰卻是保密的。通過這種方式得以保持加密方法的安全性。
加密和解密都會用到密鑰。沒有密鑰就無法對密碼解密,反過來說,任何人只要持有密鑰就能解密了。如果密鑰被攻擊者獲取,那加密也就失去了意義。
共享密鑰加密
又稱對稱密鑰加密,同用一個密鑰的方式稱為共享密鑰加密。
在互聯網上轉發密鑰時,如果通信被監聽那么密鑰就可能落入攻擊者之手,同時失去了加密的意義。
公開密鑰加密
公開密鑰加密使用一對非對稱的密鑰。一把叫做私有密鑰,一把叫做公開密鑰。
使用公開密鑰加密方式,發送密文的一方使用對方的公開密鑰進行加密處理,對方收到被加密的信息后,再使用自己的私鑰進行解密。
而再之后出現了證明公開密鑰正確性的證書,會在接下來的HTTPS中詳細講解。
三、安全的HTTPS
前面講過HTTP在安全性方面有很多缺陷,比如HTTP協議中的請求和響應不會對通信方進行確認。也就是說存在”服務器是否就是發送請求中URI真正指定的主機,返回的響應是否真的返回到實際提出請求的客戶端”等類似問題。
SSL協議
雖然使用HTTP協議無法確定通信方,但是如果使用SSL則可以。SSL不僅提供了加密處理,摘要功能,而且還使用了一種被稱為證書的手段,可用于確定通信方。
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
HTTPS**并非是應用層的一種新協議**,只是HTTP通信接口部分用SSL(安全套接層)和TLS(安全傳輸層協議)協議替代而已。所謂的HTTPS,其實就是身披SSL協議這層外殼的HTTP。
數字證書
遺憾的是,公開密鑰加密方式還是存在一些問題的。那就是無法證明公開密鑰本身就是貨真價實的公開密鑰。比如,正準備和某臺服務器建立公開密鑰加密方式下的通信時,如何證明收到的公開密鑰就是原本預想的那臺服務器發行的公開密鑰。或許在公開密鑰傳輸途中,真正的公開密鑰已經被攻擊者替換掉了。
為了解決上述問題,可以使用由數字證書認證機構和其相關機關頒發的公開密鑰證書。首先,服務器的運營人員向數字證書認證機構提出公開密鑰的申請。數字證書認證機構在判明提出申請者的身份之后,會對已申請的公開密鑰做數字簽名,然后分配這個已簽名的公開密鑰,并將該公開密鑰放入公鑰證書后綁定在一起。
具體在Web通信中證書如何運作,可以參考下圖:
整個HTTPS的通信流程大致如下:
雖說HTTPS通信建立了一個安全通道的信息傳輸環境,但是也存在一些問題,那就是當使用SSL時,它的處理速度會變慢。HTTPS比HTTP通信要慢2到100倍。
總結
以上是生活随笔為你收集整理的HTTP协议简析《图解http》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE调用高德地图之电子围栏
- 下一篇: mac 上php不可用,Mac_Mac蓝