基礎知識《HTTP字段與狀態碼詳細說明》

HTTP 協議字段與狀態碼完整指南


一、HTTP 字段(請求頭與響應頭)

HTTP 頭字段用于傳遞客戶端和服務器之間的元數據,分為 請求頭(Request Headers)響應頭(Response Headers)


1. 常見請求頭字段

字段名說明示例值
Host目標服務器的主機名和端口號(必填字段)。Host: example.com:8080
User-Agent客戶端標識(瀏覽器、操作系統或應用程序信息)。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept客戶端支持的響應內容類型(MIME 類型)。Accept: application/json, text/html
Accept-Encoding支持的壓縮編碼。Accept-Encoding: gzip, deflate
Content-Type請求體的媒體類型。Content-Type: application/json
Authorization身份憑證(如 JWT Token)。Authorization: Bearer eyJhbGciOiJ...
Cookie客戶端發送的 Cookie 信息。Cookie: session_id=abc123; user=admin
Cache-Control緩存策略。Cache-Control: no-cache(禁用緩存)
Referer當前請求的來源頁面 URL。Referer: https://google.com
Accept-Charset聲明客戶端支持的字符集及其優先級(如 UTF-8、ISO-8859)。現代瀏覽器通常默認支持 UTF-8,此字段已較少顯式使用。Accept-Charset: utf-8, iso-8859-1; q=0.5(q 值表示權重)
Accept-Language指定客戶端期望的自然語言(如中文、英文)。服務端根據優先級返回多語言內容。Accept-Language: zh-CN, en-US; q=0.8
Cookie客戶端向服務器發送已存儲的 Cookie 數據。Cookie: session_id=abc123; user=admin
If-Modified-Since資源在指定時間后未修改則返回 304 狀態碼,使用本地緩存。關聯字段Last-Modified(響應頭)。If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match攜帶資源的 ETag 值,若未變化則返回 304。比時間戳更精確,避免時間同步問題。If-None-Match: "737060cd8c284d8af7ad3082f209582d"
X-Forwarded-For標識客戶端的原始 IP(常用于代理鏈中記錄真實來源)。非標準字段,需代理服務器顯式添加。X-Forwarded-For: 192.168.1.1, 10.0.0.1(第一個 IP 為客戶端)
Priority提示服務器請求的優先級(如資源加載順序)。優化頁面加載性能,需瀏覽器和服務端共同支持(當前支持度有限)。在 HTTP/2 和 HTTP/3 中,優先級機制通過專門的?PRIORITY_UPDATE?幀實現,而非頭字段。Priority: u=1, i(表示高優先級)

2. 常見響應頭字段

字段名說明示例值
Content-Type響應體的媒體類型及編碼。Content-Type: text/html; charset=UTF-8
Content-Encoding響應體的壓縮方式。Content-Encoding: gzip
Server服務器軟件信息。Server: Apache/2.4.1
Set-Cookie服務器設置的 Cookie。Set-Cookie: session_id=def456; Path=/; HttpOnly
Location重定向目標 URL(用于 3xx 狀態碼)。Location: https://new-example.com
Cache-Control資源緩存策略。Cache-Control: public, max-age=3600(緩存 1 小時)
Access-Control-Allow-Origin允許跨域請求的源。Access-Control-Allow-Origin: *(允許所有域名)
ETag資源的唯一標識符(用于緩存驗證)。ETag: "12345abcde"
WWW-Authenticate定義身份驗證方式(如 Basic、Bearer Token)。配合 401 狀態碼要求客戶端提供憑證。WWW-Authenticate: Basic realm="Access to site"
Last-Modified資源最后修改時間,用于緩存驗證。關聯請求頭If-Modified-SinceLast-Modified: Tue, 15 Nov 1994 08:12:31 GMT
Expires指定資源過期時間(HTTP/1.0 緩存機制)。已被 Cache-Controlmax-age 取代,優先級更低。Expires: Thu, 01 Dec 2025 16:00:00 GMT

3. 通用字段

字段名說明示例值
Connection控制連接是否在當前事務完成后關閉。優化性能時啟用長連接,減少重復握手開銷。Connection: keep-alive(HTTP/1.1 默認,保持長連接)Connection: close(HTTP/1.0 默認,關閉連接)
Content-Length表示請求或響應體的字節長度。若使用分塊傳輸(Transfer-Encoding: chunked),則無需此字段。Content-Length: 348
Date報文創建時間,格式為格林威治時間(GMT)。用于緩存驗證和日志記錄。Date: Tue, 15 Nov 1994 08:12:31 GMT

4. 請求頭與響應頭完整示例

請求示例
GET /api/user?id=123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Cache-Control: no-cache
Cookie: session_id=abc123
響應示例
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Cache-Control: max-age=3600
Set-Cookie: session_id=def456; Path=/; HttpOnly
ETag: "12345abcde"
Content-Length: 128{"id": 123, "name": "John Doe"}

二、HTTP 狀態碼詳解

HTTP 狀態碼由三位數字組成,分為五類:


1. 1xx(信息響應)

  • 100 Continue
    客戶端應繼續發送請求體(用于大文件上傳前的確認)。
  • 101 Switching Protocols
    服務器同意切換協議(如從 HTTP 切換到 WebSocket)。

2. 2xx(成功)

  • 200 OK
    請求成功,返回預期結果。
HTTP/1.1 200 OK
Content-Type: text/html
<html>...</html>
  • 201 Created
    資源已創建(常用于 POST 請求)。
HTTP/1.1 201 Created
Location: /api/users/789
{"id": 789, "message": "User created"}
  • 204 No Content
    請求成功,但無返回內容(如 DELETE 請求)。

3. 3xx(重定向)

  • 301 Moved Permanently
    資源永久遷移到新 URL(SEO 友好)。
HTTP/1.1 301 Moved Permanently
Location: https://new-example.com
  • 302 Found
    資源臨時重定向(瀏覽器下次仍請求原 URL)。
HTTP/1.1 302 Found
Location: /temp-page
  • 304 Not Modified
    資源未修改,客戶端使用本地緩存。
HTTP/1.1 304 Not Modified
ETag: "12345abcde"

4. 4xx(客戶端錯誤)

  • 400 Bad Request
    請求格式錯誤(如缺少必填字段)。
HTTP/1.1 400 Bad Request
{"error": "Missing 'email' field"}
  • 401 Unauthorized
    需要身份驗證(未提供有效憑證)。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example.com"
  • 403 Forbidden
    服務器拒絕訪問(權限不足)。
HTTP/1.1 403 Forbidden
{"error": "Access denied"}
  • 404 Not Found
    請求的資源不存在。
HTTP/1.1 404 Not Found
<h1>404 Page Not Found</h1>

5. 5xx(服務器錯誤)

  • 500 Internal Server Error
    服務器內部錯誤(通用錯誤碼)。
HTTP/1.1 500 Internal Server Error
{"error": "Database connection failed"}
  • 502 Bad Gateway
    代理服務器從上游服務器收到無效響應。
HTTP/1.1 502 Bad Gateway
  • 503 Service Unavailable
    服務器暫時不可用(維護或過載)。
HTTP/1.1 503 Service Unavailable
Retry-After: 3600

三、關鍵總結與最佳實踐

  1. HTTP 字段

    • 使用 Cache-ControlETag 優化緩存性能。
    • 跨域請求時配置 Access-Control-Allow-Origin
    • 敏感信息通過 Authorization 頭傳遞,而非 URL 參數。
  2. 狀態碼使用原則

    • 精準匹配場景:避免濫用 200500
      • 資源不存在 → 404
      • 身份未認證 → 401
      • 權限不足 → 403
    • 重定向區分
      • 永久遷移 → 301
      • 臨時跳轉 → 302
    • 客戶端錯誤:提供清晰的錯誤描述(如 400 時指明缺失字段)。
  3. 安全建議

    • Cookie 設置 HttpOnlySecure 屬性。
    • 使用 HTTPS 加密傳輸敏感數據。

四、特殊狀態碼(彩蛋)

  • 418 I’m a Teapot
HTTP/1.1 418 I'm a Teapot
Content-Type: text/plain
I'm a teapot. Can't brew coffee.

源自 RFC 2324,用于幽默或測試場景。

附錄:完整 HTTP 狀態碼列表可參考 MDN Web Docs。

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

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

相關文章

DeepSeek linux服務器(CentOS)部署命令筆記

Linux&#xff08;CentOS&#xff09;FinalShellOllama遠程訪問&#xff0c;本地部署deepseek 自備CentOS服務器&#xff0c;并且已經使用FinalShell連接到服務器 一、準備工作 1.更新服務器 apt-get update-y 2.下載Ollama curl -fsSL https://ollama.com/install.sh | …

C#通過API接口返回流式響應內容---分塊編碼方式

1、背景 上一篇文章《C#通過API接口返回流式響應內容—SSE方式》闡述了通過SSE&#xff08;Server Send Event&#xff09;方式&#xff0c;由服務器端推送數據到瀏覽器。本篇是通過分塊編碼的方式實現 2、效果 3、具體代碼 3.1 API端實現 [HttpGet] public async Task Chu…

SSL 原理及實驗

引言 為了實現遠程辦公或者遠程客戶訪問內網的資源 &#xff08;1&#xff09;回顧歷史&#xff1a; 起初先出現SSL(Secure Sockets Layer&#xff09;&#xff0d;安全套接層協議。 美國網景Netscape公司1994年研發&#xff0c;介于傳輸層TCP協議和應用層協議之間的一種協議…

C++ 布爾類型(bool)深度解析

引言 在 C 編程里&#xff0c;布爾類型&#xff08;bool&#xff09;是一種基礎且極為關鍵的數據類型。它專門用于表達邏輯值&#xff0c;在程序的條件判斷、循環控制等諸多方面都發揮著重要作用。接下來&#xff0c;我們將對 C 中的布爾類型展開全面且深入的探討。 一、布爾…

UE5.5 Niagara發射器更新屬性

發射器屬性 在 Niagara 里&#xff0c;Emitter 負責控制粒子生成的規則和行為。不同的 Emitter 屬性決定了如何發射粒子、粒子如何模擬、計算方式等。 發射器 本地空間&#xff08;Local Space&#xff09; 控制粒子是否跟隨發射器&#xff08;Emitter&#xff09;移動。 ?…

各省水資源平臺 水資源遙測終端機都用什么協議

各個省水資源平臺 水資源遙測終端機 的建設大部分從2012年開始啟動&#xff0c;經過多年建設&#xff0c;基本都已經形成了穩定的通訊要求&#xff1b;河北瑾航科技 遙測終端機&#xff0c;兼容了大部分省市的通訊協議&#xff0c;如果需要&#xff0c;可以咨詢和互相學習&…

使用OpenCV和MediaPipe庫——抽煙檢測(姿態監控)

目錄 抽煙檢測的運用 1. 安全監控 (1) 公共場所禁煙監管 (2) 工業安全 2. 智能城市與執法 (1) 城市違章吸煙檢測 (2) 無人值守管理 3. 健康管理與醫療 (1) 吸煙習慣分析 (2) 遠程監護 4. AI 監控與商業分析 (1) 保險行業 (2) 商場營銷 5. 技術實現 (1) 計算機視…

WPF窗口讀取、顯示、修改、另存excel文件——CAD c#二次開發

效果如下&#xff1a; using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…

HarmonyOS NEXT - 電商App實例三( 網絡請求axios)

使用axios開發網絡請求是一個非常常見的任務&#xff0c;尤其是Web前端開發者&#xff0c;對它非常熟悉。axios是一個基于Promise的HTTP客戶端&#xff0c;支持瀏覽器和Node.js環境&#xff0c;使用簡單且功能強大。 在harmonyOS中&#xff0c;如果想使用axios&#xff0c;可以…

生成省市區JSON

省市區 學習記錄 https://xiangyuecn.github.io/AreaCity-JsSpider-StatsGov/ package cn.serverx.sx.your;import cn.hutool.core.io.FileUtil; import cn.serverx.sx.your.vo.DistrictNode; import com.alibaba.fastjson2.JSON; import com.google.common.collect.Lists; i…

醫療APP開發如何實現跨機構數據互通

醫療APP開發如何實現跨機構數據互通 在數字化醫療時代,醫療APP開發已成為連接醫療機構、患者和醫療資源的重要橋梁。然而,如何實現跨機構的數據互通,成為醫療APP開發中的一大挑戰。本文將探討如何通過醫療APP開發實現跨機構數據互通,提升醫療服務效率和患者體驗。我們將涵…

自定義Linux網絡協議的開發與測試

在當今快速發展的技術領域中,定制化網絡協議可以為特定的應用場景提供靈活而強大的解決方案。本文將詳細介紹如何在Linux系統上開發一個自定義網絡協議,并編寫相應的用戶空間程序進行測試。所有步驟基于2025年3月11日的時間點完成。 開發自定義協議內核模塊 定義協議和實現…

PySide(PyQT)的mouseMoveEvent()和hoverMoveEvent()的區別

在 PySide中&#xff0c;mouseMoveEvent 和 hoverMoveEvent 都是用于處理鼠標移動相關操作的事件&#xff0c;但它們之間存在明顯的區別&#xff1a; 事件觸發條件 ? mouseMoveEvent&#xff1a; 當鼠標在對應的圖形項&#xff08;如 QGraphicsPixmapItem&#xff09…

級聯樹SELECTTREE格式調整

步驟&#xff1a; 1、將全部列表設置成Map<Long, List<Obejct>> map的格式&#xff0c;方便查看每個父級對應的子列表&#xff0c;減少循環次數 2、對這個map進行遞歸&#xff0c;重新進行級聯樹的集合調整&#xff0c;將子集放置在對應的childs里面。 public Dyna…

詳解數據庫范式

范式 1. 第一范式&#xff08;1NF&#xff09;2. 第二范式&#xff08;2NF&#xff09;3. 第三范式&#xff08;3NF&#xff09;4. BC范式&#xff08;BCNF&#xff0c;Boyce-Codd Normal Form&#xff09;5. 第四范式&#xff08;4NF&#xff09;6. 第五范式&#xff08;5NF&a…

一窺DeepSeek開源EPLB項目:揭開技術背后的面紗

摘要 在DeepSeek開源DualPipe項目的同一天&#xff0c;EPLB項目也正式對外公開。EPLB&#xff08;Enhanced Pipeline Balancing&#xff09;并非一蹴而就的奇跡&#xff0c;而是經過長時間的研發與優化。該項目旨在通過改進管道平衡機制&#xff0c;提升系統的穩定性和效率。本…

Unity進階課程【二】Mask 組件的使用 UI遮罩效果以及透明摳圖效果

Unity組件講解 Mask 時隔多年&#xff0c;今天咱們繼續進階課程&#xff0c;這幾年變化很大&#xff0c;但是一直還是從事Unity行業&#xff0c;行業雖難&#xff0c;依舊堅持&#xff0c;以后會養成習慣&#xff0c;定期更新&#xff0c;希望小伙伴們監督&#xff0c;有想學習…

汽車無鑰匙啟動系統不使用傳統機械鑰匙啟動汽車

汽車無鑰匙啟動系統 定義 汽車無鑰匙啟動系統&#xff08;Keyless Start System&#xff09;&#xff0c;啟動車輛時不用掏擰鑰匙&#xff0c;只需把鑰匙放在包內或口袋里&#xff0c;按下車內按鍵或擰動導板即可使發動機點火。它無需插入鑰匙&#xff0c;通過點按按鍵或旋轉…

Webpack 和 Vite 的主要區別

Webpack 和 Vite 的主要區別&#xff0c;從構建機制、開發體驗、生產優化等多個維度進行對比&#xff1a; 1. 構建機制與速度 Webpack 全量打包&#xff1a;啟動時必須分析所有模塊依賴關系&#xff0c;進行全量打包&#xff0c;生成 Bundle 文件。項目越大&#xff0c;冷啟動時…

【Python】Python 3.11安裝教程

一、Python 3.11安裝包下載 1. Python 3.11下載與安裝 Download Python | Python.org 下載完成包含以下文件&#xff1a; 二、python3.11安裝步驟 1.右鍵以管理員身份運行安裝程序。 2.勾選【Add Python…】然后點擊【Customize…】。 3.頁面點擊【Next】。 4.勾選【Install …