ARP 協議(Address Resolution Protocol)一種以解析地址的協議,根據通訊雙方的 IP 地址就能夠查出對應的 MAC 地址。
MAC( Media Access Control Address)地址是指網卡所屬的固定的地址
MIME,多部分對象集合(Multipurpose Internet Mail Extensions,多用途因特網郵件擴展),它是一種容許處理文本、圖片、視頻等多種不一樣類型的數據。瀏覽器
在瀏覽器地址欄輸入 URL 時,能夠看到 Web 頁面。固然 Web 頁面是不能憑空顯示出來,它須要根據指定的 URL 到服務器獲取文件資源,而後讓瀏覽器顯示 Web 頁面。緩存
Web 使用一種名爲 HTTP 的協議做爲規範。HTTP 全稱 HyperText Transfer Protocol,超文本傳輸協議。安全
什麼是協議?
定義如何探測到通訊目標,由哪一方發起通訊,使用什麼語言通訊,怎樣結束通訊,不一樣的硬件、操做系統之間的通訊的規則。服務器
TCP/IP 是互聯網相關的各種協議族的總稱,包括各式內容,從電纜規格到 IP 地址的選定方法、尋找異地用戶的方法、雙方創建通訊的順序、以及 Web 頁面顯示須要處理的步驟等網絡
TCP/IP 協議族分爲4層:應用層、傳輸層、網絡層和數據鏈路層
做用:ide
利用 TCP/IP 協議族進行網絡通訊時,發送端(客戶端)從應用層往下走,接收端(服務端)從鏈路層網上走網站
用 HTTP 舉例:編碼
TCP/IP 協議族中的 IP 指的是網際協議。IP 協議的做用是把各類數據包傳送給對方,要保證確實傳送到對方哪裏,須要知足各種條件。其中兩個重要條件是 IP 地址和 MAC 地址(Media Access Control Address)。加密
IP 地址指明瞭節點被分配到的地址,MAC 地址是指網卡所屬的固定的地址。IP 地址能夠和 MAC 地址進行配對。IP 地址可變換,MAC 地址基本不會變。spa
IP 間的通訊依賴 MAC 地址。在網絡上,一般是通過多臺計算機和網絡設備中轉才能鏈接到對方,在中轉時,會利用下一站中轉設備的 MAC 地址來搜索下一個中轉目標,這是會採用 ARP 協議
(Address Resolution Protocol)。ARP 協議是一種以解析地址的協議,根據通訊雙方的 IP 地址就能夠查出對應的 MAC 地址。
TCP 協議位於傳輸層,提供可靠的字節流服務,所謂字節流服務是將大塊數據分割層以報文段爲單位的數據包進行管理,方便傳輸。
爲了確保準確無誤的送達目的地,TCP 採用三次握手策略,數據發送出去以後,必定的會向對方確認是否成功送達。握手的過程當中採用 TCP 的標誌——SYN(synchronize)和 ACK(acknowledgement)。
發送端首先發送一個帶 SYN 標誌的數據包給對方;接收端收到後,回傳一個帶有 SYN/ACK 標誌的數據包以示表達確認信息,最後發送端在回傳一個帶 ACK 標誌的數據包,表明握手結束。
若是某個階段莫名結束,TCP 協議會再次以相同順序發送相同的數據包。
DNS(Domain Name System)服務是和 HTTP 協議同樣位於應用層的協議。它提供域名到 IP 地址之間的解析服務。
用戶一般經過域名來訪問網站,相比於 IP 地址,域名更符合人類的記憶習慣。DNS 服務便應運而生,逆向從 IP 地址反查域名服務。
URI(Uniform Resource Identifier)統一資源標識符
URL(Uniform Resource Locator)統一資源定位符
請求訪問文本或圖像等資源的一端稱爲客戶端,提供資源響應的一端稱爲服務器端。
HTTP 協議規定,請求從客戶端發出,服務端響應該請求並返回。
請求報文是由請求方法、請求URI、協議版本、可選的請求首部字段和內容實體構成的。
響應報文基本上由協議版本、狀態碼(表示成功或失敗的代碼)、以及解釋狀態碼的緣由短語、可選的響應首部字段以及實體主體構成。
HTTP 是一種不保存狀態,即無狀態協議。它自身不具有保存以前發送過的請求或響應的功能,爲了實現保持狀態的功能,引入了 Cookie 技術。
方法 | 用途 | 備註 |
---|---|---|
GET | 獲取資源 | |
POST | 傳輸實體主體 | |
PUT | 傳輸文件 | |
HEAD | 獲取報文首部 | |
DELETE | 刪除文件 | 響應返回的狀態碼是 204 |
OPTIONS | 詢問支持的方法 | |
TRACE | 追蹤路徑 | |
CONNECT | 要求用隧道協議鏈接代理 |
向請求 URI 指定的資源發送請求報文時,採用稱爲方法的命令。方法名要用大寫字母。
在 HTTP 初始版本中,因爲傳輸數據容量比較小,每進行一次 HTTP 通訊就要斷開一次 TCP 鏈接;
隨着 HTTP 普及,傳輸數據愈來愈大,未解決 TCP 鏈接問題,引入了持久鏈接(HTTP Persistent Connections,也成爲 HTTP keep-alive 或 HTTP connection reuse),特色是:只要任意一端沒有明確提出斷開鏈接,則保持 TCP 鏈接狀態。
持久化鏈接是的多數請求以管線化方式發送稱爲可能,能夠同時並行發送多個請求,而不須要一個接一個等待響應。
Cookie 技術經過在請求和響應報文中寫入 Cookie 信息來控制客戶端的狀態。
服務器在接受到請求後,在響應報文內加入 Set-Cookie,通知客戶端保存 Cookie,當下次在發送請求時,會在請求報文中加入 Cookie 後發送出去。服務器在根據發送過來的 Cookie 去對比,從而保存狀態信息。
用於 HTTP 協議交互的信息被稱爲 HTTP 報文,請求端(客戶端)的報文叫作請求報文,響應端(服務端)的叫作響應報文。
HTTP 報文 大體可分爲報文首部和報文主體,二者之間由空行(CR+LF)來劃分。
請求報文
響應報文
HTTP 在傳輸數據時能夠按照數據原貌直接傳輸,也能夠在傳輸時經過編碼提高傳輸速率,但這樣會消耗更多的 CPU 等資源
一般報文主體等於實體主體,只有當傳輸中進行編碼操做時,實體主體的內容發生變化纔會致使它和報文主體產生差別。
內容編碼指明應用在實體內容上的編碼格式,並保存實體信息原樣壓縮。內容編碼後的實體由客戶端接收並負責編碼。
經常使用的內容編碼
在 HTTP 通訊過程當中,在傳輸大容量數據時,經過把數據分割成多塊,可以讓瀏覽器逐步顯示頁面的功能稱爲分塊傳輸編碼(Chunked Transfer Coding)。
HTTP 協議採用了多部分對象集合——MIME機制(Multipurpose Internet Mail Extensions,多用途因特網郵件擴展),它是一種容許處理文本、圖片、視頻等多種不一樣類型的數據。
在 HTTP 報文中使用 多部分對象集合時,須要在首部字段里加上 Content-type,使用 boundary 字符串來劃分各個實體的起始行,須要在起始行前插入 "--" 標記,,最後以 "--" 結束。
指定範圍發送的請求叫作範圍請求
執行範圍請求會用到首部字段 Range 來指定資源的 byte 範圍
請求: Range: bytes = 5001-10000 響應: Content-Range: bytes 5001-10000/10000
針對範圍請求,響應會返回狀態碼爲 206 Partial Content 的響應報文,若是服務器沒法響應範圍請求,則會返回狀態碼 200 OK 和完成的實體內容。
同一個 Web 網站可能會存在多份相同內容的頁面,好比英文版和中文版,當瀏覽器默認語言爲中文時,訪問 URI 的 Web 頁面時,則會顯示中文版的 Web 頁面,這種機制稱爲內容協商(Content Negotiation)。
內容協商機制會在請求報文中用到下面首部字段:
內容協商技術有3種類型:
狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。
狀態碼由三位數字和緣由短語組成,其中數字第一位指定了相應類別,後兩位無分類。
類別 | 緣由短語 | |
---|---|---|
1XX | Informational(信息性狀態碼) | 接收的請求正在處理 |
2XX | Success(成功狀態碼) | 請求正常處理完畢 |
3XX | Redirection(重定向狀態碼) | 須要進行附加操做以完成請求 |
4XX | Client Error(客戶端錯誤狀態碼) | 服務器沒法處理請求 |
5XX | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
2XX 成功:表示請求被正常處理了
3XX 重定向:代表瀏覽器須要執行某些特殊處理以正確處理請求
4XX 客戶端錯誤:代表客戶端發生錯誤的緣由所在
5XX 服務器錯誤:代表服務器自己發生錯誤
HTTP/1.1 容許一臺 HTTP 服務器搭建多個 Web 站點
在互聯網上,域名經過 DNS 服務映射到 IP 地址以後訪問目標網站,在相同 IP 下,發送 HTTP 請求時,必須在 Host 首部內完整指定主機名和域名的 URI
使用代理服務器的理由:利用緩存技術減小網絡帶寬的流量,組織內部針對特定網站的訪問控制,以獲取訪問日誌爲主要目的
緩存代理:代理轉發時,緩存代理會預先將資源的副本緩存到代理服務器上,當代理再次接收到相同資源的請求時,就能夠不從源服務器那裏獲取資源,而是將緩存的資源做爲響應返回
透明代理:轉發請求或響應時,不對報文作任何加工的代理類型稱爲透明代理
網關能使通訊線路上的服務器提供非 HTTP 協議服務。
利用網關能提升通訊的安全性
隧道的目的是確保客戶端能與服務器進行安全的通訊,隧道自己不會去解析 HTTP 請求,隧道會在通訊雙方斷開鏈接時結束
緩存是指代理服務器或客戶端本地磁盤內保存的資源副本。利用緩存可減小對源服務器的訪問,所以也節省了通訊流量和通訊時間。
緩存服務器內緩存室友有效期的,若是資源更新,緩存就沒有用了,須要從新獲取新的資源
客戶端的緩存同緩存服務器同樣
HTTP 協議的請求和響應報文中必須一定包含 HTTP 首部。首部內容爲請求或響應所須要的信息
HTTP 請求報文由方法、URI、HTTP 版本、HTTP 首部字段等部分構成
HTTP 響應報文由 HTTP 版本、狀態碼、HTTP 首部字段組成
HTTP 首部字段是構成 HTTP 報文的要素之一。使用首部字段是爲了給瀏覽器和服務器提供報文主體大小、所使用的語言、認證信息等內容。
通用首部字段
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存的行爲 |
Connection | 逐跳首部、鏈接的管理 |
Date | 建立報文的日期時間 |
Pragma | 報文指令 |
Trailer | 報文末端的首部一覽 |
Transfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器的相關信息 |
Warning | 錯誤通知 |
請求首部字段
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 優先的語言(天然語言) |
Authorization | Web 認證信息 |
Expect | 期待服務器的特定行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在的服務器 |
If-Match | 比較實體標記(ETag) |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記(與If-Match相反) |
If-Range | 資源未更新時發送實體 Byte 的範圍請求 |
If-Unmodified-Since | 比較資源的更新時間(與 If-Modified-Since 相反) |
Max-Forwards | 最大傳輸逐跳數 |
Proxy-Authorization | 代理服務器要求客戶端的認證信息 |
Range | 實體的字節範圍 |
Referer | 對請求中 URI 的原始獲取方 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP 客戶端程序的信息 |
響應首部字段
首部字段名 | 說明 |
---|---|
Accept-Ranges | 是否接收字節範圍請求 |
Age | 推算資源建立通過時間 |
ETag | 資源的匹配信息 |
Location | 令客戶端重定向至指定 URI |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Retry-After | 對再次發起請求的時機要求 |
Server | HTTP 服務器的安裝信息 |
Vary | 代理服務器緩存的管理信息 |
WWW-Authenticate | 服務器對客戶端的認證信息 |
實體首部字段
首部字段名 | 說明 |
---|---|
Allow | 資源可支持的 HTTP方法 |
Content-Encoding | 實體主體適用的編碼方式 |
Content-Language | 實體主體的天然語言 |
Content-Length | 實體主體的大小(單位:字節) |
Content-Location | 替代對應資源的 URI |
Content-MD5 | 實體主體的報文摘要 |
Content-Range | 實體主體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體主體過時的日期時間 |
Last-Modified | 資源的最後修改日期時間 |
HTTP的缺點:
通訊的加密
HTTP 和 SSL(Secure Socket Layer,安全套鏈接)或 TLS(Transport Layer Security,安全傳輸層協議)組合使用,被稱爲 HTTPS(HTTP Secure,超文本傳輸安全協議)
內容的加密
把 HTTP 報文裏所含的內容進行加密,前提須要客戶端和服務器同時具有加密和解密機制
HTTP + 加密 + 認證 + 完整性保護 = HTTPS
未完待續...