HTTP的歷史
3 項 WWW 構建技術,分別是:把 SGML(Standard Generalized Markup Language,標准通用標記語言)作為頁面的文本標記語言的
HTML(HyperText Markup Language,超文本標記語言);作為文檔傳遞協議的 HTTP ; 指定文檔所在地址的
URL(Uniform Resource Locator,統一資源定位符)
HTTP/0.9 HTTP 於1990 年問世。那時的 HTTP 並沒有作為正式的標准被建立。現在的 HTTP 其實含有 HTTP1.0 之前版本的意思,因此被稱為HTTP/0.9。
HTTP/1.0 HTTP 正式作為標准被公布是在 1996 年的 5 月,版本被命名為HTTP/1.0,並記載於 RFC1945。雖說是初期標准,但該協議標准至今仍被廣泛使用在服務器端。
HTTP/1.1 1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 協議版本。當初的標准是 RFC2068,之后發布的修訂版 RFC2616 就是當前的最新版本。
HTTP/2.0 主要技術方向

TCP/IP
TCP/IP的分層管理
應用層:決定了向用戶提供應用服務時通信的活動。TCP/IP 協議族內預存了各類通用的應用服務。比如,FTP(FileTransfer Protocol,文件傳輸協議)和 DNS(Domain Name System,域名系統)服務就是其中兩類。HTTP 協議也處於該層。
傳輸層:傳輸層對上層應用層,提供處於網絡連接中的兩台計算機之間的數據傳輸。在傳輸層有兩個性質不同的協議:TCP(Transmission ControlProtocol,傳輸控制協議)和 UDP(User Data Protocol,用戶數據報協議)。
網絡層:用來處理在網絡上流動的數據包。數據包是網絡傳輸的最小數據單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,並把數據包傳送給對方。與對方計算機之間通過多台計算機或網絡設備進行傳輸時,網絡層所起的作用就是在眾多的選項內選擇一條傳輸路線
數據鏈路層:用來處理連接網絡的硬件部分。包括控制操作系統、硬件的設備驅動、NIC(Network Interface Card,網絡適配器,即網卡),及光纖等物理可見部分(還包括連接器等一切傳輸媒介)。硬件上的范疇均在鏈路層的作用范圍之內
TCP/IP通信傳輸流

利用 TCP/IP 協議族進行網絡通信時,會通過分層順序與對方進行通信。發送端從應用層往下走,接收端則往應用層往上走。
舉例來說明,首先作為發送端的客戶端在應用層(HTTP 協議)發出一個想看某個 Web 頁面的 HTTP 請求。
接着在傳輸層(TCP 協議)把從應用層處收到的數據(HTTP 請求報文)進行分割,並在各個報文上打上標記序號及端口號后轉發給網絡層。
在網絡層(IP 協議),增加作為通信目的地的 MAC 地址后轉發給鏈路層。
接收端的服務器在鏈路層接收到數據,按序往上層發送,一直到應用層。當傳輸到應用層,才能算真正接收到由客戶端發送過來的 HTTP請求

發送端在層與層之間傳輸數據時,每經過一層時必定會被打上一個該層所屬的首部信息。反之,接收端在層與層傳輸數據時,每經過一層時會把對應的首部消去。這種把數據信息包裝起來的做法稱為封裝。
負責傳輸的 IP 協議
IP 協議的作用是把各種數據包傳送給對方。而要保證確實傳送到對方那里,則需要滿足各類條件。其中兩個重要的條件是 IP 地址和 MAC地址(Media Access Control Address)
IP 地址指明了節點被分配到的地址,MAC 地址是指網卡所屬的固定地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MAC地址基本上不會更改。使用 ARP 協議憑借 MAC 地址進行通信IP 間的通信依賴 MAC 地址。
在網絡上,通信的雙方在同一局域網(LAN)內的情況是很少的,通常是經過多台計算機和網絡設備中轉才能連接到對方。而在進行中轉時,會利用下一站中轉設備的 MAC地址來搜索下一個中轉目標。這時,會采用 ARP 協議(AddressResolution Protocol)。ARP 是一種用以解析地址的協議,根據通信方的 IP 地址就可以反查出對應的 MAC 地址---------這種機制稱為路由選擇

TCP 協議
TCP 位於傳輸層,提供可靠的字節流服務。所謂的字節流服務(Byte Stream Service)是指,為了方便傳輸,將大塊數據分割成以報文段(segment)為單位的數據包進行管理
為了准確無誤地將數據送達目標處,TCP 協議采用了三次握手

握手過程中使用了 TCP 的標志(flag) —— SYN(synchronize) 和ACK(acknowledgement)
發送端首先發送一個帶 SYN 標志的數據包給對方。接收端收到后,回傳一個帶有 SYN/ACK 標志的數據包以示傳達確認信息。最后,發送端再回傳一個帶 ACK 標志的數據包,代表“握手”結束。若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序發送相同的數據包
各種協議與 HTTP 協議的關系

URL(UniformResource Locator,統一資源定位符)URL 正是使用 Web 瀏覽器等訪問 Web 頁面時需要輸入的網頁地址
URI(統一資源標識符):URI 就是由某個協議方案表示的資源的定位標識符。協議方案是指訪問資源所使用的協議類型名稱

HTTP/1.0 和 HTTP/1.1 支持的方法

持久連接
HTTP/1.1 和一部分的 HTTP/1.0 想出了持久連接(HTTP Persistent Connections,也稱為 HTTP keep-alive 或HTTP connection reuse)的方法。持久連接的特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態

管線化
持久連接使得多數請求以管線化(pipelining)方式發送成為可能。從前發送請求后需等待並收到響應,才能發送下一個請求。管線化技術出現后,不用等待響應亦可直接發送下一個請求

Cookie管理


HTTP報文
HTTP 報文大致可分為報文首部和報文主體兩塊。兩者由最初出現的空行(CR+LF)來划分。通常,並不一定要有報文主體

編碼提升傳輸速率
-報文(message)是 HTTP 通信中的基本單位,由 8 位組字節流(octet sequence,其中 octet 為 8 個比特)組成,通過 HTTP 通信傳輸。
-實體(entity)作為請求或響應的有效載荷數據(補充項)被傳輸,其內容由實體首部和實體主體組成。
HTTP 報文的主體用於傳輸請求或響應的實體主體。
壓縮傳輸的內容編碼
常用的內容編碼有以下幾種
gzip(GNU zip)
compress(UNIX 系統的標准壓縮)
deflate(zlib)
identity(不進行編碼)
分割發送的分塊傳輸編碼
4 種 HTTP 首部字段類型
通用首部字段(General Header Fields)
請求報文和響應報文兩方都會使用的首部。

請求首部字段(Request Header Fields)
從客戶端向服務器端發送請求報文時使用的首部。補充了請求的附加
內容、客戶端信息、響應內容相關優先級等信息。

響應首部字段(Response Header Fields)
從服務器端向客戶端返回響應報文時使用的首部。補充了響應的附加
內容,也會要求客戶端附加額外的內容信息。

實體首部字段(Entity Header Fields)
針對請求報文和響應報文的實體部分使用的首部。補充了資源內容更
新時間等與實體有關的信息。

HTTPS
HTTP 主要有這些不足,例舉如下
- 通信使用明文(不加密),內容可能會被竊聽
- 不驗證通信方的身份,因此有可能遭遇偽裝
- 無法證明報文的完整性,所以有可能已遭篡改
HTTP+ 加密 + 認證 + 完整性保護
=HTTPS

通過和 SSL(Secure Socket Layer,安全套接層)或TLS(Transport Layer Security,安全層傳輸協議)的組合使用,加密 HTTP 的通信內容。用 SSL 建立安全通信線路之后,就可以在這條線路上進行 HTTP通信了。與 SSL 組合使用的 HTTP 被稱為 HTTPS(HTTPSecure,超文本傳輸安全協議)或 HTTP over SSL

報文完整性的方法,但事實上並不便捷、可靠。其中常用的是 MD5 和 SHA-1 等散列值校驗的方法
