HTTP请求与HTTP响应介绍及其字段
HTTP请求
-
请求行:请求行主要包含请求方法、请求URI(统一资源标识符)和HTTP协议版本。例如:
GET /index.html HTTP/1.1
-
请求头(Headers):包含客户端的元数据,为服务器提供了额外信息,以便更好地理解和处理请求,常见字段如下:
- Host:指定目标主机名和端口号。
- User-Agent:描述客户端信息,如操作系统、浏览器版本等。
- Accept:指定客户端能够处理的内容类型,如
text/html
、application/json
等。 - Accept-Encoding:客户端支持的内容压缩方式,如gzip、deflate等。
- Accept-Language:指示客户端优先接受的自然语言列表,让服务器返回特定语言或本地化的内容。
- Authorization:携带认证凭据(例如 Bearer Token)来证明用户身份。
- Connection:如**
keep-alive
指示服务器保持连接**;close
则指示请求后关闭连接。 - Content-Type:用于POST、PUT等有请求体的方法,指定请求体MIME类型,如
application/json
、application/x-www-form-urlencoded
等。 - Cookie:将之前服务器下发的 Cookie 信息保存到浏览器中,之后自动随请求发送回服务器,实现会话管理、用户认证。
- 缓存相关字段:
- Cache-Control:客户端用来告知服务器或缓存代理它希望如何控制缓存行为(
no-cache
、no-store
、max-age=0
)。 - If-Modified-Since / If-None-Match:客户端用来询问服务器资源是否有更新,如果资源未修改,服务器返回 304 状态码,客户端则使用本地缓存版本。
- Cache-Control:客户端用来告知服务器或缓存代理它希望如何控制缓存行为(
-
请求体:可选部分,主要用于携带要发送给服务器的具体数据,例如表单数据、文件上传或JSON数据,常见的格式有:
-
application/x-www-form-urlencoded:简单的文本类型表单数据。
-
multipart/form-data:包含文件上传或二进制数据的表单数据。
-
application/json:JSON格式数据。
-
-
响应头:服务端返回给客户端的元数据信息
-
Status Code:状态码
-
Content-Type:指示响应体的MIME类型,有
text/html; charset=UTF-8
、application/json
、image/png
等。 -
Content-Encoding:让浏览器通过指定的压缩方式对响应内容进行解压缩。
-
Set-Cookie:服务器用来指示浏览器存储 Cookie 的标头。附加属性例如
HttpOnly
、Secure
、SameSite
、path
用以加强安全性。- HttpOnly:无法通过js语言获取cookie数据
- Secure:让浏览器只在 HTTPS 通道中携带这个 cookie
- SameSite:关于跨站请求是否携带cookie,跨站与跨域的区别是跨域子域名可以不同,但跨站子域名必须相同,比如
a.example.com
和b.example.com
的子域名不同,但顶级域名和一级域名相同,所以属于跨站而不是跨域- none:允许任何跨站请求携带cookie
- lax:只允许**大部分跨站的get请求(导航、跳转)**携带cookie
- strict:不允许任何跨站请求携带cookie,是否使用取决于前后端分离项目中是否需要通过cookie传数据,不需要则设置为strict、否则设置为none + secure
- path:浏览器中会自动携带该cookie的请求路径
-
Access-Control-Allow-Origin:在跨域请求中,服务器用来指定允许访问资源的来源
-
Access-Control-Allow-Credentials:指明是否允许客户端在跨域请求中携带 Cookie 等凭证信息。
-
Content-Length:指示响应体的字节长度。
-
Server:显示服务器使用的软件信息,例如 Apache、nginx、IIS等。
-
Date:响应发送的时间。
-
缓存相关字段:
-
Cache-Control:服务器设置缓存规则,以确定该用户是否将从其本地缓存加载资源(
no-cache
、no-store
、max-age=3600
)。 -
Expires:指定客户端缓存过期的时间。
-
Last-Modified:表示资源的最后修改时间,在下一次请求时,客户端可以用
If-Modified-Since
来判断缓存是否有效。 -
ETag:资源的唯一标识符,基于内容生成的哈希值。让客户端使用
If-None-Match
与资源当前状态做比较,以判断缓存是否有效。 -
Etag和Last-Modified的区别:
Last-Modified:标注的最后修改只能精确到秒级,如果某些文件在 1 秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间;又或者如果某些文件会被定期保存,可能内容并没有任何变化,但 Last-Modified 却改变了,导致文件无法有效使用缓存,此时使用Etag解决。
Etag:Etag在每次请求时,服务端都必须对资源进行哈希计算,这比起简单获取一下修改时间,开销要大了很多。
Etag 和 Last-Modified 一起使用:服务器会优先验证 Etag,在 Etag 一致的情况下,再去对比 Last-Modified,这是为了防止有一些 HTTP 服务器未将文件修改日期纳入哈希范围内。
-
-
HTTP 响应
- 响应行
包括HTTP版本、状态码和状态消息,如HTTP/1.1 200 OK
。 - 响应头
如Content-Type、Server、Date、Set-Cookie等,提供响应的附加信息。 - 响应体
包含实际的请求结果,如HTML页面、JSON数据、图像文件等。 - 响应码
状态码 | 类型 | 描述 |
---|---|---|
200 OK | 2xx 成功 | 请求成功,并返回所请求的数据。 |
201 Created | 2xx 成功 | 请求成功且服务器创建了新的资源(常用于 POST 请求)。 |
204 No Content | 2xx 成功 | 请求成功,但没有返回任何内容,常见于删除或更新操作后。 |
301 Moved Permanently | 3xx 重定向 | 资源已被永久移动到新 URL,客户端和搜索引擎将更新访问链接。 |
302 Found | 3xx 重定向 | 请求的资源临时位于其他 URL,服务器提示继续使用原 URL 访问。 |
304 Not Modified | 3xx 重定向 | 缓存内容未修改,无须重新传输数据。 |
400 Bad Request | 4xx 客户端错误 | 请求格式错误或缺少必需参数,服务器无法理解请求。 |
401 Unauthorized | 4xx 客户端错误 | 请求未经授权,需要提供有效的身份验证凭证。 |
403 Forbidden | 4xx 客户端错误 | 服务器理解请求但拒绝执行,可能由于权限限制。 |
404 Not Found | 4xx 客户端错误 | 请求的资源不存在,常见于错误链接或资源被删除的场景。 |
405 Method Not Allowed | 4xx 客户端错误 | 请求方法不被允许,例如用 GET 访问只允许 POST 的接口。 |
500 Internal Server Error | 5xx 服务器错误 | 服务器内部出现错误,无法完成请求。 |
502 Bad Gateway | 5xx 服务器错误 | 网关或代理服务器从上游服务器接收到无效响应。 |
503 Service Unavailable | 5xx 服务器错误 | 服务器当前无法处理请求,可能由于过载或正在维护中。 |
504 Gateway Timeout | 5xx 服务器错误 | 作为网关或代理服务器时,未及时从上游服务器获得响应。 |
相关文章:
HTTP请求与HTTP响应介绍及其字段
HTTP请求 请求行:请求行主要包含请求方法、请求URI(统一资源标识符)和HTTP协议版本。例如: GET /index.html HTTP/1.1 请求头(Headers):包含客户端的元数据,为服务器提供了额外信息…...

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理
Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容(挠头),最近会混合复习针对全栈这块的内容,目前是根据受伤的JD,优先选择一些基础的操作系统、Java、Nod…...

中科院报道铁电液晶:从实验室突破到多场景应用展望
2020年的时候,相信很多关注科技前沿的朋友都注意到,中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶(FeLC)。这项被业内称为 "下一代显示核心材料" 的研究,究竟取得了哪些实质性进展…...

智慧政务标准规范介绍:构建高效、协同的政务信息体系
在当今信息化快速发展的时代,智慧政务作为政府数字化转型的重要方向,正逐步改变着政府管理和服务的方式。为了确保智慧政务系统的建设能够有序、高效地进行,国家制定了一系列标准规范,其中GB∕T 21062系列标准《政务信息资源交换体…...
6个月Python学习计划 Day 12 - 字符串处理 文件路径操作
第一周 Day 1 - Python 基础入门 & 开发环境搭建 Day 2 - 条件判断、用户输入、格式化输出 Day 3 - 循环语句 range 函数 Day 4 - 列表 & 元组基础 Day 5 - 字典(dict)与集合(set) Day 6 - 综合实战:学生信息…...
CSS篇-3
1. CSS 中哪些样式可以继承?哪些不可以继承? 可继承的样式: 与字体相关的样式,如:font-size、font-family、color 列表样式:list-style(如 UL、OL 的 list-style-type) 不可继承的样式: 与布局和尺寸相关的样式,如:border、padding、margin、width、height 总结: …...
Unity使用Lua框架和C#框架开发游戏的区别
在Unity中使用Lua框架和C#框架开发游戏有显著的区别,主要体现在性能、开发效率、热更新能力、维护成本等方面。 1. 语言类型与设计目标 维度LuaC#类型动态类型、解释型脚本语言静态类型、编译型面向对象语言设计初衷轻量级嵌入、配置和扩展宿主程序通用开发&#…...
Go开发简历优化指南
一、简历格式与排版 (一)简洁至上 去除多余装饰:在 Go 后台开发简历中,应摒弃那些花哨却无实际作用的元素,比如复杂的封面、页眉、页脚等。设想招聘人员每日要处理大量简历,若你的简历有繁杂的封面设计&a…...

手机照片太多了存哪里?
手机相册里塞满了旅行照片、生活碎片,每次清理都舍不得删?NAS——一款超实用的存储方案,让你的回忆安全又有序~ 1️⃣自动备份解放双手 手机 / 电脑 / 相机照片全自动同步到 NAS,再也不用手动传文件 2️⃣远程访问像…...
【论文笔记】SecAlign: Defending Against Prompt Injection with Preference Optimization
论文信息 论文标题:SecAlign: Defending Against Prompt Injection with Preference Optimization - CCS 25 论文作者: Sizhe Chen - UC Berkeley ;Meta, FAIR 论文链接:https://arxiv.org/abs/2410.05451 代码链接:h…...
IP Search Performance Tests dat/db/xdb/mmdb 结构性能差异对比
IP Search Performance Tests qqzeng-ip by 2025-06-01 测试环境: BenchmarkDotNet v0.15.0 macOS Sequoia 15.5 (24F74) [Darwin 24.5.0] Apple M4 Max, 1 CPU, 14 logical and 14 physical cores .NET SDK 10.0.100-preview.4.25258.110 [Host]: .NET…...

OpenRouter使用指南
OpenRouter 是一个专注于大模型(LLM)API 聚合和路由的服务平台,旨在帮助开发者便捷地访问多种主流大语言模型(如 GPT-4、Claude、Llama 等),并提供统一的接口、成本优化和智能路由功能。以下是它的核心功能…...
Linux 中 m、mm、mmm 函数和 make 的区别
在 Linux 内核开发和 Android 开发中,构建系统通常使用 make 命令来编译和构建项目。而在 Android 开发环境中,还有 m、mm 和 mmm 等命令,这些命令是 Android 构建系统的一部分,提供了更高效和便捷的构建方式。以下将详细介绍这些…...
【MAC】YOLOv8/11/12 转换为 CoreML 格式并实现实时目标检测
在本文中,我们将详细介绍如何将 YOLOv8/11/12 模型转换为 CoreML 格式,并使用该模型在摄像头实时检测中进行目标检测。主要适用于M1、M2、M3、M4芯片的产品。 以下教程在YOLOv8/11/12均适用,此处就以 YOLOv11 举例 目录 前提条件YOLOv8/11/12 转换为 CoreML实时目标检测结论…...
NodeJS全栈WEB3面试题——P7工具链 测试
📊 7.1 Truffle vs Hardhat:各自的优势? 项目TruffleHardhat📦 成熟度老牌框架,社区大,文档全面新一代框架,现代化设计🧪 测试支持内置 Mocha 测试框架支持 Mocha Chai,…...
Mybatis框架各配置文件主要内容详解(二)
ResultMap解决了数据库字段与实体类之间不一致导致的问题 <!--resultMap:设置自定义映射属性:id:表示自定义映射的唯一标识type:查询的数据要映射的实体类的类型子标签:id:设置主键的映射关系result&…...

【优选算法 | 队列 BFS】构建搜索流程的核心思维
算法相关知识点可以通过点击以下链接进行学习一起加油!双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”,但为什么一定是队列?它到底在整个搜索流程中起了什么作…...
virtio介绍 (三)--spdk作为virtio后端处理nvme盘io的流程--上
目录 一 简介 二 vhost-blk层 三 bdev层 四 lvol层 五 bdev_nvme层 六 硬件驱动层 七 完整取io调用栈流程 一 简介 上节介绍了virito的基本原理,后面根据实际代码介绍virtio的流程。virtio后端代码相对于前端代码更简单,我们先以spdk中的virtio后…...
关于BackgroundScheduler的pause
在APScheduler中,pausedTrue参数的作用对象取决于其使用场景: 1. 作用于调度器(Scheduler) 当在start()方法中使用时(如 scheduler.start(pausedTrue)) 表示调度器本身启动后立即进入暂停状态&…...

设计模式(行为型)-中介者模式
目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为:用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽,使各对象不需要…...

【Java学习笔记】异常
异常(Exception) 一、基本介绍 在 Java 程序中,将运行中发生的不正常情况称为 “异常”,开发过程中的语法错误和运行时发生的异常情况是不一样的。 二、异常的分类 1. Error(错误):Java 虚拟…...

MySQL:视图+用户管理+访问+连接池原理
一、视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样(相当于是把查询的内容当成一个临时表来使用),视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 1.1 为…...

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理
前言 突然有需求需要用apoc 导入 低版本的图谱数据,网上资料又比较少,所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…...
C/C++ OpenCV 矩阵运算
C/C OpenCV 矩阵运算详解 💡 OpenCV 是一个强大的开源计算机视觉和机器学习库,它提供了丰富的矩阵运算功能,这对于图像处理和计算机视觉算法至关重要。本文将详细介绍如何使用 C/C 和 OpenCV 进行常见的矩阵运算。 矩阵的创建与初始化 在进…...

无人机桥梁3D建模的拍摄频率
无人机桥梁3D建模的拍摄频率 无人机桥梁3D建模的拍摄频率(每秒拍摄照片数)需根据建模精度、飞行速度、相机性能等因素综合确定。以下是专业级作业的详细参数分析: 1. 核心计算公式 拍摄频率(fps) \frac{飞行速度&…...

ESP32-idf学习(三)esp32C3连接iot
一、前言 上一篇用蓝牙作为通信方式,虽然勉强完成了控制,但结果显然不是那么符合我们的预期,既然用蓝牙还需要研究一段时间,那我们就先整一些现成的,不需要研究的!iot云平台!这里当然也是通过w…...

详解鸿蒙仓颉开发语言中的计时器
今天又到了大家喜闻乐见的科普环节,也可以说是踩坑环节,哈哈哈。今天聊一聊仓颉开发语言中的计时器,这部分可老有意思了。 为什么这么说呢,因为关于仓颉的计时器你几乎搜不到任何的文档,也没有相关的代码提示…...

【计算机网络】第3章:传输层—拥塞控制原理
目录 一、PPT 二、总结 (一)拥塞的定义 (二)拥塞产生的原因 (三)拥塞控制的目标 (四)拥塞控制方法分类 1. 端到端拥塞控制 2. 网络辅助拥塞控制 (五)…...

Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期)
Vue3(watch,watchEffect,标签中ref的使用,TS,props,生命周期) watch监视 情况三:监视reactive定义的对象类型的数据 监视reactive定义的对象类型的数据,默认开启深度监视。地址没变,新值和旧…...

【nssctf第三题】[NSSCTF 2022 Spring Recruit]easy C
这是题目,下载附件打开是个C文件 #include <stdio.h> #include <string.h>int main(){char a[]"wwwwwww";char b[]"dvxbQd";//try to find out the flagprintf("please input flag:");scanf(" %s",&a);if…...