簡單的HTTP協議
theme: condensed-night-purple
本文正在參與 “網路協議必知必會”徵文活動
關於HTTP協議
- 應用
HTTP協議
時,必定是一端擔任客戶端角色,一端擔任伺服器端角色 HTTP協議
通過請求和響應的交換達成通訊。請求從客服端發出,最後伺服器端響應該請求並返回HTTP協議
是不儲存狀態的,即無狀態協議,協議對傳送或響應的請求都不作持久化處理
告知伺服器意圖的HTTP方法
GET
:獲取資源
GET
方法用來請求已經被URI標識的資源
POST
:傳輸實體主體
POST
方法用來傳輸實體的主體。POST
方法和GET
方法功能相似,但是POST
的主要目的並不是獲取響應的主體內容
PUT
:傳輸檔案
PUT
方法用來傳輸檔案。在請求報文的主體中包含檔案內容,然後儲存到請求URI
指定的位置。
DELETE
:刪除檔案
DELETE
方法用來刪除檔案。與PUT
相反的方法,DELETE
方法按請求URI
刪除指定的資源。
HEAD
:獲得報文首部
HEAD
方法和GET
方法一樣,但是不返回報文主體部分,用於確認URI
的有效性及資源更新的日期時間等。
OPTIONS
:詢問支援的方法
OPTIONS
方法用來查詢針對請求URI指定的資源支援的方法
TRACE
:追蹤路徑
傳送請求時,在Max-Forward首部欄位中填入數值,每經過一個伺服器端就將該數字減1,當數值剛好減到0時,就停止繼續傳輸,最後接收到請求的伺服器端則返回狀態碼200 OK的響應
客戶端通過TRACE
方法可以查詢發出去的請求是怎麼被加工修改的,這是因為,請求想要連線到源目標伺服器可能會通過代理中轉,TRACE
方法就是用來確認連線過程中發生的一些列操作
-
CONNECT
:要求用隧道協議連線代理CONNECT
方法要求在代理伺服器通訊時建立隧道,實現用隧道協議進行TCP
通訊,主要使用SSL
(Secure Sockets Layer,安全套接層)和TLS
(Transport Layer Security,傳輸層安全)協議把通訊內容加密後經網路隧道傳輸
持久連線節省通訊量
- HTTP協議的初始版本中,每進行一次HTTP通訊就要斷開一次TCP連線
比如,使用瀏覽器瀏覽一個包含多張圖片的HTML頁面時,在傳送請求訪問HTML頁面資源的同時,也會請求該HTML頁面裡包含的其他資源。因此,每次的請求都會造成無謂的TCP連線建立和斷開,增加通訊量的開銷
- 持久連線
只要任意一端沒有明確提出斷開連線,則保持TCP連線狀態。
持久連線的好處在於減少了TCP連線的重複建立和斷開所造成的額外開銷,減輕了伺服器端的負載。另外,減少開銷的那部分時間,使HTTP請求和響應能夠更早地結束,這樣Web頁面的顯示速度也就相應提高了
- 管線化
持久連線使得多數請求以管線化(pipelining)方式傳送成為可能。
從前傳送請求後需等待並收到響應,才能傳送下一個請求。管線化技術出現後,不用等待響應亦可直接傳送下一個請求。這樣就能夠做到同時並行傳送多個請求,而不需要一個接一個地等待響應了。

使用Cookie的狀態管理
- 引入
Cookie
技術的原因
由於HTTP
是無狀態協議,假設要求登入認證的Web頁面本身無法進行狀態的管理(不記錄登入狀態),那麼每次跳轉新頁面都需要再次登入
- 使用
Cookie
技術管理狀態
Cookie
技術通過在請求和響應報文中寫入Cookie
資訊來控制客戶端的狀態。
Cookie
會根據從伺服器端傳送的響應報文內的一個叫做Set-Cookie
的首部欄位資訊,通知客戶端儲存Cookie
。當下次客戶端再往該伺服器傳送請求時,客戶端會自動在請求報文中加入Cookie
值後傳送出去。伺服器端發現客戶端傳送過來的Cookie
後,會去檢查究竟是從哪一個客戶端發來的連線請求,然後對比伺服器上的記錄,最後得到之前的狀態資訊。
-
第一次,沒有
Cookie
資訊狀態下的請求- 第二次及以後,存在
Cookie
資訊狀態下的請求
- iOS-螢幕適配(基礎概念)
- Web 開發模式
- Node.js - 在 express 中啟用 cors 跨域資源共享
- 簡單的HTTP協議
- iOS中的Storyboard
- iOS中載入xib
- iOS中自定義view的封裝
- iOS中的事件
- iOS中的定時器(GCD定時器)
- iOS中的定時器(CADisplayLink)
- iOS中的執行緒鎖(關於NSRecursiveLock)
- iOS中的執行緒鎖(關於NSConditionLock)
- iOS中的執行緒鎖(執行緒鎖的相關概念)
- iOS中的多執行緒(多執行緒的競爭)
- iOS中的多執行緒(關於NSOperationQueue)
- iOS中的多執行緒(關於NSOperation)
- iOS中的多執行緒(關於GCD訊號量)
- iOS中的多執行緒(關於GCD的其他方法)
- iOS中的多執行緒(關於GCD 的佇列組)
- iOS中的多執行緒(關於GCD的佇列和任務)