整理第一次學習HTTP的筆記,其中還有大量知識沒有學習以及整理,在下一次循環學習期會將文章更新。算法
文章包含以下部分,以及待完成部分瀏覽器
第一部分 Web基礎安全
第二部分 初見HTTPbash
第三部分 HTTP to HTTPS服務器
HTTP to HTTPS網絡
HTTS安全通訊機制post
SSL協議學習
若是你是對HTTP瞭如指掌的大佬就當重溫知識點,而且給孩子找找問題、提提學習建議和學習路線。大數據
或者你是對HTTP還迷迷糊糊的新萌,就和我一塊兒先對HTTP有一個初步認識吧~網站
Web使用的一種名爲HTTP(超文本傳輸協議)的協議進行規範,完成從客戶端到服務端等一系列運做流程。能夠說Web是創建在HTTP協議上通訊的。
一般使用的互聯網是在TCP/IP協議族的基礎之上運行的,HTTP屬於他們內部的一個子集。把互聯網相關聯的協議集合起來,總稱爲TCP/IP協議。
按層次分爲應用層、傳輸層、網絡層和數據鏈路層。
以HTTP舉例,首先客戶端經過應用層(HTTP協議)發送一個打開Web頁面的網絡請求。 爲了傳輸方便,在傳輸層(TCP協議)把從應用層收到的數據(HTTP請求報文)進行分割,在各個報文上打上標記序號以及端口號後轉發給網絡層。 在網絡層(IP協議)增長了做爲通訊目的的MAC地址後轉發給鏈路層。 接收端的服務器在鏈路層上收到數據後,按自底向上順序發送,當傳輸到應用層,纔算是有真正接收到右客戶端發送來的請求。
發送端在層與層之間傳輸數據時,每通過一層,一定會被打上一個該層所屬的首部信息。反之在接收端在層與層之間傳輸時,每通過一層,也會把對應的首部消去。
按層次分,IP(網際網絡)協議存在於網絡層中。 做用是:把各類數據包傳送給對方。
確保可以傳送到對方手中,須要知足各種條件,例如IP地址與MAC地址。 IP地址指明瞭節點被分配到的地址,MAC地址是指網卡所屬的固定地址,IP地址和MAC地址進行配對。一般IP地址能夠更換,但MAC地址基本不變。
使用ARP協議借MAC地址進行通訊 IP間的通訊依賴MAC地址,在網絡上,一般通訊的雙方不在同一局域網下,這時就須要在多臺計算機和網絡設備中進行中轉才能鏈接到對方。 在中轉過程當中,會利用下一臺中轉設備的MAC地址來搜索目標,這時會採用ARP協議進行解析地址,根據通訊方的IP地址就能夠反查出來對應的MAC地址。
在到達通訊目標前的中轉過程當中,計算機和路由器等網絡設備只能獲悉很粗略的傳輸線路,這一機制稱爲路由選擇,因此他們沒法全面掌握互聯網中的細節。
按層次分,TCP協議位於傳輸層,它提供可靠的字節流服務。
TCP協議爲了更容易傳輸大數據才把數據分割,並且TCP協議可以確認數據最終是否送達到對方。
和HTTP協議位於應用層,負責域名到IP地址之間的解析服務,也能夠經過IP地址反查域名服務。
URL(統一資源定位符)與URI(統一資源標識符)相比,更熟悉URL,例如purplercode.work/
URI是 Uniform Resource Identifier 的縮寫,RFC2396分別對這三個單詞進行以下定義。
Uniform 規定統一的格式可方便處理多種不一樣類型的資源,而不用根據上下文環境來識別資源指定的訪問方式。另外,加入新增的協議方案(如 http: 或 ftp:)也更容易。
Resource 資源的定義是能夠標識的任何東西。
Identifier 可標識的對象,也稱標識符。 URI用字符串標識某一互聯網資源,而URL表示資源的地點,可見URL是URI的子集。 通用語法實例:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
複製代碼
HTTP協議規定,請求從客戶端發出,最後服務器端響應請求並返回。
請求報文是由請求方法,請求URI、協議版本、可選的請求首部字段以及內容實體構成。
響應報文基本上由協議版本,狀態碼和緣由短語,響應首部字段以及響應實體構成。
當客戶端請求訪問資源而發送請求時,URI須要將做爲請求報文中的請求URI包含在內,指定URI的方式有不少種。
除此以外,若是不是訪問特定資源而是對服務器自己發起請求,能夠用一個 * 來代替請求 URI。OPTIONS * HTTP/1.1
在之前每進行一次HTTP通訊就要斷開一次TCP鏈接。
隨着HTTP的普及,文檔中的內容多了起來,致使增長了大量的通訊量開銷。爲解決上述問題,HTTP/1.1提出了持久鏈接 HTTP keep-alive,他的特色是隻要任意一段沒有明確的提出斷開鏈接,則保持TCP鏈接狀態。
持久鏈接使得多數請求以管線化方式發送成爲可能。從前發送請求後須要等待並收到響應,才能發送下一個請求。
管線化技術出現後,不須要等到響應能夠直接發送下一個請求。 管線化技術比持久鏈接還要快,數據越多時候差距越明顯。
由於HTTP是無狀態協議,不對以前發生過的請求和響應狀態進行管理。無狀態協議有他本身的優勢,因爲沒必要保存狀態,能夠減小服務器的CPU以及內存資源消耗。
正由於HTTP協議自己很是簡單,因此應用的也較爲普遍。
保留無狀態協議這個特徵的同時又要解決相似的矛盾問題,因而引入了 Cookie 技術。
Cookie技術經過在請求和響應報文中寫入Cookie信息來控制客戶端的狀態。
用於HTTP協議交互的信息稱爲HTTP報文,分爲請求報文和響應報文。
一般報文分爲報文首部(必須)和報文主體(可選)兩塊。
請求報文(上)響應報文(下)的實例
請求行:
請求的方法、URI和HTTP版本
狀態行:
HTTP版本、響應結果狀態碼以及緣由短語
首部字段
包括表示請求和響應的各類條件和屬性
一般首部字段分爲:通用首部、請求首部、響應首部。
1XX | 信息性狀態碼 | 接受的請求正在處理 |
---|---|---|
2XX | 成功狀態碼 | 請求正常處理 |
3XX | 重定向狀態碼 | 須要進行附加操做 |
4XX | 客戶端錯誤狀態碼 | 服務器沒法處理請求 |
5XX | 服務器錯誤狀態碼 | 服務器處理請求出錯 |
表示請求被正常處理
表示從客戶端發來的請求服務器正常處理
![](user-gold-cdn.xitu.io/2019/12/14/…
請求處理成功,可是沒有資源能夠返回
該狀態碼錶示服務器成功執行了客戶端的範圍請求。
永久性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,之後應使用資源如今所指的 URI。
臨時性重定向。該狀態碼錶示請求的資源已被分配了新的 URI,但願用戶(本次)能使用新的 URI 訪問。注意是臨時。
該狀態碼錶示因爲請求對應的資源存在着另外一個 URI,應使用 GET 方法定向獲取請求的資源。
4XX 的響應結果代表客戶端是發生錯誤的緣由所在
該狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容後再次發送請求。
該狀態碼錶示發送的請求須要有經過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。另外若以前已進行過 1 次請求,則表示用 戶認證失敗。
該狀態碼代表對請求資源的訪問被服務器拒絕
5XX的響應結果表示服務器自己發生錯誤
HTTP首部字段是構成HTTP報文的要素之一。在客戶端與服務器之間以 HTTP 協議進行通訊的過程當中,不管是請求仍是響應都會使用首部字段,它能起到傳遞額外重要信息的做用。
使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。通用首部字段(General Header Fields)
請求報文和響應報文兩方都會使用的首部。
請求首部字段(Request Header Fields)
從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加內容、客戶端信息、響應內容相關優先級等信息。
響應首部字段(Response Header Fields)
從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加內容,也會要求客戶端附加額外的內容信息。
實體首部字段(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更新時間等與實體有關的信息。
詳細內容請參考:MDN:HTTP Headers
因爲HTTP自己不具有加密的功能,因此沒法作到對通訊總體(請求報文、響應報文)進行加密。
按照TCP/IP協議族工做機制,通訊內容在通訊線路上都有可能遭到竊聽。
所謂的互聯網是指可以連通全世界的網絡組成的。在此通訊線路上的某些網絡設備、光纜以及計算機都不多是我的的私有物,因此不能排除某個環節會遭到竊聽。
通訊加密
能夠經過和 SSL(Secure Socket Layer)或 TLS(Transport Layer Security)的組合使用,加密 HTTP 的通訊內容。
用 SSL 創建安全通訊線路以後,就能夠在這條線路上進行 HTTP 通訊了。與 SSL 組合使用的 HTTP 被稱爲 HTTPS(HTTP Secure,超文本傳輸安全協議)。
內容的加密把HTTP報文裏所含的內容進行加密處理,一般客戶端須要將HTTP報文進行加密處理後再進行發送請求。
不過前提是客戶端和服務器端須要同時具有加密和解密機制,主要應用在Web服務器中。
HTTP協議中的請求和響應不會對通訊方進行確認。
在 HTTP 協議通訊時,因爲不存在確認通訊方的處理步驟,任何人均可以發起請求。另外,服務器只要接收到請求,無論對方是誰都會返回一個響應(但也僅限於發送端的 IP 地址和端口號沒有被 Web 服務器設定限制訪問的前提下)。
不確認通訊方,會存在如下各類隱患。
沒法肯定請求發送至目標的 Web 服務器是不是按真實意圖返回響應的那臺服務器。有多是已假裝的 Web 服務器。
沒法肯定響應返回到的客戶端是不是按真實意圖接收響應的那個客戶端。有多是已假裝的客戶端。
沒法肯定正在通訊的對方是否具有訪問權限。由於某些 Web 服務器上保存着重要的信息,只想發給特定用戶通訊的權限。
沒法斷定請求是來自何方、出自誰手。
即便是無心義的請求也會照單全收。沒法阻止海量請求下的 DoS 攻擊(Denial of Service,拒絕服務攻擊)。
查明對手的證書
雖然使用 HTTP 協議沒法肯定通訊方,但若是使用 SSL 則能夠。SSL 不只提供加密處理,並且還使用了一種被稱爲證書的手段,可用於肯定對方。
證書由值得信任的第三方機構頒發,用以證實服務器和客戶端是實際存在的。
好比,從某個 Web 網站上下載內容,是沒法肯定客戶端下載的文件和服務器上存放的文件是否先後一致的。文件內容在傳輸途中可能已經被篡改成其餘的內容。即便內容真的已改變,做爲接收方的客戶端也是覺察不到的。
HTTP的不足:
通訊使用明文協議,容易被竊聽
不驗證通訊方的身份,易遭到假裝
沒法驗證報文完整性,可能被篡改
在 HTTP 上再加入加密處理和認證等機制。咱們把添加了加密及認證機制的 HTTP 稱爲 HTTPS(HTTP Secure)。
未完待續
涉及到的TCP三次握手以及沒有涉及到的四次握手能夠參見上一篇文輸入url
網絡就先到此了,下一次學習以後我保證必定給你們分享更多新知識~