文章目錄
- 概述
- 特點
- URL
- HTTP 與 HTTPS
- 概述
- HTTP 工作原理
- HTTPS 的作用
- 區別總結
- 請求報文
- 請求行
- 常見請求方法
- 請求頭
- 請求體
- Content-Type 詳解
- 常見場景 Content-Type 對應關系
- 響應報文
- 響應行
- 狀態碼詳解
- 1xx:信息響應(Informational)
- 2xx:成功(Success)
- 3xx:重定向(Redirection)
- 4xx:客戶端錯誤(Client Error)
- 5xx:服務器錯誤(Server Error)
- 響應頭
- 常見響應頭字段
- 響應體
- 參考文章
概述
超文本傳輸協議(HTTP, Hypertext Transfer Protocol) 是一種用于傳輸超媒體文檔(例如 HTML)的應用層協議。它最初被設計用于 Web 瀏覽器與 Web 服務器之間的通信,但也廣泛應用于其他客戶端與服務器的交互。
HTTP 遵循經典的[客戶端-服務器(Client-Server)模型:客戶端發起請求,服務器處理并返回響應。HTTP 是一種無狀態協議,即服務器在兩個請求之間不保留任何狀態信息。
特點
- 簡單快速:客戶端向服務器請求服務時,僅需發送請求方法和路徑。常用的方法有 GET、HEAD、POST 等。由于協議本身結構簡單,HTTP 服務器實現輕量,通信速度較快。
- 靈活:HTTP 允許傳輸任意類型的數據,通過
Content-Type
頭來標識傳輸的數據類型。 - 無連接:HTTP 的無連接性指每次請求完成后,客戶端與服務器的連接就會斷開。這種方式有助于節省服務器資源,提升處理效率。
- 無狀態:HTTP 協議本身不記錄請求之間的狀態信息。如果需要在多個請求之間保留用戶狀態,通常通過 Cookie、Session、Token 等機制實現。無狀態的好處是服務器響應更快,但也帶來了開發上的額外工作。
- 支持 B/S 和 C/S 模式:HTTP 既可用于瀏覽器/服務器(Browser/Server)架構,也適用于客戶端/服務器(Client/Server)通信,因而應用廣泛。
URL
HTTP 使用統一資源標識符(URI, Uniform Resource Identifier)來標識和定位資源。**URL(Uniform Resource Locator,統一資源定位符)**是 URI 的一種形式,包含了訪問某個資源所需的完整信息。
下面通過一個新的 URL 示例來說明其組成部分:
https://example.com:8443/docs/tutorial/index.html?user=alice&lang=zh#section2
這個 URL 可以分為以下幾個部分:
- 協議(Scheme):
https
指明使用的協議是 HTTPS,即 HTTP 的加密版本,保障數據的安全性。 - 域名(Host):
example.com
表示服務器的地址,既可以是域名也可以是 IP 地址。 - 端口(Port):
:8443
指定服務器監聽的端口號。若省略此部分,將使用協議的默認端口(HTTPS 默認為 443)。 - 路徑(Path):
/docs/tutorial/
表示服務器上資源的目錄結構,也稱為虛擬目錄。 - 文件名(File):
index.html
表示請求的具體資源文件,若省略則通常由服務器返回默認首頁文件。 - 查詢參數(Query):
?user=alice&lang=zh
用于向服務器傳遞額外信息。多個參數通過&
分隔,鍵值對之間用=
連接。 - 錨點(Fragment):
#section2
表示頁面中的某個位置(例如跳轉到 HTML 的某個id
),不會參與服務器通信,僅由前端解析處理。
HTTP 與 HTTPS
概述
HTTP(Hypertext Transfer Protocol,超文本傳輸協議)
用于從 Web 服務器傳輸超文本(如 HTML 文件、圖片、視頻等)到客戶端瀏覽器,是一種基于 TCP/IP 的請求-響應協議,默認端口為 80。
HTTPS(Hypertext Transfer Protocol Secure,超文本傳輸安全協議)
是 HTTP 的安全版本,在 HTTP 的基礎上增加了 SSL/TLS 加密機制,提供數據加密、完整性校驗和身份驗證,默認端口為 443。
HTTP 工作原理
HTTP 使用“客戶端 - 服務器”模型工作:
- 客戶端發起請求:瀏覽器等客戶端向服務器發起 HTTP 請求;
- 服務器處理請求:服務器解析請求、讀取資源或處理業務邏輯;
- 服務器返回響應:返回 HTML 頁面、圖片、JSON 數據等內容;
- 客戶端渲染頁面:瀏覽器接收響應并渲染出完整頁面。
常見的 Web 服務器有:Apache、Nginx、IIS(Internet Information Services) 等。
HTTP 的三個特性:
- 無連接:每次請求/響應后即斷開連接;
- 無狀態:服務器不保存任何關于客戶端的會話狀態;
- 媒體獨立:只要客戶端和服務器能識別 MIME 類型,任何格式的數據都可通過 HTTP 傳輸。
HTTPS 的作用
HTTPS 通過 SSL/TLS 協議 提供如下安全保障:
- 加密傳輸:防止數據被第三方竊聽;
- 數據完整性:防止傳輸過程中的數據被篡改;
- 身份驗證:確保數據是從真實的服務器發出的。
HTTPS 的信任依賴于操作系統中預裝的 CA(證書頒發機構):
- 瀏覽器需要信任 CA;
- 服務器必須使用有效的證書;
- 證書必須匹配訪問的域名;
- 協議加密過程必須完整并有效。
區別總結
對比維度 | HTTP | HTTPS |
---|---|---|
是否加密 | 明文傳輸 | SSL/TLS 加密傳輸 |
端口號 | 80 | 443 |
安全性 | 不安全,易被監聽或篡改 | 安全,具備加密、認證與完整性校驗功能 |
證書要求 | 無需證書 | 需部署 SSL 證書 |
性能 | 較快,無加密開銷 | 稍慢,有加解密過程 |
SEO 影響 | 可能被降權 | 更受搜索引擎優待 |
瀏覽器提示 | 顯示“不安全” | 顯示“安全鎖” |
成本 | 免費 | 需購買或申請 SSL 證書 |
適用場景 | 非敏感信息傳輸場景(如新聞博客) | 涉及隱私或敏感信息(如電商、登錄等) |
請求報文
HTTP 請求報文由三部分組成:
-
請求行(Request Line)
-
請求頭(Request Header)
-
請求體(Request Body,可選)
請求報文示例
GET / HTTP/1.1 # 請求方法為GET,請求首頁(/),使用HTTP/1.1協議
Host: baidu.com # 指定目標主機(域名)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.6367.60# 瀏覽器類型和操作系統信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8# 客戶端可接收的內容類型
Accept-Encoding: gzip, deflate, br# 支持的內容壓縮編碼方式(節省帶寬)
Accept-Language: zh-CN,zh;q=0.9# 客戶端可接受的語言
Connection: keep-alive # 表示使用長連接,保持 TCP 連接不斷開
Cookie: BIDUPSID=...; BAIDUID=...; ...# 攜帶的 Cookie,用于身份識別、會話保持等
請求行
格式如下:
請求方法 請求資源路徑 協議版本
示例:
POST /chapter17/user.html HTTP/1.1
常見請求方法
方法 | 說明 |
---|---|
GET | 請求數據附在 URL 中;不安全,有長度限制;無請求體 |
POST | 數據放在請求體中;適用于表單提交、上傳等場景 |
HEAD | 只請求響應頭,不返回實體內容 |
PUT | 用于更新或上傳資源 |
DELETE | 請求服務器刪除資源 |
OPTIONS | 返回服務器支持的請求方法 |
TRACE | 回顯服務器收到的請求(用于測試和診斷) |
CONNECT | 用于建立網絡隧道(主要用于 HTTPS) |
請求頭
請求頭用于描述客戶端環境和請求內容,常見字段如下:
Header 字段 | 說明 |
---|---|
Host | 請求主機名 |
User-Agent | 客戶端軟件信息 |
Accept | 可接受的內容類型 |
Content-Type | 請求體數據類型 |
Content-Length | 請求體的字節長度 |
Cookie | 客戶端存儲的 cookie 數據 |
Referer | 發起請求的源頁面地址 |
請求體
請求體通常包含實際發送的數據,僅 POST、PUT 等方法使用。GET 方法沒有請求體。
Content-Type 詳解
Content-Type 指定了請求體中數據的類型。以下是常見類型說明:
Content-Type | 說明 |
---|---|
text/plain | 純文本格式 |
text/html | HTML 格式 |
text/css | CSS 格式 |
text/javascript | JavaScript 格式 |
image/gif | GIF 圖片 |
image/jpeg | JPEG 圖片 |
image/png | PNG 圖片 |
application/x-www-form-urlencoded | 表單默認格式,key=value&key2=value2 |
application/json | JSON 格式,常用于 API 請求 |
multipart/form-data | 用于表單上傳文件 |
text/xml | 以 XML 格式提交數據 |
application/octet-stream | 任意二進制數據流,如文件下載/上傳 |
常見場景 Content-Type 對應關系
場景 | 請求方法 | Content-Type |
---|---|---|
普通表單提交 | POST | application/x-www-form-urlencoded |
上傳文件 | POST | multipart/form-data |
提交 JSON 數據 | POST | application/json |
REST 接口 PUT 請求 | PUT | application/json 或其他格式 |
下載文件 | GET | application/octet-stream |
響應報文
HTTP 響應報文由三部分組成:
- 響應行(Status Line)
- 響應頭(Response Header)
- 響應體(Response Body)
響應報文示例
HTTP/2 200 OK # 響應協議版本為HTTP/2,狀態碼200表示請求成功
Server: JSP3/2.0.14 # 服務器軟件及版本信息
Date: Fri, 16 May 2025 07:59:09 GMT # 響應生成時間(GMT格式)
Content-Type: text/javascript; charset=utf-8# 響應內容的類型為JavaScript,字符編碼為utf-8
Expires: Mon, 16 Sep 2024 07:12:27 GMT# 資源過期時間(一般用于緩存)
Last-Modified: Thu, 12 Sep 2024 08:43:04 GMT# 資源最后修改時間
Etag: "63487d8c50e44137f8b6ce2a04407f8f"# 資源的唯一標識(方便緩存和驗證)
Cache-Control: max-age=31536000# 緩存控制,表示資源最大緩存時間為31536000秒(1年)
Age: 621073 # 資源在緩存中已經存在的秒數
Accept-Ranges: bytes # 支持客戶端的范圍請求(斷點續傳)
Content-Md5: Y0h9jFDkQTf4ts4qBEB/jw==# 響應內容的MD5校驗值(完整性校驗)
X-Cache-Status: HIT # 緩存命中,表示資源來自緩存
Timing-Allow-Origin: * # 允許任何源訪問資源加載時間數據(用于性能分析)
Access-Control-Allow-Origin: * # 允許跨域訪問,任何域都可以訪問此資源
// 以下是響應體示例(JavaScript代碼)
define("@baidu/aging-tools-pc/dist/index",["san","tslib"],function(n,t){function e(n){if(o[n])return o[n].exports;var t=o[n]={i:n,l:!1,exports:{}};return i[n].call(t.exports,t,t.exports,e),t.l=!0,t.exports}// 省略后續代碼
})
響應行
格式如下:
HTTP/協議版本 狀態碼 狀態描述
示例:
HTTP/1.1 200 OK
狀態碼詳解
HTTP 狀態碼由 3 位數字組成,第一個數字表示響應的類別:
1xx:信息響應(Informational)
- 100 Continue:繼續請求
- 101 Switching Protocols:切換協議
2xx:成功(Success)
- 200 OK:請求成功
- 204 No Content:請求成功但無響應體,常用于無需頁面刷新的請求
- 206 Partial Content:部分內容響應,用于支持范圍請求(Content-Range)
3xx:重定向(Redirection)
- 301 Moved Permanently:永久重定向
- 302 Found:臨時重定向
- 303 See Other:重定向到另一個地址,要求使用 GET 請求
- 307 Temporary Redirect:臨時重定向,不會更改請求方法(如 POST 不變)
- 304 Not Modified:資源未修改,使用緩存(與條件請求有關)
4xx:客戶端錯誤(Client Error)
- 400 Bad Request:語法錯誤,服務器無法理解
- 401 Unauthorized:未授權,需要身份驗證(需帶 WWW-Authenticate 響應頭)
- 403 Forbidden:服務器拒絕請求
- 404 Not Found:請求資源不存在
- 415 Unsupported Media Type:請求類型不支持
5xx:服務器錯誤(Server Error)
- 500 Internal Server Error:服務器內部錯誤
- 503 Service Unavailable:服務器暫時無法處理請求
響應頭
響應頭是由服務器返回的鍵值對,用于說明響應信息及控制客戶端行為。
常見響應頭字段
字段名 | 描述 |
---|---|
Location | 重定向地址,需與 3xx 狀態碼搭配使用 |
Content-Type | 響應體的數據類型,如 text/html;charset=UTF-8 |
Content-Disposition | 文件下載方式,如 attachment;filename=xx.zip |
Set-Cookie | 設置客戶端 Cookie |
Content-Encoding | 響應體的壓縮方式,如 gzip |
Content-Length | 響應體的字節長度 |
Refresh | 定時刷新頁面,如 3;url=http://example.com |
Server | 服務器信息,如 Apache-Coyote/1.1 (可配置) |
Last-Modified | 響應資源的最后修改時間 |
Cache-Control | 緩存控制,如 private 、public 、no-cache 、max-age=秒數 、no-store |
響應體
響應體是服務器真正發送給客戶端的“正文”內容,通常為 HTML 頁面、JSON 數據、圖片或其他資源。
瀏覽器將響應體加載到內存后,進行解析、渲染并展示頁面內容。
參考文章
- http中文文檔(https://developer.mozilla.org/zh-CN/docs/Web/HTTP)
- HTTP/HTTPS 簡介(https://www.runoob.com/http/http-intro.html)
- Http協議詳解(深入理解)(https://blog.csdn.net/weixin_38087538/article/details/82838762)