Web请求与相应

news2025/5/24 2:57:29

目录

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协议的关键特性与工作机制:


一、协议基础特性

  1. 应用层协议
    基于TCP/IP协议栈,工作在可靠传输层之上,默认端口80(HTTP)或443(HTTPS)。
  2. 请求-响应模型
    客户端(如浏览器)发起请求,服务器返回响应,构成单向通信流程。
  3. 无状态性
    每个请求独立处理,服务器不保留历史交互信息(依赖Cookie/Session扩展状态管理)。

二、协议核心组成

1、Web请求(HTTP Request)核心技术

  1. 请求结构分解

    • 请求行‌:包含方法(GET/POST)、URI和协议版本(如HTTP/1.1),决定操作类型与资源路径
    • 请求头‌:传递元数据,例如:
      • User-Agent标识客户端类型
      • Content-Type声明请求体格式(如application/json
    • 请求体‌:POST/PUT请求时携带数据,支持表单、JSON或二进制流
  2. Java Web处理示例

    // 获取GET请求参数 
    String param = request.getParameter("key"); 
    
    // 读取JSON请求体(SpringBoot) 
    @RequestBody User user; 
  3. 关键注意事项

    • GET请求参数需URL编码,长度受限(约2048字符)
    • POST请求需防范CSRF攻击(如添加SameSite Cookie)

2、Web响应(HTTP Response)核心机制

  1. 响应组成要素

    • 状态行‌:状态码(如200成功、404未找到)和协议版本
    • 响应头‌:控制缓存(Cache-Control)、数据类型(Content-Type)等
    • 响应体‌:HTML文档、JSON数据或文件流
  2. 缓存控制策略

    • 强制缓存:Cache-Control: max-age=3600
    • 协商缓存:ETag/Last-Modified

三、完整通信流程(TCP/IP层)

  1. 建立连接‌:三次握手建立TCP通道
  2. 请求处理‌:服务器解析请求并路由到对应处理器
  3. 响应生成‌:动态渲染或返回静态资源
  4. 连接管理‌: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协议,解决队头阻塞

四、典型工作流程

  1. 建立TCP连接‌:通过三次握手确保传输可靠性。
  2. 发送请求‌:客户端构造并发送HTTP请求报文。
  3. 处理与响应‌:服务器解析请求并返回资源或错误码。
  4. 关闭连接‌:HTTP/1.1默认保持连接复用,否则四次挥手断开。

HTTP状态码

一、状态码分类体系

HTTP状态码按首位数字分为5大类,涵盖从临时响应到服务器错误的完整生命周期:

类别范围核心功能描述
1xx100-199临时响应,需继续处理请求
2xx200-299请求成功处理
3xx300-399重定向或资源位置变更
4xx400-499客户端请求错误
5xx500-599服务器处理失败

二、详细状态码表格(含关键代码)
状态码名称触发场景与解决方案
100Continue服务器已接收请求头,客户端应继续发送请求体(用于大文件上传)
200OK标准成功响应,返回请求的资源(GET/POST)
201Created资源创建成功(常见于POST/PUT)
204No Content成功处理但无返回内容(用于DELETE或更新操作)
301Moved Permanently资源永久迁移,搜索引擎更新索引(需配置Location头)
302Found临时重定向(登录跳转等)
304Not Modified缓存有效,服务器未返回新内容(依赖If-Modified-Since头)
400Bad Request请求语法错误(如JSON格式错误)
401Unauthorized需身份验证(未携带Token或失效)
403Forbidden无权限访问(IP黑名单或文件权限限制)
404Not Found资源不存在(检查URL或路由配置)
415Unsupported Media Type请求媒体类型不支持(如服务器仅接收JSON但收到XML)
500Internal Server Error服务器内部异常(数据库连接失败等)
502Bad Gateway网关/代理服务器收到无效响应(上游服务崩溃)
503Service Unavailable服务不可用(过载或维护中,需Retry-After头)

三、特殊状态码详解
  1. 206 Partial Content

    • 场景:分片下载或断点续传时返回部分内容
    • 必需头:Content-Range 指定数据范围
  2. 418 I'm a teapot‌ (RFC 2324)

    • 彩蛋状态码:表示服务器拒绝冲泡咖啡(用于幽默响应)
  3. 429 Too Many Requests

    • 限流触发:客户端请求频率超出限制
    • 解决方案:检查 Retry-After 头并降低请求速率

四、调试建议
  1. 浏览器开发者工具

    • 查看Network面板中的Status列,过滤特定状态码(如 4xx
  2. curl命令测试

    curl -v http://example.com/api # -v参数显示详细响应头 
  3. 服务端日志分析

    • 监控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-Lengthchunked
动态生成内容需预加载全部数据到内存流式传输减少内存占用
大文件处理需完整计算总长度分块传输避免内存溢出

三、**Connection 连接管理
1. ‌HTTP/1.1 Keep-Alive
  • 默认行为‌:TCP连接复用,减少三次握手开销
  • Nginx配置示例‌:
    http {
     keepalive_requests 500; # 单连接最大请求数(默认100)
     keepalive_timeout 75s; # 空闲超时时间 
    } 
    • 超过 keepalive_requests 或超时后,服务端主动断开连接
2. ‌异常处理
  • 客户端重连‌:需实现自动重试机制(如指数退避策略)
  • 服务端强制断开‌:通过 Connection: close 头部显式关闭连接

关键注意事项

  1. 编码一致性
    • Content-Length 必须与实体正文的字节数严格匹配,避免混合使用 Transfer-Encoding 与 Content-Length(协议冲突)
  2. 调试建议
    # 查看原始报文(含换行符) 
    curl -v --raw http://example.com 
    
    # 抓包分析分块传输 
    tcpdump -i any port 80 -A 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode222_完全二叉树的结点个数

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

STM32之温湿度传感器(DHT11)

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

在微创手术中使用Kinova轻型机械臂进行多视图图像采集和3D重建

在微创手术中,Kinova轻型机械臂通过其灵活的运动控制和高精度的操作能力,支持多视图图像采集和3D重建。这种技术通过机械臂搭载的光学系统实现精准的多角度扫描,为医疗团队提供清晰且详细的解剖结构模型。其核心在于结合先进的传感器配置与重…

DOM API-JS通过文档对象树操作Doc和CSS

还记得我在之前的前端文章里面老是提及的 DOM 吗,当时只是简单介绍了它的组成以及作用,今天我们就来详细聊聊 Web浏览器 先来聊聊web浏览器,web浏览器是非常复杂的软件,有许多活动部件,许多部件并不能由开发者通过 J…

CYT4BB Dual Bank - 安全启动

本节介绍TRAVEO™ T2G微控制器(MCU)的启动顺序。有关TRAVEO™ T2G微控制器的安全特性、不同的生命周期阶段以及“安全启动”序列的详细描述,请参阅 AN228680 -Secure system configuration in TRAVEO™ T2G family.   TRAVEO™ T2G微控制器(MCU)的启动序列(见图3)基于…

科技行业智能化升级经典案例—某芯片公司

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

Python编程从入门到实践 PDF 高清版

各位程序员朋友们,还在为找不到合适的Python学习资料而烦恼吗?还在为晦涩难懂的编程书籍而头疼吗?今天,就给大家带来一份重磅福利——237完整版PDF, 我用网盘分享了「Python编程:从入门到实践__超清版.pdf…

系统性能不达标,如何提升用户体验?

当系统性能不达标时,要想有效提升用户体验,必须从性能优化、前后端协同、用户感知改善、监控预警机制四个关键维度切入。其中,性能优化是最直接有效的策略,它通过代码优化、资源压缩、缓存机制、CDN加速等手段,显著提升…

智能守护校园“舌尖安全“:AI视频分析赋能名厨亮灶新时代

引言: 在校园食品安全备受关注的今天,一套融合视频监控管理平台与AI视频分析盒子的智能解决方案正在全国多地学校食堂悄然落地,为传统的"名厨亮灶"工程注入科技新动能。这套系统不仅实现了后厨操作的"透明化"&#xff0…

初步尝试AI应用开发平台——Dify的本地部署和应用开发

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

卷积神经网络中的局部卷积:原理、对比与应用解析

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

重拾童年,用 CodeBuddy 做自己的快乐创作者

某个炎炎的夏日午后,阳光透过稀疏的树叶洒落在地上,一道道光影斑驳陆离。那时候的我们,还只是三五个小朋友,蹲坐在村头的一棵老槐树下,手里握着并不属于自己的游戏掌机,轮流按动着手柄的按键,在…

HarmonyOS实战:自定义时间选择器

前言 最近在日常鸿蒙开发过程中,经常会使用一些时间选择器,鸿蒙官方提供的时间选择器满足不了需求,所以自己动手自定义一些经常会使用到的时间选择器,希望能帮到你,建议点赞收藏! 实现效果 需求分析 默认…

6:OpenCV—图像滤波

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

pytorch语法学习

启动 python main.py --config llve.yml --path_y test -i output

5:OpenCV—图像亮度、对比度变换

1.更改图像和视频的亮度 更改亮度 更改图像的亮度是常用的点操作。在此操作中,图像中每个像素的值应增加/减少一个常数。要更改视频的亮度,应对视频中的每一帧执行相同的操作。 如果要增加图像的亮度,则必须为图像中的每个像素添加一些正常…

Oracle 的V$ACTIVE_SESSION_HISTORY 视图

Oracle 的V$ACTIVE_SESSION_HISTORY 视图 V$ACTIVE_SESSION_HISTORY显示数据库中的 Sampled Session 活动。 它包含每秒拍摄一次的活动数据库会话的快照。如果数据库会话位于 CPU 上或正在等待不属于等待类的事件,则认为该会话处于活动状态。请参阅 view 以了解有…

【Python 算法零基础 4.排序 ② 冒泡排序】

目录 一、引言 二、算法思想 三、时间复杂度和空间复杂度 1.时间复杂度 2.空间复杂度 四、冒泡排序的优缺点 1.算法的优点 2.算法的缺点 五、实战练习 88. 合并两个有序数组 算法与思路 ① 合并数组 ② 冒泡排序 2148. 元素计数 算法与思路 ① 排序 ② 初始化计数器 ③ 遍历数组…

Python:操作Excel设置行高和列宽

Python 操作 Excel:轻松设置行高与列宽 📊✨ 在处理 Excel 表格时,除了正确展示数据本身,合理设置行高与列宽也是提升可读性和专业度的关键因素。本文将带你了解如何使用 Python 的 openpyxl 库,优雅地控制 Excel 表格的排版布局,实现行高、列宽的灵活设置与自动适配! …

docker-volume-backup 备份 ragflow volumes

自定义项目名称 这里我自定义了 ragflow 项目的名称,修改 .env,添加环境配置 # 自定义项目名称 COMPOSE_PROJECT_NAMEragflow创建备份脚本配置文件 在 ragflow/docker 目录下创建文件 docker-compose-backup.yml version: 3services:backup:image: o…