当前位置: 首页 > news >正文

网络原理(6)—— 应用层之HTTP协议

目录

一. 应用层

二. 重要应用层协议DNS(Domain Name System)

三. HTTP协议

3.1 HTTP抓包工具 

3.2 HTTP格式 

3.2.1 请求

3.2.2 响应

 3.3 HTTP的工作过程


一. 应用层

   应用层协议就像是人们之间的交流规则,它帮助不同的计算机程序(应用)能够互相理解和交换信息。在互联网上,当你在使用电子邮件、浏览网页或者视频聊天时,你的电脑和其他电脑之间需要按照一定的规则来传递信息。这些规则就是应用层协议。它们定义了信息应该如何打包、发送、接收以及如何处理可能出现的错误。

   比如,当你使用浏览器上网时,浏览器和网站服务器之间使用的HTTP协议就是一种应用层协议。它规定了浏览器如何请求网页以及服务器如何响应这些请求。这样,不管你用的是哪种浏览器,也不管网站服务器在世界哪个角落,只要大家都遵循HTTP协议,信息就能正确传递。 


   我们之前编写完了基本的 Java Socket,要知道,我们之前所写的所有代码都在应用层,都是为了完成某项业务,如翻译等。应用层的协议主要涉及到两种情况:1)使用已经创建好的协议(后续会学习)  2)自己定义应用层协议

   在日常开发中,自定义应用层协议是很常见的。前后端的程序员会开一个会,商讨确定 “前后端交互的接口”,约定前端要给后端发什么样的请求,对应的后端要返回什么样的响应(有很多细节需要确定)。确定好之后,就可以分别进行开发了。当前后端都分别开发完后,再把两边的代码放到一起,进行“联调”,针对之前约定好的前后端交互接口,进行验证。

  • 自定义协议具体要做什么呢?

比如 开发一个“外卖软件”

1)明确传输的信息

   打开软件,首先需要展示一个 “商家列表”,并且显示的商家列表都是点餐者附近的商家。

先确定传递的信息

  • 请求:用户的id,用户所处的位置(计算机使用经纬度确定)
  • 响应:商家列表,包含多个商家,每个商家信息中,又有商家的名字,图片,距离,评分

以上信息的确定,是根据当前需求产生的(需求详细设计文档)

2)明确传输数据的格式

   针对信息组织的格式,也有很多种方式,使用哪种方式都可以,但是确保前端和后端是同一种式。

数据格式

A. 文本格式

1. 行文本格式(CSV)每行代表一条记录,字段之间用逗号分隔。

比如:

  • 请求:用户id,用户位置\n(1001,E45N60\n)   
  • 响应:商家的id,商家名称,商家图片,商家地址,商家的距离,商家的评分;商家的id,商家名称,商家图片,商家地址,商家的距离,商家的评分(2001,魏家凉皮,http://image1.com,1.5km,4.5;2002,杨国福麻辣烫,http://image2.com,2.0km,4.6\n)

2. XML格式(传统方案):通过“成对的标签”表示“键值对”信息,标签可以自定义,具有层级关系。可以使用XML传输网络数据,也可以作为程序的配置文件。

比如:

<request>

    <userId>1001</userId>

    <position>E45N60</position>

</request>

   XML 进行网络传输的时候,有明显的缺点:文档通常包含大量的标签和结构信息,这导致文件大小比纯文本数据大,增加了存储和传输的开销(消耗大量的带宽)

   XML 和 HTML都是用于结构化数据的标记语言,以标签的形式表示,但是XML里的标签是程序员自定义的,而html的标签都是固定的(已有的一套标准)

3. JSON格式(主流):“键值对"格式,键和值使用 “:” 分割,键值对之间使用  “,” 分割,所有的键值对,都使用 “{ }” 括起来

比如:{
              "userId": 1001,
              "position": "E60N45"
          }

   相比于XML来说,可读性也是很好的,同时能够节省一定的带宽。但是 JSON 的可读性并没有那么好,由于没有明确要求数据的格式,会存在一些极端情况,比如:{"userId": 1001,"position": "E60N45"}   键值对数据很多时,数据放在一行,可读性就会非常差了。

4. YML/YAML:强制要求了数据格式,键值对必须独占一行,而且“嵌套”结构,必须通过缩进来表示。通常使用空格(而不是制表符)进行缩进,推荐使用两个或四个空格。

比如:request:
              userId: 1001
              position: E60N45

B. 二进制格式

   Google Protocol Buffers:关注性能,牺牲了可读性,通过.proto文件定义数据结构,然后生成对应语言的代码。极大缩减了要传输的数据的体积,从而减少了带宽消耗,提高效率。

二. 重要应用层协议DNS(Domain Name System)

   DNS是一整套从域名映射到IP的系统,把URL地址解析为IP地址这一过程就叫DNS解析。其实DNS就是一个数据库,这个数据库里面记录着很多URL和对应的IP地址。

DNS是按照层级划分的:

  • 根服务器:根服务器是DNS层次结构的顶部,负责管理顶级域名服务器,如com、org、net、edu以及国家代码顶级域名(如uk、de、cn等),并响应关于这些TLDs的DNS查询。全球共有13组根服务器,每组有多台服务器分布在不同的地理位置,以确保稳定性和可靠性。根服务器负责管理DNS根区域,即域名系统的最高层级。
  • TLD域名服务器:顶级域名服务器分别管理各自的域名服务器,比如bilibili、qq、daidu等。TLD DNS服务器负责管理顶级域名的DNS解析,它们是域名系统的第二级。
  • 权威域名服务器:负责特定域名解析的服务器,管理各自的主机。权威DNS服务器负责管理域名的DNS区域文件,它们是域名解析过程中的最终信息提供者。

域名解析过程:

  1. DNS查询发起:客户端(如浏览器)发起一个DNS查询请求,请求解析特定的域名。
  2. 本地DNS缓存查询:客户端首先检查本地DNS缓存,以确定是否最近已经解析过该域名。
  3. 递归DNS查询:如果本地缓存中没有记录,客户端的递归DNS服务器将代表客户端向其他DNS服务器发起查询。
  4. 选代DNS查询:递归DNS服务器首先向根DNS服务器查询,根服务器将指向相应的顶级域(TLD)DNS服务器。
  5. TLD DNS服务器查询:递归DNS服务器接着向TLD DNS服务器查询,获取域名注册商的DNS服务器地址。
  6. 权威DNS服务器查询:递归DNS服务器最后向权威DNS服务器查询,这是负责管理特定域名的DNS服务器。
  7. DNS响应:权威DNS服务器返回域名对应的IP地址给递归DNS服务器。
  8. DNS缓存和响应:递归DNS服务器将IP地址缓存起来,并将结果返回给客户端,客户端也将结果缓存以供后续使用。

三. HTTP协议

   HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应用层协议,我们平时打开一个网站就是通过HTTP协议来传输数据的。HTTP 往往是基于传输层的 TCP 协议实现的(HTTP1.0,HTTP1.1,HTTP2.0 均为TCP,HTTP3 基于UDP 实现),目前我们主要使用的是HTTP1.1和HTTP 2.0

   所谓“超文本”的含义,就是传输的内容不仅仅是文本(比如html, CSS等文本) , 还可以是一些其他的资源,比如图片,视频,音频等二进制的数据。

   当我们在浏览器中输入一个百度搜索的 “网址”(URL)时,浏览器就给百度的服务器发送了一个HTTP请求,百度的服务器返回了一个HTTP响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容(这个过程中浏览器可能会给服务器发送多个HTTP请求,服务器会对应返回多个响应,这些响应里就包含了页面HTML,CSS,JavaScript,图片,字体等信息)

3.1 HTTP抓包工具 

   HTTP是一个文本格式的协议,可以通过Chrome开发者工具或者Fiddler抓包,分析HTTP请求/响应的细节。 

以Fiddler为例:

  • 左侧窗口显示了所有的HTTP请求/响应,可以选中某个请求查看详情(发送HTTP请求,就是往TCP Socket中,按照规定格式,写入一段字符串;收到HTTP响应,就是从TCP Socket中,读出一段字符串再按照规则解析)
  • 右侧上方显示了HTTP请求的报文内容(切换到Raw标签页可以看到详细的数据格式)
  • 右侧下方显示了HTTP响应的报文内容(切换到Raw标签页可以看到详细的数据格式),返回的响应数据是压缩过的,在二进制的角度上对数据进行重新编码,保证信息量不变,体积缩小。解压缩之后,浏览器看到的网页就是由HTML/CSS/JavaScript/JSON/图片/音频/字体等构成的。
  • 请求和响应的详细数据,可以通过右下角的View in Notepad通过记事本打开

Fiddler的快捷键

  • Ctrl + X:清除会话列表中的所有条目
  • Ctrl + A:全选会话列表中的所有条目;Del:清空所有内容

   访问一个网页,不是一次HTTP请求就能搞定的,而是由多个HTTP请求(尤其是GET)得到的结果,最终汇总而成的(HTML包含的一些link,script,img.….都可能进一步的触发HTTP请求,进一步从服务器获取资源)

  • Ctrl+F5:当你按下Ctrl+F5时,浏览器会绕过缓存,直接从服务器加载页面的所有内容。使用Ctrl+F5可以确保浏览器加载页面的最新版本,忽略任何本地缓存。 
  • F5:单按F5键的作用是刷新当前页面,浏览器会重新加载当前页面,但通常会从缓存中加载某些文件,而不是从服务器重新下载。如图片、CSS和JavaScript文件等,这些内容一般都是固定的,改变频率非常低,只需要第一次访问主页的时候,把固定的资源,都保存下来(电脑的硬盘上),后续再访问就没必要重复获取上述内容了,从而节省服务器的带宽,加快页面展示的速度。

   与Ctrl+F5不同,单按F5不会强制浏览器忽略缓存。它允许浏览器使用其缓存来提高页面加载速度,除非服务器指示资源已更改,或者浏览器缓存策略要求重新验证资源。 很明显,当用F5刷新时,Fiddler抓到的包比Ctrl+F5抓到的少很多

Fiddler抓包工具原理:

   Fiddler是一个广泛使用的网络调试代理工具,它允许开发者监控和修改电脑与互联网之间的HTTP和HTTPS流量。

   Fiddler工作的核心原理是它充当了一个本地代理服务器,位于客户端和互联网之间,它代表客户端发送请求,并接收来自服务器的响应(正向代理)。启动Fiddler时,它会设置自己的代理监听端口(默认为8888),并配置操作系统或浏览器,使得所有的网络流量都通过Fiddler代理。

正向代理:帮客户端访问服务器

  • 比如 你想买一个国外的东西,但是卖家不直接卖给中国人,这时候你找到了一个代购。代购帮你从国外买东西,然后寄给你。这里的代购就相当于正向代理。
  • 正向代理是帮客户端(你)访问他们无法直接访问的服务器(国外卖家)。简单来说,正向代理就是帮你“偷偷”上网的工具。

反向代理:帮服务器接收和处理客户端的请求

  • 比如 你开了一个网店,每天有很多顾客来买东西,但你一个人忙不过来。于是你请了一个客服团队来帮你处理订单。顾客不知道具体是哪个客服在服务他们,他们只知道是在跟你这个网店打交道。
  • 这里的客服团队就相当于反向代理。反向代理是帮服务器(你的网店)接收来自客户端(顾客)的请求,然后将请求分发给不同的服务器(客服)处理。简单来说,反向代理就是帮你“分担”访问压力的工具。
3.2 HTTP格式 
3.2.1 请求

 1)请求行:

  • 方法:如GET、POST、PUT等,表示对资源的操作
  • URL:统一资源标识符,指定请求的资源
  • HTTP版本:如 HTTP/1.1

2)请求头(Header)

  • 请求的属性,包含了关于客户端环境和请求本身的信息,如请求的主机名、用户代理(浏览器类型)、接受的内容类型等,用 “: ” (冒号+空格) 分割的键值对,如 Host: www.sogou.com
    Connection: keep-alive
  • 每组属性之间使用 “\n” 分隔
  • 遇到空行表示 Header 部分结束

3)空行 

  • 在请求头和请求体之间必须有一个空行,用于分隔头部和内容。

4)请求体(RequestBody) 

  • 空行后面的内容都是 Body,Body 允许为空字符串。如果 Body 存在,则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度
  • 对于需要发送数据的请求(如POST或PUT),Body 会包含在请求中发送的数据。
3.2.2 响应

1)状态行

  • HTTP版本:如 HTTP/1.1
  • 状态码:如200表示成功,404 表示未找到
  • 状态消息:提供状态码的简短描述,如 200-->“OK” 或 404-->“Not Found”

2)响应头(Headers)

  • 响应的属性,包含了关于响应本身的信息,如内容类型、内容长度、服务器类型等,冒号分割的键值对
  • 每组属性之间使用 “\n” 分隔
  • 遇到空行表示Header部分结束

3)空行

  • 响应头和响应体之间必须有一个空行,用于分隔头部和内容

4)响应体(ResponseBody) 

  • 响应体包含了从服务器发送给客户端的实际内容,通常是HTML页面、图片、视频等资源。

 3.3 HTTP的工作过程
  1. 用户输入URL:用户在客户端应用程序(通常是Web浏览器)的地址栏中输入统一资源定位符(URL),例如http://www.baidu.com。
  2. DNS解析:浏览器解析URL中的域名,通过域名系统(DNS)查询将其转换为服务器的IP地址。
  3. 建立连接:客户端通过TCP协议与服务器建立连接,这通常涉及三次握手过程。
  4. 发送HTTP请求:客户端向服务器发送一个HTTP请求。请求包括方法、请求的URL、协议版本,以及一系列可选的请求头。
  5. 服务器处理请求:服务器接收到请求后,根据请求的方法和URL,处理请求并生成响应。这可能涉及服务器端脚本的执行、数据库查询或其他资源访问。
  6. 服务器响应:服务器将处理结果封装在HTTP响应中发送回客户端。响应包括协议版本、状态码、状态信息,以及一系列响应头和可选的响应体。
  7. 关闭连接:在发送完响应后,服务器和客户端通常会关闭TCP连接。在HTTP/1.1中,如果请求头中包含Connection: keep-alive,则连接可能会被保持打开状态,以用于后续请求。
  8. 客户端处理响应:客户端收到服务器的响应后,会根据状态码和响应头来处理响应。如果一切正常,客户端会将响应体(如HTML页面)渲染并展示给用户。

相关文章:

网络原理(6)—— 应用层之HTTP协议

目录 一. 应用层 二. 重要应用层协议DNS(Domain Name System) 三. HTTP协议 3.1 HTTP抓包工具 3.2 HTTP格式 3.2.1 请求 3.2.2 响应 3.3 HTTP的工作过程 一. 应用层 应用层协议就像是人们之间的交流规则&#xff0c;它帮助不同的计算机程序&#xff08;应用&#xff09…...

Linux55yum源配置、本机yum源备份,本机yum源配置,网络Yum源配置,自建yum源仓库

参考 太晚了 计划先休息了 大概保存...

250505_HTML

HTML 1. HTML5语法与基础标签1.1 HTML5特性1.1.1 空白折叠现象1.1.2 转义字符 1.2 HTML注释1.3 基础标签1.3.1 div标签1.3.2 标题标签1.3.3 段落标签1.3.1.3.1.3.1.3. 1. HTML5语法与基础标签 1.1 HTML5特性 1.1.1 空白折叠现象 1.1.2 转义字符 1.2 HTML注释 1.3 基础标签 1…...

1. 设计哲学:让字面量“活”起来,提升表达力和安全性

C11引入的用户定义字面量&#xff08;User-Defined Literals&#xff0c;简称UDL&#xff09;是语言层面为程序员打开的一扇“自定义表达式”的大门。它允许我们为字面量&#xff08;比如数字、字符、字符串&#xff09;添加自定义后缀&#xff0c;从而让代码更具语义化、更易读…...

【KWDB 创作者计划】基于 ESP32 + KWDB 的智能环境监测系统实战

一开始萌生这个想法&#xff0c;其实是源自我办公桌上的那颗“小胖子”——一块 ESP32 开发板。它陪我度过了不少调试夜&#xff0c;也让我对物联网有了真正的感知。恰逢 KaiwuDB 举办征文活动&#xff0c;我便想着&#xff0c;何不将我日常积攒下来的一些硬件和数据库实战经验…...

AVHRR中国积雪物候数据集(1980-2020年)

数据集摘要 本数据集基于1980-2020年5kmAVHRR逐日无云积雪面积产品&#xff0c;制备了中国长时间序列积雪物候数据集。数据集按照不同的物候参数共分为积雪日数、积雪初日、积雪终日3个目录&#xff0c;每个目录下包含40个子文件&#xff0c;为逐水文年积雪物候参数&#xff0c…...

PCB设计中电感封装的选型

在PCB设计中&#xff0c;电感封装的选型直接影响电路性能、布局效率、热管理能力及系统可靠性。合理的封装选择不仅能优化空间利用率&#xff0c;还能提升电磁兼容性&#xff08;EMC&#xff09;和长期稳定性。以下从封装类型、尺寸参数、应用场景适配、布局协同设计、热管理策…...

LintCode第766题,LintCode第1141题,LintCode第478题

第766题描述 判断给出的年份 n 是否为闰年. 如果 n 为闰年则返回 true 闰年是包含额外一天的日历年. 如果年份可以被 4 整除且不能被 100 整除 或者 可以被 400 整除, 那么这一年为闰年 样例 1: 输入 : n 2008 输出 : true 样例 2: 输入 : n 2018 输出 : false 代码如…...

三十一、基于HMM的词性标注

基于HMM的中文词性标注 1 实验目标 理解HMM模型的原理和基本问题理解HMM的实现命名实体识别的具体步骤掌握HMM模型实现命名实体识别的方法 2 实验环境 HMM的中文词性标注的实验环境。 3 实验步骤 该项目主要由3个代码文件组成&#xff0c;分别为hmm.py、tagging.py和run.p…...

MCUboot 中的 BOOT_SWAP_TYPE_PERM 功能介绍

目录 概述 1 Image 数据结构 1.1 Image介绍 1.2 Swap info 2 BOOT_SWAP_TYPE_PERM 功能 2.1 功能定义 2.2 典型工作流程 3 BOOT_SWAP_TYPE_xx的其他功能 3.1 BOOT_SWAP_TYPE_REVERT 3.2 三中模式的比较 4 使用机制 4.1 实现细节 4.2 使用场景 4.3 开发者注意事…...

数学复习笔记 2

前言 朋友和我讨论了一个二重积分题&#xff0c;非常有意思。内容非常细致。整理如下&#xff1a; 二重积分 题目来源是 1000 上面的 16 题&#xff0c;积分区域是一个偏心圆&#xff0c;偏心圆的圆心在 y 轴上面&#xff0c;偏心圆是关于 y 轴对称的&#xff0c;可以看关于…...

从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化

Part 5 |地图匹配与轻量 SLAM:HMM/Viterbi 与简化图优化 在本章中,我们将在 ESP32-S3 这样的资源受限平台上,实现 地图匹配(Map Matching)和轻量级图优化(Lightweight SLAM)功能。通过 隐马尔可夫模型(HMM)+ Viterbi 算法,以及简化的图优化思路,校正定位轨迹,提升…...

Amazon Bedrock Converse API:开启对话式AI新体验

Amazon Bedrock Converse API&#xff1a;开启对话式AI新体验 前言 在当今人工智能飞速发展的时代&#xff0c;对话式AI已成为众多应用的核心组成部分。从智能客服到智能助手&#xff0c;对话式AI为用户带来了便捷且高效的交互体验。而Amazon Bedrock Converse API的出现&…...

软考 系统架构设计师系列知识点之杂项集萃(54)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;53&#xff09; 第87题 某银行系统采用Factory Method方法描述其不同账户之间的关系&#xff0c;设计出的类图如下所示。其中与Factory Method的“Creator”角色对应的类是&#xff08;&#xff…...

第三章 - 软件质量工程体系

1 概述 系统工程学的思想 系统工程学是为了研究多个子系统构成的整体系统所具有的多种不同目标的相互协调&#xff0c;以期系统功能的最优化、最大限度地发挥系统组成部分的能力而发展起来的一门科学。 软件质量工程体系的建立 建立和实施质量管理体系的方法 确定顾客和其…...

#基础Machine Learning 算法(上)

机器学习算法的分类 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Supervised Algorithms&#xff09;:在监督学习训练过程中&#xff0c;可以由训练数据集学到或建立一个模式&#xff08;函数 / learning model&#xff09;&#xff0c;并依此模式推测新的实例。…...

【YOLO11改进】改进Conv、颈部网络STFEN、以及引入PIOU用于小目标检测!

改进后的整体网络架构 改进一:RFD模块(Conv) YOLOv11模型的跨步卷积下采样虽然快速聚合了局部特征,并且实现了较高的计算效率,但其固有的信息压缩机制会导致细粒度特征的不可逆丢失。针对特征保留与计算效率的平衡问题,本文采用RFD模块替换跨步卷积下采样模块。RFD模块通…...

算法之上的权力——空域治理的政治哲学

当AI算法成为空域资源分配的核心机制&#xff0c;我们不得不直面一个核心问题&#xff1a;谁拥有算法&#xff0c;谁控制算法&#xff0c;谁审查算法&#xff1f;调度系统表面上是中立技术&#xff0c;实则承载了深刻的价值判断与权力结构。本章提出“算法即治理”命题&#xf…...

虚幻引擎作者采访

1万小时编程_哔哩哔哩_bilibili https://www.youtube.com/watch?v477qF6QNSvc 提姆斯温尼是一位传奇性的视频游戏程序员&#xff0c;Epic Games 的创始人兼首席执行官。 该公司开发了虚幻引擎、堡垒之夜、战争机器、虚幻竞技场等许多开创性和有影响力的视频游戏。 他哥哥…...

CodeBlocks25配置wxWidgets3.2

一、下载CodeBlocks 25.03版本 1.去Sourceforge.net Code::Blocks - Browse /Binaries/25.03/Windows at SourceForge.net 下载codeblocks-25.03mingw-nosetup.zip 2.解压到d盘&#xff0c;并把目录改为codeblocks 二、.下载wxWidgets 3.2.8 1. 去Sourceforge.net wxWidg…...

Python 整理3种查看神经网络结构的方法

1. 网络结构代码 import torch import torch.nn as nn# 定义Actor-Critic模型 class ActorCritic(nn.Module):def __init__(self, state_dim, action_dim):super(ActorCritic, self).__init__()self.actor nn.Sequential(# 全连接层&#xff0c;输入维度为 state_dim&#xf…...

【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)

Bootstrap V4系列 学习入门教程之 组件-卡片&#xff08;Card&#xff09; 卡片&#xff08;Card&#xff09;一、Example二、Content types 内容类型2.1 Body 主体2.2 Titles, text, and links 标题、文本和链接2.3 Images 图片2.4 List groups 列表组2.5 Kitchen sink 洗涤槽…...

AI Agent开发第50课-机器学习的基础-线性回归如何应用在商业场景中

开篇 虽然我们这个系列主讲AI Agent,但是这个系列是一个喂饭式从0到深入的全AI类计算机教程系列,它主要面向的是培养出一个个AI时代的程序员,不是像外部那种很水的只是做做套壳、聊天、绘图小工具的急功近利式教学。而机器学习是现代AI的基础与基石,一些机器学习、深度学习…...

代码随想录第34天:动态规划7(打家劫舍问题:链式、环式、树式房屋)

一、背包问题小结 1.递推公式&#xff1a; 1.问能否能装满背包&#xff08;或者最多装多少&#xff09;&#xff1a;dp[j] max(dp[j], dp[j - nums[i]] nums[i]) 2.问装满背包有几种方法&#xff1a;dp[j] dp[j - nums[i]] 3.问背包装满最大价值&#xff1a;dp[j] max…...

网络安全自动化:找准边界才能筑牢安全防线

数字时代&#xff0c;企业每天要面对成千上万的网络攻击。面对庞大的服务器群、分散的团队和长期不重启的设备&#xff0c;很多企业开始思考&#xff1a;哪些安全操作适合交给机器自动处理&#xff1f;哪些必须由人工把关&#xff1f;今天我们就用大白话聊聊这件事。 一、这些事…...

ctfshow——web入门361~368

最近练习ssti 当 Web 应用程序使用模板引擎动态生成 HTML 页面或其他类型的输出时&#xff0c;如果用户输入未经过充分验证或转义就被直接嵌入到模板中&#xff0c;就可能发生 SSTI 攻击。攻击者可以利用这个弱点注入恶意模板代码&#xff0c;该代码将在服务器端执行。 常见的…...

备忘录模式(Memento Pattern)

&#x1f9e0; 备忘录模式&#xff08;Memento Pattern&#xff09; 备忘录模式 是行为型设计模式之一。它通过将对象的状态存储在一个备忘录中&#xff0c;允许对象在不暴露其内部结构的情况下&#xff0c;保存和恢复自己的状态。该模式允许将对象的状态保存到备忘录中&#…...

五一假期作业

sub_process.c #include <stdio.h> // 标准输入输出库 #include <pthread.h> // POSIX线程库 #include <sys/ipc.h> // IPC基础定义&#xff08;如消息队列/共享内存&#xff09; #include <sys/msg.h> // 消息队列操作相关…...

Multi Agents Collaboration OS:专属多智能体构建—基于业务场景流程构建专属多智能体

背景 随着人工智能技术的飞速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;的能力不断突破&#xff0c;单一智能体的能力边界逐渐显现。为了应对日益复杂的现实世界任务&#xff0c;由多个具备不同能力、可以相互协作的智能体组成的多智能体系统 (Multi-Agent Sys…...

数据库的二级索引

二级索引 10.1 二级索引作为额外的键 表结构 正如第8章提到的&#xff0c;二级索引本质上是包含主键的额外键值对。每个索引通过B树中的键前缀来区分。 type TableDef struct {// 用户定义的部分Name stringTypes []uint32 // 列类型Cols []string // 列名Indexes …...

湖北理元理律师事务所:债务法律服务的民生价值重构

当前我国居民杠杆率达62.3%&#xff08;央行2023年数据&#xff09;&#xff0c;债务问题已从经济议题演变为社会议题。湖北理元理律师事务所通过构建覆盖咨询、备案、规划的全链条服务&#xff0c;试图在法律框架内探索债务危机的社会化解决方案。 民生导向的服务设计 1.阶梯…...

DotNetBrowser 3.2.0 版本发布啦!

包含来自 Chromium 135 的安全修复支持自定义用户代理客户端提示&#xff08;User Agent Client Hints&#xff09;在 Avalonia 离屏渲染模式中支持拖放&#xff08;Drag & Drop&#xff09;功能 &#x1f517; 点击此处了解更多详情。 &#x1f193; 免费试用 30 天。...

PyTorch 张量与自动微分操作

笔记 1 张量索引操作 import torch ​ # 下标从左到右从0开始(0->第一个值), 从右到左从-1开始 # data[行下标, 列下标] # data[0轴下标, 1轴下标, 2轴下标] ​ def dm01():# 创建张量torch.manual_seed(0)data torch.randint(low0, high10, size(4, 5))print(data->,…...

C语言数据在内存中的存储详解

在 C 语言的编程世界里&#xff0c;理解数据在内存中的存储方式是非常重要的&#xff0c;它能帮助我们更好地掌握数据类型、内存管理和程序性能优化等内容。今天&#xff0c;我就来给大家详细讲解数据在内存中的存储&#xff0c;包括整数、大小端字节序和浮点数的存储方式&…...

【AI大模型】SpringBoot整合Spring AI 核心组件使用详解

目录 一、前言 二、Spring AI介绍 2.1 Spring AI介绍 2.2 Spring AI主要特点 2.3 Spring AI核心组件 2.4 Spring AI应用场景 2.5 Spring AI优势 2.5.1 与 Spring 生态无缝集成 2.5.2 模块化设计 2.5.3 简化 AI 集成 2.5.4 支持云原生和分布式计算 2.5.5 安全性保障…...

linux-文件操作

在 Linux 系统中&#xff0c;文件操作与管理是日常使用和系统管理的重要组成部分。下面将详细介绍文件的复制、移动、链接创建&#xff0c;以及文件查找、文本处理、排序、权限管理等相关知识。 一、文件的复制 在 Linux 里&#xff0c;cp 命令可用于复制文件或目录&#xff…...

丢失的数字 --- 位运算

目录 一&#xff1a;题目 二&#xff1a;算法原理 三&#xff1a;代码实现 一&#xff1a;题目 题目链接&#xff1a; 268. 丢失的数字 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码实现 class Solution { public:int missingNumb…...

从Rtos到Linux:学习的策略

这里目的只是为了学习&#xff0c;哪天工作需要用上了能更顺利的上手&#xff0c;写文章的目的是为了记录和便于查询。工作的前两年主要是以mcu裸机为主&#xff0c;目的是压缩资源以最少的ram和flash实现最多的功能&#xff0c;后来五年做的东西越来越复杂的跑的rtos&#xff…...

BUUCTF——Mark loves cat

BUUCTF——Mark loves cat 进入靶场 简单的看了一下功能点 扫一下目录吧 扫目录发现一个.git 下一下源码看看 找到个flag.php和index.php <?php$flag file_get_contents(/flag);再看看index.php&#xff08;代码有点长&#xff0c;所以只留了后面有用的&#xff09; &…...

C/C++滑动窗口算法深度解析与实战指南

C/C滑动窗口算法深度解析与实战指南 引言 滑动窗口算法是解决数组/字符串连续子序列问题的利器&#xff0c;通过动态调整窗口边界&#xff0c;将暴力解法的O(n)时间复杂度优化至O(n)。本文将系统讲解滑动窗口的核心原理、C/C实现技巧及经典应用场景&#xff0c;助您掌握这一高…...

Webug4.0靶场通关笔记15- 第19关文件上传(畸形文件)

目录 第19关 文件上传(畸形文件) 1.打开靶场 2.源码分析 &#xff08;1&#xff09;客户端源码 &#xff08;2&#xff09;服务器源码 3.渗透实战 &#xff08;1&#xff09;构造脚本 &#xff08;2&#xff09;双写绕过 &#xff08;3&#xff09;访问脚本 本文通过《…...

黑马点评大总结

8.2.1 短信登录 首先是用户提交手机号&#xff0c;后端将生成的验证码以及用户信息存入session中&#xff0c;用户登录时进行拦截并从session中拿出来信息校验&#xff0c;并把用户信息存入ThreadLocal中session共享问题&#xff1a;每个tomcat有自己的一份session&#xff0c…...

LeetCode:返回倒数第k个结点

1、题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 注意&#xff1a;本题相对原题稍作改动 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4 说明&#xff1a; 给定的 k 保证是有效的。 2、…...

zotero pdf中英翻译插件使用

最近发现一个pdf中英翻译的神器zotero-pdf2zh&#xff0c;按照官方安装教程走一遍的时候&#xff0c;发现一些流程不清楚的问题&#xff0c; 此文就是整理一些安装需要的文件以及遇到的问题&#xff1a; 相关文件下载地址 Zotero 是一款免费的、开源的文献管理工具&#xff0…...

Java后端程序员学习前端之CSS

什么是css Cascading Style Sheet 层叠级联样式表 表现 (美化网页) 字体&#xff0c;颜色&#xff0c;边距&#xff0c;高度&#xff0c;宽度&#xff0c;背景图片&#xff0c;网页定位&#xff0c;网页浮动.. 发展史 CSS1.0 CSS2.0 DIV(块)CSS&#xff0c;HTML与CSS结构分离…...

MySQL——数据库基础操作

学习MySQL之前&#xff0c;要先配置好相关环境与软件下载&#xff0c;怎么就不展开了&#xff1a;找找网上对应环境下的教程即可 目录 数据库与MySQL 案例使用 MySQL架构 SQL指令分类 储存引擎 库操作 创建数据库 编码集与校验规则 校验规则的影响 删除数据库 数…...

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…...

湖北理元理律师事务所:规模化债事服务的探索与实践

在个人债务问题日益普遍化的当下&#xff0c;如何通过合法、系统化的服务帮助债务人化解危机&#xff0c;成为法律服务业的重要课题。湖北理元理律师事务所作为经国家司法局批准设立的债事服务机构&#xff0c;其构建的“法律技术金融”服务模式&#xff0c;为债务优化领域提供…...

MySQL JOIN详解:掌握数据关联的核心技能

一、为什么需要JOIN&#xff1f; 在关系型数据库中&#xff0c;数据通常被拆分到不同的表中以提高存储效率。当我们需要从多个表中组合数据时&#xff0c;JOIN操作就成为了最关键的技能。通过本文&#xff0c;您将全面掌握MySQL中7种JOIN操作&#xff0c;并学会如何在实际场景中…...

深入浅出数据库规范化的三大范式

数据库的“成长之路”&#xff1a;从1NF到3NF的规范化进化 在数据库的世界里&#xff0c;关系模式就像一个“孩子”&#xff0c;需要一步步学习“规矩”&#xff0c;才能健康成长。今天&#xff0c;我们就来聊聊数据库的规范化历程——从第一范式&#xff08;1NF&#xff09;出…...