《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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;成员变量、方法参数、方法返回…