Web请求与相应

Qt+OpenGL+Cesium三件套:打造高性能3D GIS桌面应用的5个关键点 本文深入探讨了如何利用Qt、OpenGL和Cesium数据规范构建高性能桌面级3D GIS应用。文章聚焦于五个关键点:架构选型、OpenGL渲染优化、3D Tiles数据解析与调度、内存与多线程管理,以及高级特性实现,旨在帮助开发者在C++生态中打造不依赖网络、运算能力更强的重型3D地理信息客户端。 阅读详情

目录

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服务器处理失败

二、详细状态码表格(含关键代码)
状态码名称触发场景与解决方案
‌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头)

三、特殊状态码详解
  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 

 

基于BenchmarkSQL的达梦数据库TPCC性能测试 中的用户和密码在达梦数据库中创建测试用户,并保证其表空间足够容纳生成的测试数据。如果开启了归档,还要考虑归档日志占用的空间。BenchmarkSQL默认不支持达梦数据库。这里我们让BenchmarkSQL把达梦数据库当作Oracle即可。Oracle数据库对应的测试配置文件为。是使用BenchmarkSQL进行性能测试的主要配置文件。是生成的测试报告,png文件是报告中包含的图片。拷贝达梦数据库驱动到BenchmarkSQL的。测试结束后,会在当前路径下生成一个以。规则命名的结果目录。 阅读详情

相关推荐

银河麒麟arm64 V10 SP1桌面系统高效部署onnxruntime推理环境实战

本文详细介绍了在银河麒麟arm64 V10 SP1桌面系统上高效部署onnxruntime推理环境的完整实战流程。从系统环境准备、关键依赖安装,到onnxruntime的安装验证,并以YOLOv5模型部署为例进行性能对比分析,提供了在国产化飞腾D2000平台上进行AI边缘推理的实用指南和避坑技巧。

ss78901的博客 636

WEB 网络请求初探

网络请求 超文本传输协议 (HTTP) HTTP 是一种应用层协议,用于通过万维网访问资源。超文本一词代表包含指向其他资源的链接的文本以及读者可以轻松解释的文本。 HTTP 通信由客户端和服务器组成,客户端向服务器请求资源。服务器处理请求并返回请求的资源。 HTTP 通信的默认端口是 80;但是,这可以更改。这些是我们在使用 Internet 访问不同网站时所知道的对 Web 服务器的请求。我们输入完全限定域名 (FQDN) 作为统一资源定位符 (URL) 以访问所需的...

walker_6的博客 862

【ORB-SLAM3】使用安卓手机的摄像头运行ORB3

使用安卓手机的摄像头运行ORB-SLAM3单目

caiqidong321的博客 4993

WEB请求过程

WEB请求过程 一次完整的WEB请求过程 一次完整的web访问流程 前言:当我们在浏览器输入一个网址,然后按下回车,接下来浏览器显示了页面。网速好的话这之间可能就一秒,但在这一秒内到底发生了什么? 大致过程如下: 一次完整的web访问流程简析: client:输入网址–>发起http request–>等待web server响应. server:收到client请求–>加载资源–>构建响应报文,发给client. 注:以下分析不考虑缓存问题. client发起http请求:

在你书包里拉屎的博客 2811

CATIA V5新手必看:从零开始的界面导航与基础操作指南(附常见问题解决)

本文为CATIA V5新手提供全面的界面导航与基础操作指南,涵盖核心工作区解析、文件管理规范、视图操作秘籍及常见问题解决方案。通过详细的步骤说明和实用技巧,帮助用户快速掌握这一工业设计标杆软件,特别适合从SolidWorks、AutoCAD等软件过渡的用户。

b9c0d的博客 527

表格数据学习的图神经网络综述

今天学习一篇发表在中科院一区期刊《ACM Computing Surveys》的综述文章《Graph Neural Networks for Tabular Data Learning: A Survey with Taxonomy & Directions》,该刊主要刊载计算机理论方法领域的系统性综述与教程论文,注重跨学科技术融合研究,最新的影响因子为28.0。本文的目的在于通过学习这篇文章,了解关于表格数据学习点图神经网络一些基础知识。

qq_41009600的博客 799

Servlet & Spring Boot Web请求

一. 请求那我们所编写的XxxController 是如何处理请求的,又与Servlet之间有什么联系呢?通过该流程我们可以看出DispatcherServlet在Web请求当中是一个非常核心的一个类,所以这个类在Spring Boot当中我们称为核心控制器或者叫前端控制器。我们如何在Servlet程序当中来获取请求的参数呢?那Tomcat怎么就知道要给浏览器响应哪些数据呢?这就是Web应用程序整体的请求访问流程,对于我们来说,我们需要重点关注的就是我们所编写的Controller控制器程序。

weixin_53622554的博客 2879

【银河麒麟V10】【桌面】【服务器】系统启动问题

1、如果之前运行好好的,重启后系统报错,一般80%是因为fstab的问题,回想下之前有没有添加过外接存储,修改过/etc/fstab,如果是的话一般是因为存储异常(比如网络存储无法连接,本地存储路径变化)导致系统开机自检失败,导致无法正常启动; 处理方式:进入单用户(单用户进入的几种方式上面有专门文章介绍),修改/etc/fstab,将新增的内容暂时注释掉,然后重启系统,能正常进入系统后再分析失败原因。 ...

桂安俊@KylinOS 3万+

WEB 请求过程

1:HTTP请求和建立一个Socket其实没有太大的区别,只不过outputStream.write的字节码写的数据格式,要符合HTTP,浏览器在创建socket连接之前,要通过DNS解析出ip地址,在通过这个IP地址和默认的端口80,与原创服务器建立socket连接。浏览器根据这个url组装成一个get类型的Http请求头。通过outputSream.write发送。远程服务器,通过inputStram.read读取,服务器等到返回结果,最后断开连接。 HttpClient 是一个很好的开源的发送Htt

soup12的博客 219

UG NX二次开发(C#)-读取PMI对象的名称

摘要:本文介绍了在UG NX中通过NXOpen获取PMI对象名称的方法。首先说明PMI对象初始无名称,可通过重命名或属性设置名称。然后提供C#代码示例,展示如何遍历PMI集合获取对象名称,并显示名称和类型信息。适用于需要操作PMI对象的开发人员,欢迎加入技术交流QQ群749492565。(99字)

GimiGimmy 590

DC/DC开关电源学习笔记(一)开关电源技术概述

开关模式电源(Switch Mode Power Supply,简称SMPS),又称交换式电源、开关变换器,是一种高频化电能转换装置,是电源供应器的一种。其功能是将一个位准的电压,透过不同形式的架构转换为用户端所需求的电压或电流。开关电源的输入多半是交流电源(例如市电)或是直流电源,而输出多半是需要直流电源的设备,例如个人电脑,而开关电源就进行两者之间电压及电流的转换。【百度百科】

小幽余生不加糖 1619

Web 页面的请求过程详解

首先,我打开了 Web Browser ,然后在 Google 浏览器 URL 地址栏中输入了。然后 …

白话机器学习 349

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

Python实现web请求与相应

Web 请求与响应是 Web 通信的基础。Web 请求由客户端发起,服务器处理后返回响应。组成部分Web 请求Web 响应行/状态行请求行:请求方法(GET, POST等)、URL、HTTP协议版本(如HTTP/1.1)响应行:HTTP协议版本、状态码(如200)、状态消息(如OK)头信息请求头:客户端信息、请求体类型(如Content-Type)、浏览器类型等元数据响应头:内容类型(如Content-Type)、服务器信息等元数据主体内容请求体:POST请求中提交的数据(如表单、文件)

2501_91351480的博客 737

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python 实现 web 请求与相应

本文介绍了Web请求与响应的基本概念,包括请求和响应的组成部分、HTTP协议概述以及常见的HTTP状态码。接着,详细讲解了Python的requests库,包括安装、发送GET和POST请求、处理响应头和状态码、发送带查询参数的GET请求以及带表单数据的POST请求。此外,还介绍了如何处理JSON响应和Python中的文件操作,包括文件的打开模式、读取和写入文件、文件操作中的注意事项、其他常用文件操作以及错误处理与异常捕获。通过这些内容,读者可以掌握基本的Web通信和文件操作技能。

2501_91350469的博客 1106

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python 实现web请求与相应

HTTP(Hypertext Transfer Protocol)是Web上传输数据的协议,负责浏览器与服务器之间的通信。>GET:请求服务器获取资源,通常用于读取数据。>POST:提交数据到服务器,通常用于表单提交、文件上传等。>PUT:更新服务器上的资源。>DELETE:删除服务器上的资源>200 OK:请求成功,服务器返回所请求的数据。>301 Moved Permanently:资源已永久移动。>404 Not Found:请求的资源不存在。

2401_84242106的博客 977

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

web服务器底层-http请求与相应

http请求请求分为三个部分:请求行、请求头、请求数据请求行  请求方式(GET/POST等) 请求目录,分层(/books/1.html) HTTP协议版本(HTTP/1.1),请求方式有:POST GET HEAD OPTIONS DELETE TRACE PUT。一般用GET/POST,get方式是通过‘?参数’的形式在url里面显示,显示直白。post方式则没有参数显示,适合比较大的数据传...

weixin_30378623的博客 135

struts2构建web项目请求与相应的传参

package action; import java.io.UnsupportedEncodingException; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext; public class Login { //与页面...

weixin_30835933的博客 74

解读HTTP协议,Web客户端请求与相应

转载于:https://www.cnblogs.com/ixiaohao/p/5221053.html

weixin_33769125的博客 70

Web组件与Web容器有哪些,WEB组件的三种关联关系

WEB组件:的三种关联关系 WEB应用程序如此强大的原因之一就是他们能彼此链接和聚合信息资源。WEB组件之间存在三种关联关系: l         请求转发 l         URL重定向 l         包含关系 存在以上关联关系的Web组件可以是JSP或Servlet,对于Struts应用,则还包含Action,这些Web组件都可以访问HttpServletRequest

butingzouluniao的专栏 2314

android 与web交互,android与web交互-post请求

package org.lxh.demo;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFormEntity...

weixin_39594296的博客 154

ajax请求和普通请求的区别

当浏览器按照window.location.href =“index.html”进行定期请求时,会清除当前窗口并将服务器响应加载到窗口中。 使用ajax请求,当前窗口/文档不受影响,JavaScript代码可以检查请求的结果,并使用这些结果执行所需的操作(将HTML动态插入页面,解析JSON并将其用于页面逻辑,解析XML等等)。 服务器不会做任何不同的事情 – 这只是客户端对待两个请求的响应。...

qq_28433521的博客 2664

JAVAWEBday06请求和响应转发与重定向区别Web应用中路径问题Web应用中乱码问题

1. 请求和响应 * 请求:客户端向服务器 * 类型:HttpServletRequest request * 定义:代表了客户端向服务器发送的请求报文,该对象由服务器(web容器|Servlet容器)创建, 同时发送给Service(),Service()发送给doGet()或doPost()。 * 作用 ...

weixin_41291762的博客 93

关于Web容器,servlet容器和web应用的关系

servlet容器:负责管理servlet生命周期。 web容器:负责管理和部署web应用,其本身可能具备servlet容器组件;如果没有,一般能将第三方servlet容器作为组件整合进web容器。 没有servlet容器,你也可以用web容器直接访问静态页面,比如安装一个apache等,但是如果要显示jsp/servlet,你就要安装一个servlet容器了,但是光有servlet容

llc1984513的博客 1735

绕过web认证学习总结

绕过Web授权和认证之篡改HTTP请求 http://www.myhack58.com/Article/html/3/8/2015/62279_17.htm  什么是HTTP请求   超文本传输协议(HTTP)提供了多种请求方法来与web服务器沟通。当然,大多 数方法的初衷是帮助开发者在开发或调试过程中部署和测试HTTP应用。如果服务 器配置不当,这些请求方法可能被用于

bcbobo21cn的专栏 7693

java web原理_java web 工作原理

HTTP是一套计算机在网络中通信的一种规则HTTP请求包含请求行、请求头、空行和消息体HTTP响应包含状态行、响应头、空行和消息体Web服务器存在缺陷CGI程序严重消耗服务器资源,Servlet可以消除这种缺陷Web容器给处于容器中的应用程序组件提供一个环境一个web应用程序包括配置文件、静态文件、JSP、类文件和包Tomcat既是一个优秀的JSP/Servlet容器,也是一个HTTP服务器ser...

weixin_34450486的博客 297
上一篇: PostgreSQL
下一篇: 错误处理与异常捕获
霖檬ing
博客等级 码龄2年 701粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值