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

全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别

文章目录

  • 1. 文章引言
  • 2. 简述URL
  • 3. http完整请求
    • 3.1 DNS域名解析
    • 3.2 TCP的3次握手
    • 3.3 发起http请求
    • 3.4 浏览器解析html代码
    • 3.5 浏览器对页面进行渲染呈现给用户
  • 4. 解决404错误的方法
  • 5. 补充知识点
    • 5.1 cookie和session的区别
    • 5.2 ChatGPT的介绍

1. 文章引言

正赶上最近ChatGPT很火,于是借助ChatGPT来解释HTTP Status 404,如下所示:

在这里插入图片描述

HTTP Status 404:

The HTTP Status 404 means that the requested resource was not found on the server. This is commonly used in response to a failed HTTP request and can be caused by mistyping an URL, spelling mistakes, or trying to access a file or resource that no longer exists.

可惜的是,ChatGPT给出的是英文的解释,我们不妨翻译成中文,如下所示:

HTTP状态404表示在服务器上找不到请求的资源。这通常用于响应失败的 HTTP 请求,可能是由于键入错误的URL、拼写错误或尝试访问不再存在的文件或资源引起的。

根据翻译可知,如果我们请求的资源在服务器中不存在,或者资源虽然存在,但我们发送的请求(URL)在服务器没有找到该所需资源,便会报出404的错误。

404错误也是互联网上最常见的错误之一,该错误消息可能与server not found(无法找到服务器)或其他类似消息产生混淆。

2. 简述URL

上文提到了URL,出现404最常见的的是路径(URL)错误。

那么什么是URL,它有怎么样的魅力?接下来我便分析它。

URL的全称是Uniform Resource Locator,中文翻译是统一资源定位符,又叫统一资源定位器、定位地址、URL地址,俗称网页地址或简称网址。

正如其名,就是用于定位服务的资源在哪?发送的Request去哪里找,然后,服务器再做出逻辑响应(Response)。

  1. 统一资源定位符的标准格式如下:

[协议类型]://[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]

  1. 统一资源定位符的完整格式如下:

[协议类型]://[访问资源需要的凭证信息]@[服务器地址]:[端口号]/[资源层级UNIX文件路径][文件名]?[查询]#[片段ID]

比如此URLhttp://127.0.0.1:8081/user/list?kerword=test&username=jack,其中格式如下:

  1. http是协议

  2. 127.0.0.1是服务器地址

  3. 8081是服务器上的端口号

  4. /user/list是路径

  5. 其中/分隔目录和子目录。

  6. ?kerword=test&username=jack是查询。

?分隔实际的URL和参数,这里很容易出错。

&用于参数间的分隔符,= 等于(不是赋值)。

除此之外,还有+表示空格,#表示书签。

数据(除了数字)都会转换成以UTF8URL编码。

格式需要注意的地方:

  1. 一般使用Tomcatnginx等服务器启动的项目,需要查看端口是否正确。

  2. 协议名http/https,域名或者ip地址是否有误?

  3. /分割符,以/ 区别路径中的每一个目录名称。这样我们我们可以根据URL一层层的去查找我们项目的目录,分析出现404可能的原因是否为路径错误或者资源不存在。

  4. &表示的参数可以预估其值是否达到预期

3. http完整请求

我们为什么了解http请求呢?

了解http请求的过程有助于我们理解web的大体运行流程。

总体流程如下:

  1. 先域名解析

  2. 然后发起TCP3次握手

  3. 其次建立TCP,连接后发起http请求

  4. 再次服务器响应http请求,浏览器得到html代码

  5. 接着浏览器解析html代码,并请求html代码中的资源(如js、css、图片等

  6. 最后浏览器对页面进行渲染呈现给用户。

接下来,我便详细讲解它们都干些什么?

3.1 DNS域名解析

dns是什么?

它使用UDP传输的方式,将主机域名转换为ip地址,属于应用层协议,。

dns工作原理:

  1. 主机向本地域名服务器的查询一般都是采用递归查询。

  2. 本地域名服务器向根域名服务器的查询的迭代查询。

    • 当用户输入域名时,浏览器先检查自己的缓存中是否存在这个域名映射的ip地址,有则解析结束。

    • 若没命中,则检查操作系统缓存(如Windowshosts)中有没有解析过的结果,有则解析结束。

    • 若无命中,则请求本地域名服务器解析( LDNS)。

    • LDNS没有命中,就直接跳到根域名服务器请求解析。根域名服务器返回给LDNS一个主域名服务器地址。

    • 此时LDNS再发送请求给上一步返回的gTLD( 通用顶级域), 接受请求的gTLD查找并返回这个域名对应的Name Server的地址。

    • Name Server根据映射关系表找到目标ip,返回给LDNS

    • LDNS缓存这个域名和对应的ip, 把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。

dns解析的整体流程如下图所示:

在这里插入图片描述

3.2 TCP的3次握手

tcp为什么要三次握手?是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

三次握手过程如下:

  1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

  2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,如下图所示:

在这里插入图片描述

有人问会不会因为丢包而导致404错误?可能性极小,这里不得不提TCP是如何保证可靠传输的 (与上面三次握手协议都是校招面试的重点),如下所示:

  1. 三次握手

  2. 将数据截断为合理的长度。应用数据被分割成TCP认为最适合发送的数据块(按字节编号,合理分片)

  3. 超时重发。当TCP发出一个段后,它启动一个定时器,如果不能及时收到一个确认就重发

  4. 确认应答:对于收到的请求,给出确认响应

  5. 校验和:校验出包有错,丢弃报文段,不给出响应

  6. 序列号:对失序数据进行重新排序,然后才交给应用层

  7. 丢弃重复数据:对于重复数据 , 能够丢弃重复数据

  8. 流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出

  9. 拥塞控制。当网络拥塞时,减少数据的发送

3.3 发起http请求

http是一个无状态的请求/响应协议,但是这不能满足现在的业务。

因此,出现了用于保存状态的cookiesession

一个完整的HTTP请求报文包括请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。如下图所示:

在这里插入图片描述

当然,我们也可以打开浏览器(如chrome,edge,火狐等)的调试模式:

  1. F12进入到调试模式

  2. 找到Network(edge浏览器叫做网络)

  3. 查看信息。

【注意】如果你的F12不生效,可以尝试使用fn + F12。若这样还不生效,可以点击鼠标右键,找到并单击检查即可。

打开浏览器的调试模式后,你会看到很多请求信息或响应信息,我们也可以基于它们进行开发操作,如下图所示:

在这里插入图片描述

我们再了解HTTP请求的常见方法:GET,POST,DELETE,TRACE ,CONNECT

在这里插入图片描述

3.4 浏览器解析html代码

浏览器在解析html代码时,并请求html代码中的资源(如jscss、图片等)。

html页面主要由domcssjavascript等部分构成,还可能引入imgiframe等其他资源。

浏览器接收到html代码,可能是一份完整的文档,也可能是一个chunk,即开始解析。

解析过程是先构建dom树,再根据dom树构建渲染树,最后浏览器将渲染树绘制到页面上。

3.5 浏览器对页面进行渲染呈现给用户

什么是渲染?

渲染在电脑绘图中是指用软件从模型生成图像的过程,也就是将我们html的逻辑转换成我们肉眼可见的对象。

具体参看博客:浏览器渲染过程与性能优化

4. 解决404错误的方法

  1. 目录不能被引用。

可以在Eclipse包资源管理器(Package Explorer)检查文件存放的位置。

由于META-INFWEB-INF文件夹下的内容不对外发布,如果你引用了带这两个目录的文件,肯定是不允许,如下URL地址就是错误的:

 http://localhost:8081/testProject/WEB-INF/index.html
  1. URL输入错误,如下为排错方法:

    • 先查看URLIP地址和端口号是否书写正确。

    • 其次查看上下文路径是否正确,比如Project -> Properties -> MyElipse -> Web -> Web Context-root,检查这个路径名称是否书写正确。

    • 最后检查一下文件名称是否书写正确。

  2. 未部署Web应用

  3. Tomcat器中web.xml中的问题

假如,你的web应用程序有多个jsp页面,当你点击web应用程序的虚拟根目录时,可能会出现404错误

此时,你只需要修改Tomcat服务器中web.xml,如下代码所示:

<!-- 将false修改为true -->
<init-param><param-name>list</param-name> <param-value>false</param-value> 
</init-param>

如果在6.0.18版本errorThe requested resource () is not available. 总是无法访问/myapp/*.jsp文件,可以将 /ROOTbuild.xml文件copy一份到myapp

【注意】把里面所有的ROOTmyapp代替, 应该就OK。

  1. WEB-INF下面必须要有几个固定的文件夹和文件

    • web.xmlweb app的配置文件

    • libweb app用到的库文件

    • classes存放编译好的servlet

请注意这些名字,我曾经把classes写成class,查错查了半宿还没解决。

所以,写这些时千万要仔细,要不会浪费更多的精力去查错。

  1. 如果运行的是servlet(.class)文件,而非.jsp文件,需在web.xml中加上以下字段:
 <servlet><servlet-name>TestServlet</servlet-name><servlet-class>TestServlet</servlet-class></servlet><servlet-mapping><servlet-name>TestServlet</servlet-name><url-pattern>/TestServlet</url-pattern></servlet-mapping>

其中,TestServlet改为你要运行的文件名。

【注意】web.xmlWEB-INF下面的。

  1. struts.xml配置错误

可能是你的Action值写错,或者链接URL写错。

比如commons-lang3-3.1.jar文件到WEB-INF/lib目录下,struts2最新的web开发包如下:

在这里插入图片描述

当然,如果你的是maven项目,直接在pom.xml中引入jar包即可,如下所示:

<!--apache配置开始-->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version>
</dependency>
<!--apache配置结束-->
  1. 检查同一个项目,是否启动了多个java服务

有时,后台没有关闭之前的服务,你又重新启动,可能会报错404

5. 补充知识点

5.1 cookie和session的区别

  1. 存储的位置不同:

    • cookie:存放在客户端

    • session:存放在服务端,session存储的数据比较安全

  2. 存储的数据类型不同:两者都是key-value的结构,但针对value的类型是有差异的:

    • cookievalue只能是字符串类型

    • sessionvalueObject类型

  3. 存储的数据大小限制不同:

    • cookie:大小受浏览器的限制,很多是是4K的大小

    • session:理论上受当前内存的限制

  4. 生命周期的控制,cookie的生命周期随着浏览器关闭而消亡。

    • cookie的生命周期是累计的,从创建时,就开始计时,30分钟后,cookie生命周期结束

    • session的生命周期是间隔的,从创建时,开始计时如在30分钟,没有访问session,那么session生命周期被销毁

5.2 ChatGPT的介绍

之前喜欢使用谷歌翻译报错的信息,自从出现了ChatGPT,便喜欢使用ChatGPT来翻译。

如果你想了解什么是ChatGPT以及它的用法,可以点击如下链接:

  1. 全网最详细的介绍ChatGPT

  2. ChatGPT、低代码等技术出现会不会导致底层程序员失业

  3. 全网推荐7款github上有趣的ChatGPT的应用源码

  4. 如何调用ChatGPT的API接口到官方例子的说明以及GitHub上的源码应用

  5. 全网详细解读基于java调用ChatGPT的API接口

相关文章:

全网多种方法分析解决HTTP Status 404资源未找到的错误,TCP的3次握手,dns域名解析,发起http请求以及cookie和session的区别

文章目录1. 文章引言2. 简述URL3. http完整请求3.1 DNS域名解析3.2 TCP的3次握手3.3 发起http请求3.4 浏览器解析html代码3.5 浏览器对页面进行渲染呈现给用户4. 解决404错误的方法5. 补充知识点5.1 cookie和session的区别5.2 ChatGPT的介绍1. 文章引言 正赶上最近ChatGPT很火…...

Django图书商场购物系统python毕业设计项目推荐

mysql数据库进行开发&#xff0c;实现了首页、个人中心、用户管理、卖家管理、图书类型管理、图书信息管理、订单管理、系统管理等内容进行管理&#xff0c;本系统具有良好的兼容性和适应性&#xff0c;为用户提供更多的网上图书商城信息&#xff0c;也提供了良好的平台&#x…...

基于模型预测控制(MPC)的悬架系统仿真分析

目录 前言 1.悬架系统 2.基于MPC的悬架系统仿真分析 2.1 simulink模型 2.2仿真结果 2.3 结论 3 总结 前言 模型预测控制是无人驾驶中较为热门的控制算法&#xff0c;但是对于悬架等这类系统的控制同样适用。 我们知道模型预测控制主要可以划分为三个部分&#xff1a; …...

Word处理控件Aspose.Words功能演示:使用 Java 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c;API支持所有流行的Word处理文件…...

图扑数字孪生智慧机场,助推民航“四型机场“建设

前言 民航局印发的《智慧民航建设路线图》文件中&#xff0c;明确提出智慧机场是智慧民航的四个核心抓手之一。并从机场全域协同运行、作业与服务智能化、智慧建造与运维方面&#xff0c;为智慧机场的发展绘制了清晰的蓝图。 效果展示 图扑软件应用自主研发核心产品 HT for …...

内网安装管家婆软件如何实现外网访问?内网穿透的几种方案教程

管家婆软件从网络架构上分两种版本&#xff1a;web&#xff08;浏览器http端口&#xff09;访问的版本和客户端&#xff08;211固定端口sqlserver数据库&#xff09;访问的版本。公司库管经常用仓库登录管家婆&#xff0c;一旦需要在公司外部登陆访问管家婆客户端&#xff0c;就…...

CCNP350-401学习笔记(1-50题)

1、Which function does a fabric edge node perform in an SD-Access deployment?A. Connects endpoints to the fabric and forwards their traffic. B. Encapsulates end-user data traffic into LISP. C. Connects the SD-Access fabric to another fabric or external La…...

基于微信小程序的新冠肺炎服务预约小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…...

网站项目部署在k8s案例与Jenkins自动化发布项目(CI/CD)

在K8s平台部署项目流程 在K8s平台部署Java网站项目 制作镜像流程 第一步&#xff1a;制作镜像 使用镜像仓库&#xff08;私有仓库、公共仓库&#xff09;&#xff1a; 1、配置可信任&#xff08;如果仓库是HTTPS访问不用配置&#xff09; # vi /etc/docker/daemon.json { "…...

网络原理 (1)

网络原理 文章目录1. 前言&#xff1a; 2. 应用层2.1 XML2.2 json2.3 protobuffer3. 传输层3.1 UDP3.1 TCP4. TCP 内部的工作机制 &#xff08;重点&#xff09;1. 确认应答 2.超时重传3. 连接管理3.1 建立联系 &#xff1a;三次握手3.2 断开连接 : 四次挥手4. 滑动窗口5. 流量…...

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和,矩阵】

LeetCode-1139. 最大的以 1 为边界的正方形【前缀和&#xff0c;矩阵】题目描述&#xff1a;解题思路一&#xff1a;前缀和。前缀和来记录边长。解题思路二&#xff1a;0解题思路三&#xff1a;0题目描述&#xff1a; 给你一个由若干 0 和 1 组成的二维网格 grid&#xff0c;请…...

windows10/11,傻瓜式安装pytorch(gpu),在虚拟环境anaconda

安装anaconda地址 &#xff1a;Anaconda | The Worlds Most Popular Data Science Platform安装选项全默认点击next就行。查看支持cuda版本cmd命令行输入nvidia-smi。下图右上角显示11.6为支持的cuda版本。要是显示没有nvidia-smi命令。得安装nvidia驱动&#xff0c;一般情况都…...

Revit导出PDF格式图纸流程及“批量导出图纸”

一、Revit导出PDF格式图纸流程 1、点击左上方“应用程序菜单”即“R”图标&#xff0c;进择“打印”选项。 2、在弹出的对话框中&#xff0c;需要设置图纸“打印范围”&#xff0c;选择“所选的视图/图纸选项”&#xff0c;点击“选择”&#xff0c;按钮&#xff0c;选择我们需…...

【自学Linux】 Linux文件目录结构

Linux文件目录结构 Linux文件目录结构教程 在 Linux 中&#xff0c;有一个很经典的说法&#xff0c;叫做一切皆文件&#xff0c;因此&#xff0c;我们在系统学习 Linux 之前&#xff0c;首先要了解 Linux 的文件目录结构。Linux 主要的目录有三大类&#xff0c;即根目录(/)&a…...

如何让APP在Google Play中成为特色

Google Play覆盖了 190 多个地区&#xff0c;数十亿的用户&#xff0c;所以开发者都会希望APP在应用商店中获得推荐位。 Google Play 上的精选热门应用类型&#xff1a;热门游戏或应用&#xff0c;畅销应用&#xff0c;安装量增长的应用&#xff0c;产生最多收入的应用。 那么…...

【C++】cin的处理过程

使用cin进行输入时&#xff0c;程序将输入视为一系列的字节&#xff0c;其中每个字节都被解释为字符编码。不管目标数据 类型是什么&#xff0c;输入一开始都是字符数据——文本数据。然后&#xff0c;cin对象负责将文本转换为其他类型。 为说明这是如何完成的&#xff0c;来看…...

读取Sentinel和Landsat 压缩包数据,直接进行波段重组、影像裁剪或者匀色镶嵌处理

波段重组在软件中查找&#xff1a;菜单栏-》影像基本处理-》波段处理-》波段重组&#xff0c;弹出如下对话框&#xff1a;根据对话框中的提示&#xff0c;输入需要处理的数据。注意&#xff1a;1、输入数据添加之后&#xff0c;需要点击其中任意一条数据&#xff0c;获取数据波…...

Yakit Web Fuzzer 终极能力强化:热加载 Fuzz

Background 在 HTB&#xff1a;BountyHunter 中&#xff0c;我们发现 Web Fuzzer 在使用中可以 “更强”&#xff0c;我们需要编写 Yak 脚本的事情&#xff0c;如果可以经过某些 Web Fuzzer 的优化&#xff0c;可以达到同样的效果。 在一个标签中&#xff0c;我们实现{{base6…...

Qt新手入门指南 - 如何创建模型/视图(三)

每个UI开发人员都应该了解ModelView编程&#xff0c;本教程的目标是为大家提供一个简单易懂的介绍。Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff…...

【Spring】手动实现简易AOP和IOC

前言 XML&#xff1a;通过Dom4j对XML进行解析和验证。 IOC&#xff1a;通过获取要创建对象的Class类型、构造函数后&#xff0c;通过反射来实现。 AOP&#xff1a;通过使用JDK动态代理和Cglib动态代理实现。 一、解析XML 1.1、解析bean标签 /*** 解析bean标签* param xmlBean…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构

React 实战项目&#xff1a;微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇&#xff01;在前 29 篇文章中&#xff0c;我们从 React 的基础概念逐步深入到高级技巧&#xff0c;涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...

从零开始了解数据采集(二十八)——制造业数字孪生

近年来&#xff0c;我国的工业领域正经历一场前所未有的数字化变革&#xff0c;从“双碳目标”到工业互联网平台的推广&#xff0c;国家政策和市场需求共同推动了制造业的升级。在这场变革中&#xff0c;数字孪生技术成为备受关注的关键工具&#xff0c;它不仅让企业“看见”设…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...

Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)

做RAG自己打算使用esmilvus自己开发一个&#xff0c;安装时好像网上没有比较新的安装方法&#xff0c;然后找了个旧的方法对应试试&#xff1a; &#x1f680; 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana&#xff0c;适配中文搜索…...

SDU棋界精灵——硬件程序ESP32实现opus编码

一、 ​​音频处理框架​ 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) ​​main/components/audio_pipeline/afe_processor.c​​功能​​: 声学回声…...

Python打卡训练营学习记录Day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...