Web请求与相应
目录
HTTP协议
一、协议基础特性
二、协议核心组成
三、完整通信流程(TCP/IP层)
1. 基础方法
2. 扩展方法
3. 安全性与幂等性
4. 应用场景示例
三、关键版本演进
四、典型工作流程
HTTP状态码
一、状态码分类体系
二、详细状态码表格(含关键代码)
三、特殊状态码详解
四、调试建议
ps:HTTP传输格式
一、**Content-Length 传输规范
1. 编码格式
2. 典型错误
二、**Transfer-Encoding: chunked 分块传输
1. 格式规范
2. 工程优势对比
三、**Connection 连接管理
1. HTTP/1.1 Keep-Alive
2. 异常处理
关键注意事项
HTTP协议
HTTP协议是互联网通信的核心协议之一,其设计初衷是为了实现超文本(如HTML、图片等)的高效传输。以下是HTTP协议的关键特性与工作机制:
一、协议基础特性
- 应用层协议
基于TCP/IP协议栈,工作在可靠传输层之上,默认端口80(HTTP)或443(HTTPS)。 - 请求-响应模型
客户端(如浏览器)发起请求,服务器返回响应,构成单向通信流程。 - 无状态性
每个请求独立处理,服务器不保留历史交互信息(依赖Cookie/Session扩展状态管理)。
二、协议核心组成
1、Web请求(HTTP Request)核心技术
-
请求结构分解
- 请求行:包含方法(GET/POST)、URI和协议版本(如
HTTP/1.1
),决定操作类型与资源路径 - 请求头:传递元数据,例如:
User-Agent
标识客户端类型Content-Type
声明请求体格式(如application/json
)
- 请求体:POST/PUT请求时携带数据,支持表单、JSON或二进制流
- 请求行:包含方法(GET/POST)、URI和协议版本(如
-
Java Web处理示例
// 获取GET请求参数 String param = request.getParameter("key"); // 读取JSON请求体(SpringBoot) @RequestBody User user;
-
关键注意事项
- GET请求参数需URL编码,长度受限(约2048字符)
- POST请求需防范CSRF攻击(如添加
SameSite
Cookie)
2、Web响应(HTTP Response)核心机制
-
响应组成要素
- 状态行:状态码(如200成功、404未找到)和协议版本
- 响应头:控制缓存(
Cache-Control
)、数据类型(Content-Type
)等 - 响应体:HTML文档、JSON数据或文件流
-
缓存控制策略
- 强制缓存:
Cache-Control: max-age=3600
- 协商缓存:
ETag
/Last-Modified
- 强制缓存:
三、完整通信流程(TCP/IP层)
- 建立连接:三次握手建立TCP通道
- 请求处理:服务器解析请求并路由到对应处理器
- 响应生成:动态渲染或返回静态资源
- 连接管理:HTTP/1.1默认保持连接复用
HTTP协议定义了多种请求方法(也称为"动词"),用于指定对资源执行的不同操作。以下是主要方法的分类说明:
1. 基础方法
方法 | 作用 | 特点 |
---|---|---|
GET | 获取资源 | 幂等操作,参数通过URL传递,可被缓存 |
POST | 提交数据 | 非幂等,请求体携带数据(如表单、JSON),可能修改服务器状态 |
PUT | 更新资源 | 幂等性,需提供完整资源数据(用于全量更新) |
DELETE | 删除资源 | 幂等操作,删除指定URI对应的资源 |
2. 扩展方法
方法 | 用途 |
---|---|
HEAD | 只获取响应头(用于检查资源是否存在或验证缓存) |
PATCH | 部分更新资源(与PUT不同,仅发送需修改的字段) |
OPTIONS | 查询服务器支持的HTTP方法(常用于CORS预检请求) |
3. 安全性与幂等性
- 安全方法:GET/HEAD/OPTIONS(不改变服务器状态)
- 幂等方法:GET/PUT/DELETE(多次执行效果相同)
4. 应用场景示例
- GET:加载网页、查询API数据
- POST:用户登录、文件上传
- PUT:更新用户完整信息
- PATCH:修改用户手机号
三、关键版本演进
版本 | 核心改进 |
---|---|
HTTP/1.0 | 支持多种请求方法(GET/POST) |
HTTP/1.1 | 引入持久连接(Keep-Alive) |
HTTP/2 | 二进制分帧、多路复用 |
HTTP/3 | 基于QUIC协议,解决队头阻塞 |
四、典型工作流程
- 建立TCP连接:通过三次握手确保传输可靠性。
- 发送请求:客户端构造并发送HTTP请求报文。
- 处理与响应:服务器解析请求并返回资源或错误码。
- 关闭连接:HTTP/1.1默认保持连接复用,否则四次挥手断开。
HTTP状态码
一、状态码分类体系
HTTP状态码按首位数字分为5大类,涵盖从临时响应到服务器错误的完整生命周期:
类别 | 范围 | 核心功能描述 |
---|---|---|
1xx | 100-199 | 临时响应,需继续处理请求 |
2xx | 200-299 | 请求成功处理 |
3xx | 300-399 | 重定向或资源位置变更 |
4xx | 400-499 | 客户端请求错误 |
5xx | 500-599 | 服务器处理失败 |
二、详细状态码表格(含关键代码)
状态码 | 名称 | 触发场景与解决方案 |
---|---|---|
100 | Continue | 服务器已接收请求头,客户端应继续发送请求体(用于大文件上传) |
200 | OK | 标准成功响应,返回请求的资源(GET/POST) |
201 | Created | 资源创建成功(常见于POST/PUT) |
204 | No Content | 成功处理但无返回内容(用于DELETE或更新操作) |
301 | Moved Permanently | 资源永久迁移,搜索引擎更新索引(需配置Location头) |
302 | Found | 临时重定向(登录跳转等) |
304 | Not Modified | 缓存有效,服务器未返回新内容(依赖If-Modified-Since头) |
400 | Bad Request | 请求语法错误(如JSON格式错误) |
401 | Unauthorized | 需身份验证(未携带Token或失效) |
403 | Forbidden | 无权限访问(IP黑名单或文件权限限制) |
404 | Not Found | 资源不存在(检查URL或路由配置) |
415 | Unsupported Media Type | 请求媒体类型不支持(如服务器仅接收JSON但收到XML) |
500 | Internal Server Error | 服务器内部异常(数据库连接失败等) |
502 | Bad Gateway | 网关/代理服务器收到无效响应(上游服务崩溃) |
503 | Service Unavailable | 服务不可用(过载或维护中,需Retry-After头) |
三、特殊状态码详解
-
206 Partial Content
- 场景:分片下载或断点续传时返回部分内容
- 必需头:
Content-Range
指定数据范围
-
418 I'm a teapot (RFC 2324)
- 彩蛋状态码:表示服务器拒绝冲泡咖啡(用于幽默响应)
-
429 Too Many Requests
- 限流触发:客户端请求频率超出限制
- 解决方案:检查
Retry-After
头并降低请求速率
四、调试建议
-
浏览器开发者工具
- 查看Network面板中的Status列,过滤特定状态码(如
4xx
)
- 查看Network面板中的Status列,过滤特定状态码(如
-
curl命令测试
curl -v http://example.com/api # -v参数显示详细响应头
-
服务端日志分析
- 监控5xx错误率,设置自动告警阈值
ps:HTTP传输格式
一、**Content-Length 传输规范
1. 编码格式
- 定义逻辑:
Content-Length
字段值表示实体正文的精确字节数,包含所有字符(含不可见的换行符\r\n
) - 编码示例:
// 文本内容计算字节长度 String body = "Hello\r\nWorld"; // 实际字节数为 11(含\r\n) int length = body.getBytes(StandardCharsets.UTF_8).length; // 结果为 11:ml-citation{ref="4" data="citationList"} // 文件内容直接获取二进制长度 File file = new File("data.bin"); long fileLength = file.length(); // 直接读取二进制文件长度:ml-citation{ref="4" data="citationList"}
2. 典型错误
- TCP粘包:长度计算缺失分隔符时,接收方无法区分报文边界,导致合并读取多个请求
- 数据截断:若设置值小于实际长度,客户端仅读取部分数据(如
Content-Length: 100
但实际发送 120 字节)
二、**Transfer-Encoding: chunked 分块传输
1. 格式规范
分块传输需严格遵循以下格式:
7\r\n # 十六进制块大小(7字节)
Chunk1\r\n # 数据块
9\r\n # 下一块大小(9字节)
Chunk_Data\r\n
0\r\n # 结束标记
\r\n # 最终空行
- 块大小:以十六进制字符串表示,不包含
\r\n
,每个块后必须接\r\n
分隔符 - 结束标志:末尾需以
0\r\n\r\n
标识传输结束
2. 工程优势对比
场景 | Content-Length | chunked |
---|---|---|
动态生成内容 | 需预加载全部数据到内存 | 流式传输减少内存占用 |
大文件处理 | 需完整计算总长度 | 分块传输避免内存溢出 |
三、**Connection 连接管理
1. HTTP/1.1 Keep-Alive
- 默认行为:TCP连接复用,减少三次握手开销
- Nginx配置示例:
http {keepalive_requests 500; # 单连接最大请求数(默认100)keepalive_timeout 75s; # 空闲超时时间 }
- 超过
keepalive_requests
或超时后,服务端主动断开连接
- 超过
2. 异常处理
- 客户端重连:需实现自动重试机制(如指数退避策略)
- 服务端强制断开:通过
Connection: close
头部显式关闭连接
关键注意事项
- 编码一致性
Content-Length
必须与实体正文的字节数严格匹配,避免混合使用Transfer-Encoding
与Content-Length
(协议冲突)
- 调试建议
# 查看原始报文(含换行符) curl -v --raw http://example.com # 抓包分析分块传输 tcpdump -i any port 80 -A
相关文章:
Web请求与相应
目录 HTTP协议 一、协议基础特性 二、协议核心组成 三、完整通信流程(TCP/IP层) 1. 基础方法 2. 扩展方法 3. 安全性与幂等性 4. 应用场景示例 三、关键版本演进 四、典型工作流程 HTTP状态码 一、状态码分类体系 二、详细状态码表格&#…...

LeetCode222_完全二叉树的结点个数
LeetCode222_完全二叉树的结点个数 标签:#位运算 #树 #二分查找 #二叉树Ⅰ. 题目Ⅱ. 示例 0. 个人方法 标签:#位运算 #树 #二分查找 #二叉树 Ⅰ. 题目 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下&…...

STM32之温湿度传感器(DHT11)
KEIL软件实现printf格式化输出 一般在标准C库是提供了格式化输出和格式化输入等函数,用户想要使用该接口,则需要包含头文件 #include ,由于printf函数以及scanf函数是向标准输出以及标准输入中进行输出与输入,标准输出一般指的是…...

在微创手术中使用Kinova轻型机械臂进行多视图图像采集和3D重建
在微创手术中,Kinova轻型机械臂通过其灵活的运动控制和高精度的操作能力,支持多视图图像采集和3D重建。这种技术通过机械臂搭载的光学系统实现精准的多角度扫描,为医疗团队提供清晰且详细的解剖结构模型。其核心在于结合先进的传感器配置与重…...
2025版 JavaScript性能优化实战指南从入门到精通
JavaScript作为现代Web应用的核心技术,其性能直接影响用户体验。本文将深入探讨JavaScript性能优化的各个方面,提供可落地的实战策略。 一、代码层面的优化 1. 减少DOM操作 DOM操作是JavaScript中最昂贵的操作之一: // 不好的做法&#x…...
FluxCD入门操作文档
文章目录 FluxCD使用文档一、入门1.1 什么是FluxCD1.2 什么是GitOps1.3 什么是持续交付1.4 什么是**Source(源)**1.5 **什么是Reconciliation(协调)**1.6 什么是**Kustomization****与 kustomize 工具的区别**1.7 什么是**Bootstrap(引导)**1.8 安装Flux CLI1.9 配置flux…...

DOM API-JS通过文档对象树操作Doc和CSS
还记得我在之前的前端文章里面老是提及的 DOM 吗,当时只是简单介绍了它的组成以及作用,今天我们就来详细聊聊 Web浏览器 先来聊聊web浏览器,web浏览器是非常复杂的软件,有许多活动部件,许多部件并不能由开发者通过 J…...
实现了TCP的单向通信
1. 客户端代码:Client.java package com.xie.javase.net1;import java.io.*; import java.net.*;public class Client {public static void main(String[] args) {Socket socket = null;BufferedWriter bw = null;try {// 1. 获取本机IP地址对象InetAddress localHost = Inet…...
PostgreSQL中通过查询数据插入到表的几种方法( SELECT INTO和INSERT INTO ... SELECT)
使用 SELECT INTO 创建新表 在PostgreSQL中,SELECT INTO语法有两种主要用途:创建新表和将查询结果存储到变量中(在PL/pgSQL函数或存储过程中)。以下是详细介绍: 1. 创建新表并复制数据(类似SQL标准) SELECT * INTO new_table FROM existing_table WHERE condition;说…...
STM32项目实战:ADC采集
STM32F103C8T6的ADC配置。PB0对应的是ADC1的通道8。在标准库中,需要初始化ADC,设置通道,时钟,转换模式等。需要配置GPIOB的第0脚为模拟输入模式,然后配置ADC1的通道8,设置转换周期和触发方式。 接下来是I2C…...

CYT4BB Dual Bank - 安全启动
本节介绍TRAVEO™ T2G微控制器(MCU)的启动顺序。有关TRAVEO™ T2G微控制器的安全特性、不同的生命周期阶段以及“安全启动”序列的详细描述,请参阅 AN228680 -Secure system configuration in TRAVEO™ T2G family. TRAVEO™ T2G微控制器(MCU)的启动序列(见图3)基于…...
Windows系统下MySQL 8.4.5压缩包安装详细教程
一、MySQL 8.4.5新特性概览 相较于旧版本,MySQL 8.4.5在性能与功能上实现了显著提升: 性能优化:官方测试显示,在高并发场景下,其读写性能较5.7版本提升近2倍,尤其在处理热点数据竞争问题时表现更为出色。…...

科技行业智能化升级经典案例—某芯片公司
案例标题 CSGHub赋能某芯片公司:国产AI芯片全链路管理平台的高效落地与生态共建 执行摘要 某芯片公司在开发内部模型管理平台时,选择AgenticOps体系中的CSGHub作为核心工具,通过其本地化部署能力、中文支持及RESTful API接口,解决…...

Python编程从入门到实践 PDF 高清版
各位程序员朋友们,还在为找不到合适的Python学习资料而烦恼吗?还在为晦涩难懂的编程书籍而头疼吗?今天,就给大家带来一份重磅福利——237完整版PDF, 我用网盘分享了「Python编程:从入门到实践__超清版.pdf…...
互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战
互联网大厂Java求职面试:Spring Cloud微服务架构与AI集成挑战 引言 在当前快速发展的互联网行业中,Java开发者在面对复杂的分布式系统设计时,需要掌握从微服务架构到AI模型集成的多种技能。本文通过一场模拟面试,深入探讨了基于…...
MySQL中索引最左前缀法则、索引失效情况、前缀索引、索引设计原则
最左前缀法则 联合索引中,最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将会部分失效(后面的字段索引失效)举例假设有一个联合索引包含三个字段按顺序:…...
⚡ Linux Debian 安装与配置 Docker
🐧 Linux Debian 安装与配置 Docker 📦 1. Docker 简介 Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个标准化的镜像中,然后在任何地方快速部署和运行。 Docker 利用了 Linux 的 容器技术(N…...

系统性能不达标,如何提升用户体验?
当系统性能不达标时,要想有效提升用户体验,必须从性能优化、前后端协同、用户感知改善、监控预警机制四个关键维度切入。其中,性能优化是最直接有效的策略,它通过代码优化、资源压缩、缓存机制、CDN加速等手段,显著提升…...
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》
《深度掌控Linux:openEuler、CentOS、Debian、Ubuntu的全方位运维指南》 一、引言 在当今数字化的时代背景下,Linux操作系统凭借其卓越的性能、可靠性和开源的优势,在服务器、云计算、嵌入式系统等众多领域占据着举足轻重的地位。对于IT运维…...
Sentinel原理与SpringBoot整合实战
前言 随着微服务架构的广泛应用,服务和服务之间的稳定性变得越来越重要。在高并发场景下,如何保障服务的稳定性和可用性成为了一个关键问题。阿里巴巴开源的Sentinel作为一个面向分布式服务架构的流量控制组件,提供了从流量控制、熔断降级、…...

智能守护校园“舌尖安全“:AI视频分析赋能名厨亮灶新时代
引言: 在校园食品安全备受关注的今天,一套融合视频监控管理平台与AI视频分析盒子的智能解决方案正在全国多地学校食堂悄然落地,为传统的"名厨亮灶"工程注入科技新动能。这套系统不仅实现了后厨操作的"透明化"࿰…...
c++ 模板技巧——类型萃取
//traits.h/*制定输入 - 输出类型规则*/ template <class T> struct RtnType {typedef T return_type;//默认返回类型和输入类型一致 };template <class T> struct RtnType<T*> {//特化,当输入的是指针类型,返回类型规定为指针原型typ…...

初步尝试AI应用开发平台——Dify的本地部署和应用开发
随着大语言模型LLM和相关应用的流行,在本地部署并构建知识库,结合企业的行业经验或个人的知识积累进行定制化开发,是LLM的一个重点发展方向,在此方向上也涌现出了众多软件框架和工具集,Dify就是其中广受关注的一款&…...

卷积神经网络中的局部卷积:原理、对比与应用解析
【内容摘要】 本文聚焦卷积神经网络中的局部卷积,重点解析全连接、局部连接、全卷积与局部卷积四种连接方式的差异,结合人脸识别任务案例,阐述局部卷积的应用场景及优势,为理解卷积网络连接机制提供技术参考。 关键词:…...

重拾童年,用 CodeBuddy 做自己的快乐创作者
某个炎炎的夏日午后,阳光透过稀疏的树叶洒落在地上,一道道光影斑驳陆离。那时候的我们,还只是三五个小朋友,蹲坐在村头的一棵老槐树下,手里握着并不属于自己的游戏掌机,轮流按动着手柄的按键,在…...
MyBatis-Plus的自带分页方法生成的SQL失败:The error occurred while setting parameters
1、error描述 数据库是postgres,Java使用mybatis-plus的分页功能,生成的分页SQL不能正常运行。 "msg": "nested exception is org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: com.baomidou.my…...
Redis 的速度为什么这么快
这里的速度快,Redis 的速度快是与 MySQL 等数据库相比较的,与直接操作内存数据相比,Redis 还是略有逊色。 Redis 是一个单线程模型,为什么比其他的多线程程序还要快,原因有以几点: 1、访问的对象不同 Re…...

HarmonyOS实战:自定义时间选择器
前言 最近在日常鸿蒙开发过程中,经常会使用一些时间选择器,鸿蒙官方提供的时间选择器满足不了需求,所以自己动手自定义一些经常会使用到的时间选择器,希望能帮到你,建议点赞收藏! 实现效果 需求分析 默认…...
Flannel后端为UDP模式下,分析数据包的发送方式——tun设备(三)
在分析 Kubernetes 环境中 Flannel UDP 模式的数据包转发时,我们提到 flannel.1 是一个 TUN 设备,它在数据包处理中起到了关键作用。 什么是 TUN 设备? TUN 设备(Tunnel 设备)是 Linux 系统中一种虚拟网络接口&#x…...

6:OpenCV—图像滤波
过滤图像和视频 图像滤波是一种邻域运算,其中输出图像中任何给定像素的值是通过对相应输入像素附近的像素值应用某种算法来确定的。该技术通常用于平滑、锐化和检测图像和视频的边缘。 让我们了解在讨论图像过滤技术、内核和卷积时使用的一些术语的含义。 内核 内…...