基础知识《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.mzph.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 …