《HTTP權威指南》 第3章 HTTP報文

報文是如何流動的

HTTP報文是在HTTP程序之間發送的數據塊。數據塊以一些文本形式的元信息開頭。

報文方向有:流入流出上游下游

流入流出描述事務處理的方向,流入和流出是基于服務器的描述。

流入:客戶端發往服務器的請求報文
流出:從服務器發出到客戶端的響應報文
在這里插入圖片描述
發出方在上游,接收方在下游:所有的報文都會向下游流動,所有報文的發送者都在接收者的上游。
在這里插入圖片描述

HTTP報文的三個組成部分

對報文進行描述的起始行、包含屬性的首部塊、可選的包含數據的主體
在這里插入圖片描述
起始行和首部是由行分隔的ASCII文本,每行以一個行終止序列(兩個字符組成)作為結束,其中包括一個回車符(ASCII碼13)和一個換行符(ASCII碼10),寫做CRLF

Content-type表示主體是什么類型的數據,Content-length表示主體有多大(多少個字節)。

報文語法

在這里插入圖片描述在這里插入圖片描述

  • 方法(method):客戶端希望服務器對資源執行的動作,如:GET、POST
  • 請求URL(request-URL):路徑組件的完整URL(除協議和主機名端口號之外的部分)
  • 版本(version):報文所使用的HTTP版本,格式 HTTP/<major>.<minor>,其中major主要版本號,minor次要版本號,比如:HTTP/1.1
  • 狀態碼(status-code):三位數字,描述請求過程中發生的情況,第一位數字用于描述一般類別(成功、出錯)等。
  • 原因短語(reason-phrase):數字狀態碼的可讀版本
  • 首部(header):零個或多個,名字+:+可選空格++CRLF,如:Content-Type: application/json

注意:一組HTTP首部總是應該以一個空行結束(僅有CRLF),即使沒有首部和主體

示例:
在這里插入圖片描述

起始行:請求報文的起始行,包含一個方法 + 一個請求URL + HTTP版本

在這里插入圖片描述

響應行:響應報文的起始行,包含HTTP版本 + 數字狀態碼 + 原因短語

在這里插入圖片描述

常用 HTTP 狀態碼匯總

MDN文檔

狀態碼原因短語 (Reason Phrase)含義備注
100Continue服務器已收到請求頭,客戶端應繼續發送請求體。常用于 Expect: 100-continue 頭部的大文件上傳場景,確認服務器是否愿意接收數據。
101Switching Protocols服務器應客戶端要求,正在切換協議(如從 HTTP 切換到 WebSocket)。客戶端通過 Upgrade 頭部請求協議切換。
200OK請求成功。 響應內容取決于請求方法(GET 返回資源,PUT/POST 可能返回操作結果)。最常用的成功狀態碼。
201Created請求成功,并在服務器上創建了新的資源。通常在 POSTPUT 請求后返回,響應頭 Location 通常包含新資源的 URL。
202Accepted請求已被接受處理,但處理尚未完成。適用于異步操作,最終結果可能稍后通過其他方式通知。
204No Content服務器成功處理了請求,但響應中沒有返回任何內容。常用于 DELETE 請求成功或 PUT 更新成功但無需返回數據時。
206Partial Content服務器成功處理了部分 GET 請求(范圍請求)。響應頭 Content-Range 指示返回的是哪部分內容。用于大文件下載、斷點續傳。
301Moved Permanently請求的資源已被永久移動到新的 URL。瀏覽器/搜索引擎會更新書簽和索引。 響應頭 Location 提供新 URL。
302Found請求的資源臨時從不同的 URL 響應。瀏覽器會重定向,但不會更新書簽/索引。 (原始語義是“臨時移動”,但實際常被用作臨時重定向)。
304Not Modified資源未被修改,客戶端可以使用緩存的版本。用于條件請求(請求頭如 If-Modified-Since, If-None-Match),表示資源未改變,節省帶寬。
307Temporary Redirect請求的資源臨時從不同的 URL 響應。與 302 類似,但嚴格要求重定向時使用相同的 HTTP 方法(如 POST 重定向后仍用 POST)。
308Permanent Redirect請求的資源已被永久移動到新的 URL。與 301 類似,但嚴格要求重定向時使用相同的 HTTP 方法(如 POST 重定向后仍用 POST)。
400Bad Request服務器無法理解或處理該請求,因為客戶端請求語法錯誤、無效請求消息或欺騙性請求路由。通用客戶端錯誤,需檢查請求格式、參數、JSON/XML結構等。
401Unauthorized請求要求身份驗證或身份驗證失敗。響應通常包含 WWW-Authenticate 頭,告知客戶端需要的認證方式(如 Basic, Bearer)。表示“未認證”或“認證失敗”。
403Forbidden服務器理解請求,但拒絕執行(即使身份驗證成功)。與 401 區別:用戶已登錄,但沒有訪問該資源的權限。
404Not Found服務器找不到請求的資源。最常見錯誤之一。 URL 拼寫錯誤、資源已被刪除或從未存在。
405Method Not Allowed不支持的請求方法。響應頭 Allow 會列出該資源支持的 HTTP 方法(如 GET, HEAD)。
408Request Timeout服務器等待客戶端發送請求的時間過長。服務器主動關閉了連接。
409Conflict請求與服務器的當前狀態沖突(通常在 PUT/PATCH/DELETE 操作時發生)。常見于并發編輯、版本控制沖突(如 If-Match 頭校驗失敗)。
429Too Many Requests用戶在給定的時間內發送了太多請求(“速率限制”)。常用于 API 限流。 響應頭 Retry-After 可能提示客戶端何時可重試。
500Internal Server Error服務器遇到了一個未曾預料的情況,導致它無法完成對請求的處理。最通用的服務器端錯誤。 程序代碼錯誤、依賴服務故障等。
502Bad Gateway服務器作為網關或代理,從上游服務器接收到無效響應。常見于反向代理(如 Nginx)無法從后端應用服務器(如 PHP-FPM, Node.js)獲得有效響應。
503Service Unavailable服務器暫時不可用(通常由于過載或停機維護)。表示服務當前無法處理請求,但這是臨時的。 響應頭 Retry-After 可能提示客戶端何時可重試。
504Gateway Timeout服務器作為網關或代理,未及時從上游服務器收到響應。上游服務器處理超時(慢或無響應)。
507Insufficient Storage服務器無法存儲完成請求所必需的內容(WebDAV)。通常表示磁盤空間不足。

請求重定向圖示

將請求重定向到新位置(301)
在這里插入圖片描述

從給定的時間之后未修改過,則重定向為使用本地副本(304)
在這里插入圖片描述

??幾個重定向狀態碼的區別(面試考點)

狀態碼名稱永久性HTTP 方法是否保留典型場景SEO 影響注意事項
301Moved Permanently? 永久? 可能改變
(POST → GET)
域名永久遷移、URL 結構變更權重轉移到新 URL (后續訪問跳過重定向用新URL,瀏覽器自動更新書簽瀏覽器緩存重定向結果
302Found? 臨時? 可能改變
(POST → GET)
臨時活動也跳轉、A/B 測試不傳遞權重,保留原 URL 索引(每次都重定向訪問,瀏覽器不會更新書簽實際行為與語義不符,慎用于非 GET 請求
307Temporary Redirect? 臨時? 嚴格保持原方法臨時重定向且需保留請求方法
(如 POST 表單)
不傳遞權重
(每次都重定向訪問,瀏覽器不會更新書簽)
強制方法一致,適合 API 和敏感操作,比如支付
308Permanent Redirect? 永久? 嚴格保持原方法永久重定向且需保留請求方法
(如 RESTful API 遷移)
權重轉移到新 URL(后續訪問跳過重定向用新URL,瀏覽器自動更新書簽)強制方法一致,瀏覽器緩存結果

請求和響應報文的區別

  • 起始行
    請求行定義 “要做什么”(方法+資源路徑)。
    狀態行聲明 “結果如何”(狀態碼+原因短語)。
  • 首部字段
    請求關注 身份、數據類型、來源(如 Authorization, Accept)。
    響應關注 數據類型、緩存、控制指令(如 Content-Type, Cache-Control)。
  • 主體及用途
    請求 Body 用于 發送數據(如表單、文件)。
    響應 Body 用于 返回數據(如資源內容、錯誤信息)。
  • 傳輸方向性
    請求:客戶端發起 → 服務器接收。
    響應:服務器返回 → 客戶端接收。

請求報文支持的各種方法

GET

在這里插入圖片描述

HEAD

HEAD方法,服務器在響應中只返回首部,不會返回主體部分。
允許客戶端再未獲取實際資源的情況下,對資源的首部進行檢查。
在這里插入圖片描述

PUT

PUT向服務器寫入文檔。
用請求的主體創建URL命名的新文檔:讓服務器用請求的主體部分來創建一個由所請求的URL命名的新文檔。若已存在,則用這個主體來替代它。
在這里插入圖片描述

POST

向服務端輸入數據
在這里插入圖片描述

TRACE

TRACE方法主要用于診斷。客戶端發起的請求可能要穿過防火墻、代理、網關或其他應用程序,每個中間節點都可能修改原始HTTP請求。TRACE請求會在目的服務器端發起一個 “環回”診斷,彈回一條TRACE響應并在主體中攜帶它收到的原始請求報文,客戶端以此檢查原始報文是否被毀壞或被修改過
在這里插入圖片描述

OPTIONS

詢問服務器支持哪些方法
在這里插入圖片描述

DELETE

請服務器刪除URL指定的資源
在這里插入圖片描述

HTTP首部

通用首部

客戶端和服務器都可以使用,不論是構建請求報文還是響應報文。

1. 通用信息首部
在這里插入圖片描述
2. 通用緩存首部
在這里插入圖片描述

首部作用說明示例值
Cache-Control控制緩存行為(優先級最高)max-age=3600, no-cache
Connection管理連接狀態(如 keep-alive 維持長連接;close 關閉連接)Connection: keep-alive
Content-Encoding內容壓縮格式(如 gzip/brContent-Encoding: gzip
Content-LengthBody 的字節長度(不含頭部)Content-Length: 1024
Content-TypeBody 的媒體類型(如 JSON、HTML)Content-Type: application/json
Date報文創建時間Date: Tue, 15 Jun 2024 08:12:31 GMT

請求首部

請求首部是只在請求報文中有意義的首部。
在這里插入圖片描述

1. Accept首部
在這里插入圖片描述

2. 條件請求首部
在這里插入圖片描述

3. 安全請求首部
在這里插入圖片描述

4. 代理請求首部
在這里插入圖片描述

首部作用說明示例值
Host目標域名和端口(HTTP/1.1 必需)Host: www.example.com
User-Agent客戶端標識(瀏覽器、操作系統等)User-Agent: Chrome/125.0
Accept聲明可接受的響應格式(如 application/jsonAccept: application/json
Accept-Language聲明首選語言Accept-Language: zh-CN,en;q=0.9
Authorization身份憑證(如 Bearer Token)Authorization: Bearer xyz123
Cookie攜帶服務端設置的 CookieCookie: sessionId=abc; theme=dark
Referer當前請求的來源頁面 URLReferer: https://google.com/search?q=http
If-Modified-Since條件請求:資源在此時間后修改才返回新內容If-Modified-Since: Tue, 14 Jun 2024 12:00:00 GMT

響應首部

1. 協商首部
在這里插入圖片描述

2. 安全響應首部
在這里插入圖片描述

首部作用說明示例值
Server服務端軟件信息Server: Nginx/1.24
Set-Cookie設置 Cookie(名稱、值、屬性)Set-Cookie: id=a3fWa; Path=/; HttpOnly
Location重定向目標 URL(用于 3xx 狀態碼)Location: https://new.example.com
Access-Control-Allow-OriginCORS:允許跨域的源(* 表示任意源)Access-Control-Allow-Origin: *
Content-Security-PolicyCSP:限制資源加載來源(防 XSS)default-src 'self'; script-src https:
Strict-Transport-SecurityHSTS:強制 HTTPS(瀏覽器記住此策略)max-age=31536000; includeSubDomains
Retry-After服務不可用時的重試等待時間(用于 503/429)Retry-After: 60

實體首部

1. 內容首部
在這里插入圖片描述

2. 實體緩存首部
在這里插入圖片描述

首部作用說明示例值
Content-Location返回資源的實際 URL(可能與請求 URL 不同)Content-Location: /data/v2/user.json
Content-Disposition指定如何處理內容(如下載文件名)Content-Disposition: attachment; filename="report.pdf"
Expires資源過期時間(舊版緩存控制,優先級低于 Cache-ControlExpires: Thu, 01 Dec 2024 16:00:00 GMT
Last-Modified資源最后修改時間(用于緩存驗證)Last-Modified: Mon, 10 Jun 2024 08:30:15 GMT

??HTTP 首部核心作用(面試考點)

  1. 傳遞上下文:客戶端類型(User-Agent)、認證信息(Authorization)。
  2. 內容協商:聲明支持的數據格式(Accept)、語言(Accept-Language)。
  3. 行為控制:緩存策略(Cache-Control)、連接管理(Connection)。
  4. 安全策略:CORS(Access-Control-Allow-Origin)、CSP(Content-Security-Policy)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85330.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85330.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85330.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 集群架構與高可用方案設計(二)

Kafka 集群架構與高可用方案的優化策略 合理配置參數 在 Kafka 集群的配置中&#xff0c;參數的合理設置對于系統的高可用性和性能表現起著關鍵作用。例如&#xff0c;min.insync.replicas參數定義了 ISR&#xff08;In-Sync Replicas&#xff0c;同步副本&#xff09;集合中…

47-Oracle ASH報告解讀

上一期生成了ASH報告后&#xff0c;就需要解讀報告關鍵信息。ASH的使用可以快速定位瞬時性能問題。生產環境的場景時間緊、任務重&#xff0c;但是必須要結合具體業務分析&#xff0c;同時借助其他工具做報告做趨勢分析。 一、ASH 技術原理? ?1. 核心機制? ?采樣原理?&a…

“本地化思維+模塊化體驗”:一款輕量數據中心監控系統的真實測評

“本地化思維模塊化體驗”&#xff1a;一款輕量數據中心監控系統的真實測評 在數據中心運維逐步精細化的今天&#xff0c;一款真正貼合本地用戶習慣、設計有溫度的系統并不多見。近期體驗了一款功能全面、邏輯清晰的監控平臺&#xff0c;給人留下了深刻印象。并不是廣。今天就從…

詞編碼模型有哪些

詞編碼模型有哪些 詞編碼模型在高維向量空間的關系解析與實例說明 如Word2Vec、BERT、Qwen等 一、高維向量空間的基礎概念 詞編碼模型(如Word2Vec、BERT、Qwen等)的核心是將自然語言符號映射為稠密的高維向量,使語義相近的詞匯在向量空間中位置接近。以Qwen模型為例,其…

elementui el-select 獲取value和label 以及 對象的方法

獲取 el-select 的 value 和 label 值 在 Element UI 的 el-select 組件中&#xff0c;可以通過以下方法獲取選項的 value 和 label 值。 1、綁定 v-model 獲取 value el-select 通常通過 v-model 綁定 value 值&#xff0c;直接訪問綁定的變量即可獲取當前選中的 value。…

樹莓派與嵌入式系統實驗報告

一、Linux 系統編譯工具鏈實踐&#xff1a;mininim 源碼編譯 虛擬機 Ubuntu 編譯流程 環境配置問題 編譯時遇到虛擬機無法聯網的情況&#xff0c;通過連接個人熱點解決&#xff08;校園網限制導致無法訪問外部資源&#xff09;。 執行 ./bootstrap 時報錯 gnulib-tool: command…

IDEA部署redis測試

新建springboot&#xff0c;項目改為&#xff1a;testredis E:\ideaproject\testredis\src\main\java\org\example\testredis\TestredisApplication.java 代碼為&#xff1a; package org.example.testredis;import org.springframework.boot.SpringApplication; import org.…

旅游服務禮儀實訓室:從歷史演進到未來創新的實踐探索

一、旅游服務禮儀實訓室的歷史演進&#xff1a;從禮制規范到職業化培養 旅游服務禮儀實訓室的建設并非一蹴而就&#xff0c;其發展歷程與人類對禮儀認知的深化及職業教育體系的完善密切相關。 1. 古代禮儀教育的萌芽 禮儀作為社會行為規范&#xff0c;最早可追溯至中國夏商周…

Could not find a declaration file for module ‘..XX‘.

1. 添加 Vue 聲明文件 如果您還沒有為 .vue 文件創建類型聲明&#xff0c;可以通過創建一個新的類型聲明文件來解決該問題。 步驟&#xff1a; 在您的項目根目錄下創建一個名為 shims-vue.d.ts 的文件&#xff08;您可以選擇其他名稱&#xff0c;但建議使用常見名稱以便于識…

OpenCV CUDA模塊設備層-----反正切(arctangent)函數atan()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 對輸入的 uchar1 像素值&#xff08;范圍 [0, 255]&#xff09;&#xff0c;先歸一化到 [0.0, 1.0] 浮點區間&#xff0c;然后計算其反正切值 at…

java中常見的排序算法設計介紹

排序算法 復雜度原地排序冒泡排序算法邏輯時間復雜度&#xff1a;最好O(n)&#xff0c;最壞和平均O(n^2)冒泡排序:穩定性算法 選擇排序算法邏輯時間復雜度&#xff1a;最好&#xff0c;最壞和平均都是O(n^2)選擇排序:不穩定性算法 插入排序算法邏輯時間復雜度&#xff1a;最好O…

深度學習系列81:MCP快速上手

MCP 是一種開放協議&#xff0c;通過標準化的服務器實現&#xff0c;使 AI 模型能夠安全地與本地和遠程資源進行交互。MCP 可幫助你在 LLM 之上構建智能代理和復雜的工作流。MCP 采用客戶端-服務器架構&#xff0c;主機應用程序可以連接到多個服務器。 這里用個demo展示一下如何…

【Python機器學習(一)】NumPy/Pandas手搓決策樹+使用Graphviz可視化(以西瓜書數據集為例)

下題來源于筆者學校的《模式識別與機器學習》課程的作業題,本文將通過使用NumPy處理數學運算,Pandas處理數據集,Graphviz實現決策樹可視化等Python庫來實現決策樹算法及其格式化。 導入用到的Python庫: import numpy as np import pandas as pd from graphviz import Digr…

react-activation 組件級緩存解決方案

文章目錄 一、KeepAlive 組件二、AliveScope 容器三、useAliveController Hook四、生命周期五、完整示例 react-activation 主要解決 React 項目中的「頁面緩存」需求(是第三方庫&#xff0c;非React 官方)&#xff0c;類似于 Vue 中的 <KeepAlive>&#xff1a; 功能說明…

CentOS 7內核升級方案

關于升級 CentOS 7 系統內核至 4.19 版本的可執行升級方案,可根據實際情況進行調整和完善,希望能對大家有所幫助: 一、升級背景與目的 隨著業務的發展和系統穩定性的要求,當前 CentOS 7 系統所使用的內核版本 3.10.0-1160.el7.x86_64 已經無法滿足部分新功能需求以及面臨…

樹莓派實驗實踐記錄與技術分析

一、內核驅動開發&#xff1a;hello 模塊實現 驅動程序代碼 #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_INFO "hello kernel\n"); return 0; } module_init(hello_init); static void …

【秦九紹算法】小紅的 gcd

題目 牛客網&#xff1a;小紅的 gcd 題目分析 我們知道&#xff0c;求gcd就用歐幾里得算法&#xff08;輾轉相除法&#xff09;&#xff1a;gcd(a,b)gcd(b,a mod b)。但是這題的a非常大&#xff0c;最大是一個1e6位數&#xff0c;無法使用任何數據類型存儲。如果使用高精度…

AWS服務監控之EC2內存監控

首先在IAM里找到角色&#xff0c;創建角色&#xff0c;選擇EC2 然后在被監控的機器上安裝cloudwatch-agent 官方鏈接在本地服務器上安裝 CloudWatch 代理 - Amazon CloudWatch wget https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-a…

鴻蒙 ArkWeb 和 H5混編開發

ArkWeb Web 相關標準技術(HTML/CSS/JS)&#xff0c;是業內支持性最廣泛的技術&#xff0c;可以在最廣泛的平臺下實現“一次編寫到處運行”&#xff1b;大部分對性能無需極致要求的應用頁面&#xff0c;都可以使用 Web 技術來實現。 鴻蒙 ArkWeb Kit&#xff08;方舟 Web&…

設計模式-迪米特法則(Law of Demeter, LoD)

迪米特法則&#xff08;Law of Demeter, LoD&#xff09; 別名&#xff1a;最少知識原則&#xff08;Least Knowledge Principle&#xff09; 核心思想&#xff1a;一個對象應盡可能少地與其他對象發生交互&#xff0c;只與直接的朋友&#xff08;成員變量、方法參數、方法返回…