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

计算机网络 —— HTTP 协议(详解)

前一篇文章:网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客

目录

·前言

一、HTTP 协议简介

二、HTTP 协议格式

1.抓包工具的使用

2.抓包工具的原理

3.抓包结果

4.HTTP协议格式总结

三、HTTP 请求

1. URL

(1)URL 基本格式

(2)URL encode

2. 方法(method)

(1)GET 方法

(2)POST 方法

(3)GET 与 POST 的区别

(4)其他方法

3.请求 “报头”(header)

(1)Host

(2)Content-Length

(3)Content-Type

(4)User-Agent

(5)Referer

(6)Cookie

4.请求 “正文”(body)

(1)multipart/form-data

(2) application/x-www-form-urlencoded

(3)application/json

四、HTTP 响应

1.状态码(status code)

(1)200 OK

(2)404 Not Found

(3)403 Forbidden

(4)405 Method Not Allowed

(5)500 Internal Server Error

(6)504 Gateway Timeout

(7)302 Move temporarily

(8)301 Moved Permanently

(9)状态码总结

2.响应 “报头”(header)

3.响应 “正文”(body)

(1)text/html

(2) text/css

(3) application/javascript

(4)application/json

·总结


·前言

        本篇文章来给大家介绍的是 HTTP 协议,这里我要分享的内容是:介绍什么是 HTTP 协议?抓包工具如何使用?HTTP 协议的格式是怎样的?HTTP 的请求与响应是什么样的?GET 与 POST 方法的区别是什么?状态码的作用是什么?下面就开始本篇文章的内容介绍。

一、HTTP 协议简介

        HTTP(Hyper Transfer Protocol)即超文本传输协议,它所处于 TCP/IP 五层模型的位置如下图所示:

        由此可见,HTTP 协议是应用层的协议, 它诞生于 1991年,目前已经发展成为最主流使用的一种应用层协议了。

        HTTP 协议已经演化到了版本 3,但是目前主要使用的还是 HTTP 1.1,HTTP 协议在版本 3之前都是基于传输层的 TCP 协议实现的(版本 3是基于 UDP实现的),其最主要的应用场景就是网站(服务器与浏览器之间传输数据),在我们客户端(手机,电脑)和服务器之间的数据传输有的也会用到 HTTP 协议,HTTP 的作用如下图所示:

         当我们在浏览器输入一个百度的 “网址(URL)” 时,浏览器就会给百度的服务器发送一个 HTTP 请求,随后百度的服务器就会给我们浏览器返回一个 HTTP 响应,当然,在这个过程中,我们的浏览器可能会给服务器发送多个 HTTP 请求,服务器返回多个响应,响应中包含了页面 HTML、CSS、JavaScript、图片、字体等信息,最后经过浏览器的解析就会展示成我们看到的页面内容,HTTP 协议之所以被称为超文本传输协议也就是因为他可以传输像:图片、视频、音频等二进制的数据。

        HTTP 协议的交互过程是一种非常经典的 “一问一答” 形式,对于我们平常的网站开发这基本也就够用了,但是在某些场景中还是会显得有些捉襟见肘,比如需要服务器主动给浏览器发送信息的场景,这也叫做消息推送,所以在应用层中提供了一个和 HTTP 搭配的协议:WebSocket 协议这个协议也就是针对 HTTP 协议能力进行补充的,有关这的详细介绍在文章:网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客 ,本篇文章就不再过多介绍。

二、HTTP 协议格式

1.抓包工具的使用

        想要获取 HTTP 协议的报文格式,我们就需要借助抓包工具,抓包工具本质上是一个 “代理程序” 它可以获取到网络上传输的数据并显示出来,从而给我们提供一些参考,在我们下面的介绍中会经常使用到,这里我要和大家介绍的抓包工具就是:Fiddler,下载地址:Web Debugging Proxy and Troubleshooting Tools | Fiddler,下载安装完成后,进入程序,页面每个部分的内容大致功能如下图所示:

         左侧会有很多的 HTTP 请求/响应,可以使用 Ctrl+A 全选左侧抓包结果,再敲 delete 键清除所有被选中的结果。

2.抓包工具的原理

        那么 Fiddler 的原理是什么?它怎么就可以获取到 HTTP 请求/响应的数据?如下图所示:

        刚才我们介绍了,Fiddler 是一个代理程序,那么安装并打开这个程序后,我们使用浏览器访问百度页面时,就会把 HTTP 请求先发给 Fiddler,然后 Fiddler 再把请求转发给百度的服务器,当百度服务器把页面信息返回时,Fiddler 先拿到返回的数据再把数据交给浏览器,此时,在这个程序中就可以显示出 HTTP 请求/响应了,当然,Fiddler 可以抓取任何 HTTP/HTTPS 的数据,所以只要我们系统中有任何一个程序(不一定是浏览器)使用了 HTTP/HTTPS 就都会被 Fiddler 获取到。 

3.抓包结果

        在我们打开一个网站的时候,浏览器与服务器之间进行的 HTTP 交互不是只有一次,通常会有很多次,第一次进行 HTTP 交互时拿到这个页面的 html,但是 html 还会依赖其他的 css、js等,所以在 html 被浏览器加载后就会触发一些其他的 HTTP 请求来获取 css、js等内容,下面我们就来观察一下我们抓取 HTTP 请求/响应的具体信息吧。

        先来观察获取到的 HTTP 请求信息,如下图所示:

         上图 HTTP 请求每部分含义如下:

  • 首行:【方法】+【URL】+【版本】;
  • Header(请求头):请求的属性,使用冒号分隔的键值对,每组属性直接使用\n分隔·,遇到空行表示 Header 部分结束;
  • Body:空行后面的内容就是 Body,Body 允许是空字符串,如果 Body 存在,则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度。

        下面我们再来观察一下获取到 HTTP 响应信息:如下图所示:

         上图 HTTP 响应每部分含义如下:

  • 首行:【版本号】+【状态码】+【状态码解释】;
  • Header:响应的属性,使用冒号分隔的键值对,每组属性直接使用\n分隔·,遇到空行表示 Header 部分结束;
  • Body:空行后面的内容就是 Body,Body 允许是空字符串,如果 Body 存在,则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度。如果服务器返回了一个 html 页面,那么 html 页面内容就是在 Body 中。 

4.HTTP协议格式总结

        根据抓取的 HTTP 请求/响应的结果我们来对 HTTP 协议的格式做个总结,如下图所示:

         在 HTTP 请求/响应中都存在空行,这是由于 HTTP 协议中没有规定报头部分的键值对有多少,所以使用空行来作为报头结束的标记。

三、HTTP 请求

        初步认识完 HTTP 请求的格式后,我来对请求中的内容再做进一步的详细介绍。

1. URL

        URL 可以理解为我们俗称的 “网址” ,互联网上的每个文件都有一个唯一的 URL,它包含的信息可以指出文件的位置及浏览器应该怎么处理它。

(1)URL 基本格式

        URL 是一个非常重要的概念,它不仅仅是在 HTTP 中使用,在前面文章介绍 JDBC 编程的时候也使用过 URL,与之对应还有一个叫 URI 的概念,URL 是唯一资源定位符,URI 是唯一资源标识符,严格来说,URI 的范围要比 URL更广,下面我们就来分析一个网页的 URL,如下图所示:

         关于 URL 的基本格式如下图所示:

         有关服务器端口号,在上面真实的网页 URL 中端口号是被省略了的,此时,浏览器就会根据协议类型自动决定使用哪个端口,比如:HTTP 协议默认使用 80 端口,HTTPS 协议默认使用 443 端口。

        关于查询字符串(query string),其中的内容是键值对结构,里面的 key 和 value 的取值和个数完全是由我们程序员自己约定,我们可以通过这样的方式来自定制传输我们需要的信息给服务器。

        使用 URL 在网络上获取资源的步骤如下:

  1. 通过 IP 地址知道服务器的位置;
  2. 通过端口号知道是哪个程序;
  3. 通过路径知道是访问哪个资源。 

(2)URL encode

        查询字符串(query string)中的内容是自定义的键值对,在 URL 中,本身有些符合是具有特殊含义的,比如:/、:、?、@……,如果在 URL 中的 query string 中也包含了同样的符号,并直接写入,可能就会使浏览器/服务器解析失败,为了解决这样的问题,就需要对 query string 中的内容进行 “转义”,这就是 encode。

        转义的规则:将需要转码的字符转为 16进制,然后从右到左,取 4位(不足 4位直接处理),每两位做一位,前面加上 %,编码成 %XY 格式,具体例子如下所示:

        搜索 C++ 时,+ 就被转义成了 %2B。

2. 方法(method)

        在 HTTP 请求的首行中,除了 URL 和版本号,剩下的就是方法了,首行中的方法就是描述我们这次请求想要完成的事情,下面我就来介绍首行中用到最多的两个方法 GET 与 POST。

(1)GET 方法

        GET 方法是最常用的 HTTP 方法,这是用于获取服务器的某个资源,在浏览器中直接输入 URL 此时浏览器就会发生出一个 GET 请求,另外,HTML 中的 link、img、script 等标签也会触发 GET 请求,下面我就来使用 Fiddler 来抓取一个 GET 请求观察它的特点,如下图所示:

         有关 GET 方法的请求一般具有以下的特点:

  • 首行的第一部分为 GET;
  • URL 的 query string 可以为空也可以不为空;
  • Header 部分有若干个键值对结构;
  • body 部分一般没有内容。

(2)POST 方法

        POST 方法也是一种很常见的方法,这个方法在登录和上传的场景会经常使用,POST 方法多用于提交用户输入的数据给服务器,我们可以使用 HTML 中的 from 标签来构造 POST 请求,下面我就来使用 Fiddler 抓取一个 POST 请求来分析一下它的特点,如下图所示:

         有关 POST 方法的请求一般具有以下的特点:

  • 首行的第一部分为 POST;
  • URL 的 query string 一般为空(也可以不为空);
  • Header 部分有若干个键值对结构;
  • body 部分一般不为空,body 内的数据格式通过 Header 中的 Content-Type 指定,body 的长度由 Header 中的 Content-Type 指定。

(3)GET 与 POST 的区别

        介绍完 GET 与 POST 两种常用的 HTTP 方法后,我再来介绍一下他们之间有什么区别吧,区别如下:

  • GET 与 POST 在本质上并没有什么区别,使用 GET 的场景可以替换成 POST,使用 POST 的场景也可以替换成 GET,这要取决于我们代码是怎么写的;
  • 在使用习惯上 GET 与 POST 方法还是有区别的,比如:GET 习惯于把数据放到 URL 的 query string 中,而 POST 习惯于把数据放到 body 中(当然 GET 也可以把数据放到 body 中,POST 也可以把数据放到 query string);
  • 在语义上,GET 与 POST 方法也是有区别的,标准文档中 GET 的语义是用来获取数据,POST 的语义是给服务器传输数据;
  • 关于幂等性(每次输入的内容一定,输出的结果也一定,称为“幂等”),标准文档中建议把 GET 请求实现成幂等的,POST 则没有要求;
  • GET 请求可以被浏览器收藏夹收藏,POST 请求不可以。

(4)其他方法

        关于 HTTP 的方法还有很多,但是除了 GET 与 POST 都不常用,其他方法如下图所示:

        关于这些其他方法的介绍如下所示:

  • PUT 与 POST 相似,只不过 PUT 具有幂等性,一般用于更新;
  • DELETE 方法用于删除服务器指定资源;
  • OPTIONS 返回服务器所支持的请求方法;
  • HEAD 类似与 GET 只不过响应体不返回,只返回响应头;
  • TRACE 回显服务器端收到的请求,测试的时候会使用这个。 

3.请求 “报头”(header)

        Header 的整体格式是 “键值对” 结构,每个键值独占一行,键和值直接使用冒号分隔,有关报头的种类其实有很多种,在这里我来介绍几个常见的。

(1)Host

        表示服务器主机的地址和端口,下面我来启动一个我本地的程序,使用 Fiddler 抓取一下,如下图所示:

(2)Content-Length

        表示 body 中数据的长度,如下图所示:

        通过这个长度来处理 “粘包问题”,由于 HTTP 底层也是基于 TCP 的,所以传输多个 HTTP 数据报时,接收方这边的接收缓冲区就会积累多个包的数据,应用程序在读取这些数据的时候就需要明确包之间的边界,当然如果是没有 body 的请求/响应,就直接使用空行作为分隔符了,如果有 body 空行就不再是结束的标记了,而是从空行开始读取 body,读取的长度就取决于 Content-Length。  

(3)Content-Type

        表示请求的 body 中的数据格式,其中常见的格式如下:

  • application/json:body 就是 json 格式;
  • application/x-www-form-urlencoded:这是通过 HTML 中的 form 标签构造出来的一种格式,这个格式的特点就是把 query string 放到了 body 中;
  • multipart/form-data:这是上传文件时使用的。

(4)User-Agent

        表示当前用户浏览器/操作系统的属性信息,描述了当前用户上网的设备情况,如下图所示:

         其中 Windows NT 10.0;Win64;x64 表示的就是操作系统的信息, AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 表示的是浏览器的信息。

         由于我们电脑与手机的大小不相同,其他的一些性能也不相同,所以电脑上看见的页面信息和手机上看见的信息会有所差异,那么我们就可以利用 User-Agent 这个信息来判断当前系统是 PC 的系统还是移动端的系统,从而来返回不同的页面。

(5)Referer

        表示当前页面是从哪个页面跳转过来的,如果直接在浏览器中输入 URL,或者直接通过收藏夹来访问页面时是没有 Referer 的。

(6)Cookie

        Cookie 是我们 HTTP 请求报头中一个非常重要的属性,本质上是浏览器这里本地持久化存储数据的机制,在 Cookie 中存储了一个字符串,往往可以通过这个字符串实现 “身份标识” 的功能,这也就是为什么在我们进行完登录操作后访问的每个页面都能知道是谁在进行访问,从而返回对应的信息,为了更好的理解 Cookie 的作用,如下图所示:

        此时后续的每个访问请求都会携带 Cookie 信息,这样就可以根据当前用户来返回对应的页面信息了。

        关于 Cookie 有几个结论,如下所示:

  • Cookie 是服务器返回给浏览器的,通常是首次登录成功之后;
  • Cookie 会存储在浏览器本地主机的硬盘中,这样后续每次访问服务器就都会带上 Cookie,不同的客户端保存的 Cookie 是不同的,即使是同一个主机使用不同的浏览器,Cookie 大概率也不会相同;
  • Cookie 中存的是键值对格式的数据,这里的内容是程序员自定义的,外人无法理解其中的内容;
  • Cookie 在本地硬盘中进行保存,是按照不同域名的维度分别进行存储的,比如我们浏览器访问百度会有一组 Cookie 访问搜狗也有一组 Cookie;
  • Cookie 的用途就是在客户端保存数据,最主要的就是保存用户的身份标识,这样服务器就可以通过标识来区分用户了。 

4.请求 “正文”(body)

        请求正文中的内容格式和 Header 中的 Content-Type 密切相关,在 Content-Type 中罗列了三种常见的情况,那么下面我们就通过抓包来观察这几种情况:

(1)multipart/form-data

        抓取上传音乐的请求信息,如下图所示:

(2) application/x-www-form-urlencoded

        抓取登录时的请求信息,如下图所示:

(3)application/json

        抓取不同页面的登录请求信息,如下图所示:

四、HTTP 响应

        详细介绍完 HTTP 请求的内容后,我来再来对 HTTP 响应中的内容再做进一步的详细介绍。

1.状态码(status code)

        HTTP 响应中的状态码是用来表示访问一个页面的结果如何?(是访问成功,还是失败,还是其他情况)这里的状态码都是提前规定好的,如下图所示:

        下面我会对一些常见的状态码进行介绍。

(1)200 OK

        这是一个最常见的状态码,表示网页访问成功,通过 Fiddler 抓到的大部分结果都是 200 如下图所示:

(2)404 Not Found

        这个状态码表示的含义就是没有找到资源,当我们在浏览器输入一个 URL,目的是访问对方服务器上的一个资源,如果这个 URL 标识的资源不存在,就会出现 404,如下图所示:

(3)403 Forbidden

        这个状态码表示访问被拒绝,有的页面通常需要用户具有一定的权限才能访问(登录后才能访问),如果用户没有登录直接访问就容易看到 403,如下图所示:

        在未登录状态下访问了一个私有的代码仓库就会出现这个信息。 

(4)405 Method Not Allowed

        前面我介绍了 HTTP 请求的方法(GET、POST等),如果对方服务器不支持所有的方法或者不允许用户使用一些其他方法,此时我们再使用这种禁止使用的方法就会出现这个状态码。

(5)500 Internal Server Error

        这个状态码表示服务器内部错误,一般是服务器的代码执行过程中遇到了一些特殊情况(服务器崩溃)会产生这个状态码。

(6)504 Gateway Timeout

        这个状态码表示访问服务器超时,当服务器负载比较大的时候,服务器处理单条请求消耗的时间变长,就可能出现超时的情况,当然也可能是网太慢了。

(7)302 Move temporarily

        这个状态码的意思是 “临时重定向” ,重定向可以理解为我们手机号码中的 “呼叫转移” 功能,当我们更换手机号后,为了让不知道我新号码的朋友打原来的手机号仍然可以找到我,就可以办理这个业务,那么当别人打我原来的手机号就会自动接到新手机号里了,在登录页面中经常会见到 302,用于实现登录成功后自动跳转到主页,此时响应报文的 Header 中就会包含一个 Location 字段来表示要跳转到哪个页面。

(8)301 Moved Permanently

        这个状态码的意思是 “永久重定向”,当浏览器收到这种响应时,后续的请求都会自动改成新的地址,301 这种状态码的响应报文中也会有 Location 字段来表示要重定向的新地址。

(9)状态码总结

        介绍了几种常见的状态码,下面我来对状态码开头数字的含义做个总结,如下图所示:

2.响应 “报头”(header)

        关于 HTTP 的响应报头,其格式与请求报头的格式基本一致,比如 Content-Type,Content-Length 等属性的含义也与请求报头中的含义一致,只不过关于 Content-Type,HTTP 响应报头中的常见取值与 HTTP 请求报头中的场景取值有所差别,响应中的 Content-Type 常见取值如下:

  • text/html:body 数据格式是 HTML;
  • text/css:body 数据格式是 CSS;
  • application/javascript:body 数据格式是 JavaScript;
  • application/json:body 数据格式是 JSON。

3.响应 “正文”(body)

        响应正文的具体格式取决于 Content-Type 下面就来通过抓包观察部分情况:

(1)text/html

(2) text/css

(3) application/javascript

(4)application/json

·总结

        文章到此就要结束了,本篇文章主要对 HTTP 协议做了一个整体的介绍,其中我们需要理解 GET 与 POST 方法的区别,熟悉常见的状态码含义,对 HTTP 请求/响应的格式要用基本了解,会使用抓包工具也是比较重点的一项技能,如果你认为读了本篇文章您有所收获,希望给本篇文章点个赞,收藏走一波,后面我会继续与大家分享计算机网络的相关知识,关注博主不迷路~~~您的支持就是我创作最大的动力,我们下一篇文章再见~~~

相关文章:

计算机网络 —— HTTP 协议(详解)

前一篇文章:网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客 目录 前言 一、HTTP 协议简介 二、HTTP 协议格式 1.抓包工具的使用 2.抓包工具的原理 3.抓包结果 4.HTTP协议格式总结 三、HTTP 请求 1. URL (1)UR…...

MacOS 配置github密钥

MacOS 配置github密钥 1. 生成GitHub的SSH密钥对 ssh-keygen -t ed25519 -C "xxxxxxx.com" -f ~/.ssh/id_ed25519_github 其中 xxxxxxxxxxx.com 是注册github、gitee和gitlab的绑定账号的邮箱 -t ed25519:生成密钥的算法为ed25519(ed25519比rsa速度快&…...

我的第一个创作纪念日 —— 梦开始的地方

前言 时光荏苒,转眼间,我已经在CSDN这片技术沃土上耕耘了365天 今天,我迎来了自己在CSDN的第1个创作纪念日,这个特殊的日子不仅是对我过去努力的肯定,更是对未来持续创作的激励 机缘 回想起初次接触CSDN,那…...

float globalMapVIsualizationLeafSize; 的中文意思是什么

1.在visual studio 中新建文件 没有包含#include <string>头文件&#xff0c;也可以使用 str2.append(", C");吗&#xff1f; 在 Visual Studio 或任何其他 C 开发环境中&#xff0c;即使新建的文件中没有显式包含 #include <string> 头文件&#xff0c…...

合规性要求对漏洞管理策略的影响

讨论漏洞管理中持续面临的挑战&#xff0c;包括确定漏洞的优先级和解决修补延迟问题。 介绍合规性要求以及自动化如何简化漏洞管理流程。 您认为为什么尽管技术不断进步&#xff0c;但优先考虑漏洞和修补延迟等挑战仍然存在&#xff1f; 企业基础设施日益复杂&#xff0c;攻…...

【Delphi】modbus-TCP 协议库

在日常开发中&#xff0c;也会遇到使用modbus的部件&#xff0c;比如温度控制器、读卡器等等&#xff0c;那么使用Delphi开发&#xff0c;也就必须遵守modbus-TCP协议&#xff0c;如果自己使用TCP控件写也没有问题&#xff0c;不过如果有开源的三方库&#xff0c;别人已经调试过…...

乐橙云小程序插件接入HbuilderX

乐橙插件使用&#xff1a; 1.配置app.json文件&#xff0c;uniapp中在mainfest.json中配置 https://uniapp.dcloud.net.cn/collocation/manifest.html#mp-weixin ** 2、集成插件页面.json文件 ** uniapp在 pages.json 对应页面的 style -> usingComponents 引入组件&…...

Python世界:复制粘贴?没那么简单!浅谈深拷贝与浅拷贝

Python世界&#xff1a;复制粘贴&#xff1f;没那么简单&#xff01;浅谈深拷贝与浅拷贝 问题引入切片拷贝是深还是浅&#xff1f;深拷贝和浅拷贝到底有啥区别&#xff1f;本文小结 问题引入 Python实现中&#xff0c;最近遇到个小问题&#xff0c;对其中的拷贝理解更深了些&a…...

vue3实现el-table的拖拽

我这里使用的是 sortablejs 插件; 安装命令: npm install sortablejs --save 注意点: 你的表格数据中要有id作为key去使用; <div class"draggable"><el-table row-key"id" :data"form.tableData" style"width: 100%" max-…...

Apache SSI 远程命令执行漏洞

目录 1、漏洞描述 2、访问页面 3、dirsearch工具爆破出上传目录 ​编辑 4、登录后台 5、上传shell.shtml一句话木马文件 6、拿到flag 1、漏洞描述 在测试任意文件上传漏洞的时候&#xff0c;目标服务端可能不允许上传php后缀的文件。如果目标服务器开启了SSI与CGI支持&a…...

高效集成:将聚水潭数据导入MySQL的实战案例

聚水潭数据集成到MySQL&#xff1a;店铺信息查询案例分享 在数据驱动的业务环境中&#xff0c;如何高效、准确地实现跨平台的数据集成是每个企业面临的重要挑战。本文将聚焦于一个具体的系统对接集成案例——将聚水潭的店铺信息查询结果集成到MySQL数据库中&#xff0c;以供BI…...

Elasticsearch面试内容整理-面试注意事项

在准备 Elasticsearch 面试时,除了掌握技术知识外,还需要注意如何有效展示你的技能和经验。以下是一些 Elasticsearch 面试的注意事项和建议: 掌握基础概念 在面试中,面试官通常会首先评估你对 Elasticsearch 基础概念的理解,包括集群架构、分片、副本、节点类型等。这些是…...

学习threejs,使用specularMap设置高光贴图

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.MeshPhongMaterial高…...

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…...

Cypress内存溢出奔溃问题汇总

内存溢出报错信息 <--- Last few GCs ---> [196:0xe58001bc000] 683925 ms: Scavenge 1870.7 (1969.9) -> 1865.6 (1969.9) MB, 6.07 / 0.00 ms (average mu 0.359, current mu 0.444) task; [196:0xe58001bc000] 683999 ms: Scavenge 1872.4 (1969.9) -> 1867.1…...

debian 11 虚拟机环境搭建过坑记录

目录 安装过程系统配置修改 sudoers 文件网络配置换源安装桌面mount nfs 挂载安装复制功能tab 无法补全其他安装 软件配置eclipse 配置git 配置老虚拟机硬盘挂载 参考 原来去 debian 官网下载了一个最新的 debian 12&#xff0c;安装后出现包依赖问题&#xff0c;搞了半天&…...

【k8s深入学习之 event 记录】初步了解 k8s event 记录机制

event 事件记录初始化 一般在控制器都会有如下的初始化函数&#xff0c;初始化 event 记录器等参数 1. 创建 EventBroadcaster record.NewBroadcaster(): 创建事件广播器&#xff0c;用于记录和分发事件。StartLogging(klog.Infof): 将事件以日志的形式输出。StartRecording…...

InterHub:为自动驾驶提供密集互动事件的自然驾驶轨迹数据集

InterHub 是一个为自动驾驶领域设计的自然驾驶轨迹数据集&#xff0c;它通过深入挖掘自然驾驶记录中的密集互动事件而构建。 InterHub 的特点在于其形式化的方法&#xff0c;这使得数据集能够精确描述和提取多智能体之间的互动事件&#xff0c;揭示了现有自动驾驶解决方案的局限…...

鸿蒙Next星河版基础用例

目录&#xff1a; 1、鸿蒙箭头函数的写法2、鸿蒙数据类型的定义3、枚举的定义以及使用4、position绝对定位及层级zIndex5、字符串的拼接转换以及数据的处理(1)字符串转数字(2)数字转字符串(3)布尔值转换情况(4)数组的增删改查 6、三元表达式7、鸿蒙for循环的几种写法7.1、基本用…...

ScribblePrompt 医学图像分割工具,三种标注方式助力图像处理

ScribblePrompt 的主要目标是简化医学图像的分割过程&#xff0c;这在肿瘤检测、器官轮廓描绘等应用中至关重要。相比依赖大量人工标注数据&#xff0c;该工具允许用户通过少量输入&#xff08;例如简单的涂鸦或点位&#xff09;来引导模型优化分割结果。这种方式减少了医学专家…...

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型

PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型 目录 PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.PKO-LSSVM-Adaboost班翠鸟优化最小二乘支持向量机结合AdaBoost分类模…...

5G学习笔记之随机接入

目录 1. 概述 2. MSG1 2.1 选择SSB 2.2 选择Preamble Index 2.3 选择发送Preamble的时频资源 2.4 确定RA-RNTI 2.5 确定发送功率 3. MSG2 4. MSG3 5. MSG4 6. 其它 6.1 切换中的随机接入 6.2 SI请求的随机接入 6.3 通过PDCCH order重新建立同步 1. 概述 随机接入…...

爬虫专栏第二篇:Requests 库实战:从基础 GET 到 POST 登录全攻略

简介&#xff1a;本文聚焦 Requests 库的强大功能与应用实战。首先介绍其安装步骤及版本选择要点&#xff0c;随后深入讲解 GET 请求&#xff0c;以百度页面为例&#xff0c;展示如何发起基本 GET 请求、巧妙添加 headers 与参数以精准搜索&#xff0c;以及正确设置 encoding 避…...

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…...

鸿蒙技术分享:Navigation页面管理-鸿蒙@fw/router框架源码解析(二)

本文是系列文章&#xff0c;其他文章见&#xff1a; 鸿蒙fw/router框架源码解析&#xff08;一&#xff09;-Router页面管理 鸿蒙fw/router框架源码解析&#xff08;三&#xff09;-Navigation页面容器封装 鸿蒙fw/router框架源码解析&#xff08;四&#xff09;-路由Hvigor插件…...

数据结构:树

树的基本定义&#xff1a; 树是一种数据结构&#xff0c;它是由n&#xff08;n>1&#xff09;个有限节点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; …...

矩阵sum,prod函数

s u m sum sum表示求和, p r o d prod prod表示求乘积 s u m sum sum函数 对于矩阵&#xff0c;可以对某一行或某一列求和&#xff0c;也可以对矩阵整体求和 s u m ( a , 1 ) sum(a,1) sum(a,1)计算每一列的和 s u m ( a , 2 ) sum(a,2) sum(a,2)计算每一行的和 计算矩阵整体…...

Cursor安装与使用,5分钟完成需求

Cursor简单介绍 Cursor是一款基于AI的代码编辑器&#xff0c;旨在帮助开发者更高效地编写和管理代码。它提供了智能代码补全、AI对话和跨文件编辑等创新功能。 一、安装下载 1、下载cursor&#xff1a;https://www.cursor.com/ 2、注册账号&#xff0c;直接拿自己的邮箱登录…...

嵌入式系统应用-LVGL的应用-平衡球游戏 part1

平衡球游戏 part1 1 平衡球游戏的界面设计2 界面设计2.1 背景设计2.2 球的设计2.3 移动球的坐标2.4 用鼠标移动这个球2.5 增加边框规则2.6 效果图 3 为小球增加增加动画效果3.1 增加移动效果代码3.2 具体效果图片 平衡球游戏 part2 第二部分文章在这里 1 平衡球游戏的界面设计…...

Vue基本语法

Options API 选项式/配置式api 需要在script中的export default一个对象对象中可以包含data、method、components等keydata是数据&#xff0c;数据必须是一个方法&#xff08;如果是对象&#xff0c;会导致多组件的时候&#xff0c;数据互相影响&#xff0c;因为对象赋值后&…...

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …...

Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。

项目启动5分钟&#xff0c;很明显有问题。像网上其他的提高jvm参数就不说了&#xff0c;应该不是这个问题&#xff0c;也就快一点。 首先找到自己的电脑名称&#xff08;用命令行也行&#xff0c;只要能找到自己电脑名称就行&#xff0c;这里直接在共享里看&#xff09;。 复制…...

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…...

HickWall 详解

优质博文&#xff1a;IT-BLOG-CN 一、监控分类 【1】Tracing调用链&#xff1a; 【2】Logging日志&#xff1a; 【3】Metrics指标&#xff1a;在应用发布之后&#xff0c;会长时间存在的度量维度。某个接口的请求量、响应时间。 Metrics数据模型 二、Metirc 接入 【1】pom…...

开源的跨平台SQL 编辑器Beekeeper Studio

一款开源的跨平台 SQL 编辑器&#xff0c;提供 SQL 语法高亮、自动补全、数据表内容筛选与过滤、连接 Web 数据库、存储历史查询记录等功能。该编辑器支持 SQLite、MySQL、MariaDB、Postgres 等主流数据库&#xff0c;并兼容 Windows、macOS、Linux 等桌面操作系统。 项目地址…...

Linux应用层学习——Day4(进程处理)

system #include<stdio.h> #include<stdlib.h>int main(int argc, char const *argv[]) {//使用标准库函数创建子进程//int system (const char *__command);//const char *__command:使用linux命令直接创建一个子进程//return:成功返回0 失败返回失败编号int sys…...

起别名typedef

#include<stdio.h> //typedef int myType1; //typedef char myType2; typedef struct { int a; int b; }po; int main() { /*myType1 a5; myType2 bo; printf("%d\n",a); printf("%c\n",b);*/ po p;//不需要加struct关键…...

【Linux内核】ashmem pin/unpin

前言 在 Linux 内核的 ASHMEM&#xff08;Android Shared Memory&#xff09;实现中&#xff0c;pin 和 unpin 操作主要用于管理共享内存的生命周期和可用性。这些操作有助于确保在内存使用期间&#xff0c;特定的共享内存区域不会被回收或释放。 Pin 操作 定义 Pin 操作用…...

【docker】docker网络六种网络模式

Docker 网络模式总结 网络模式描述使用场景bridge默认的网络模式&#xff0c;容器之间通过虚拟网桥通信&#xff0c;容器与宿主机隔离。单机部署、本地开发、小型项目host容器与宿主机共享网络堆栈&#xff0c;容器直接使用宿主机的 IP 地址。高性能网络应用、日志处理、大量与…...

永磁同步电机谐波抑制算法(11)——基于矢量比例积分调节器(vector PI controller,VPI controller)的谐波抑制策略

1.前言 相比于传统的谐振调节器&#xff0c;矢量比例积分调节器&#xff08;vector PI controller&#xff0c;VPI controller&#xff09;多一个可调零点&#xff0c;能够实现电机模型的零极点对消。因此VPI调节器也被广泛应用于交流控制/谐波抑制中。 2.参考文献 [1] A. G…...

排序算法中稳定性的意义和作用

多关键字排序&#xff1a;当需要对数据进行多个关键字排序时&#xff0c;稳定性变得非常重要。例如&#xff0c;先按次要关键字排序&#xff0c;再按主要关键字排序。如果排序算法是稳定的&#xff0c;那么在按主要关键字排序后&#xff0c;次要关键字的顺序将被保留。保持关联…...

网站怎么防御https攻击

HTTPS攻击&#xff0c;它不仅威胁到网站的数据安全&#xff0c;还可能影响用户隐私和业务稳定运行。 HTTPS攻击主要分为以下几种类型&#xff1a; 1.SSL劫持&#xff1a;攻击者通过中间人攻击手段&#xff0c;篡改HTTPS流量&#xff0c;从而实现对数据的窃取或伪造。 2.中间人攻…...

gitignore 不起作用

.gitignore不起作用 文件已提交至远程仓库&#xff0c;已经被Git跟踪。清除缓存.gitignore位置可能不是与 .git隐藏文件夹同级目录。将文件移至同级目录缓存未清除 清除缓存 清楚git缓存步骤 进入项目路径 清除本地当前的Git缓存 git rm -r --cached . 应用.gitignore等本地…...

Hive学习基本概念

基本概念 hive是什么&#xff1f; Facebook 开源&#xff0c;用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…...

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程

在 Ubuntu 使用 fonts-noto-cjk 设置 Matplotlib 支持中文的完整教程 1. 为什么需要配置中文字体&#xff1f;2. 安装 fonts-noto-cjk安装命令&#xff1a;检查字体安装是否成功 3. 配置 Matplotlib 支持中文3.1 手动加载字体3.2 设置全局字体&#xff08;可选&#xff09;修改…...

《C++ Primer Plus》学习笔记|第10章 对象和类 (24-12-2更新)

文章目录 10.3 类的构造函数和析构函数10.3.2 使用构造函数显式地调用构造函数隐式地调用构造函数使用对象指针 10.3.3默认构造函数10.3.4 析构函数析构函数示例 10.4 this指针三个const的作用 10.5 对象数组10.6 类作用域10.9 复习题1.什么是类&#xff1f;2.类如何实现抽象、…...

SpringMVC接收数据

一、访问路径设置: RequestMapping注解的作用就是将请求的URL地址和处理请求的方式(handler方法)关联起来&#xff0c;建立映射关系;SpringMVC接收到指定的请求&#xff0c;就会来找到在映射关系中对应的方法来处理这个请求 1.精准路径匹配: 在RequestMapping注解指定URL地址…...

Python数组拆分(array_split())

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Git 使用总结

下载 git bash&#xff1a;http://git-scm.com/download/win 第一次使用 git 时&#xff0c;配置用户信息&#xff1a; git config --global user.email "your.emailexample.com" 从github仓库中下载项目到本地&#xff0c;修改后重新上传&#xff1a; git clone 项…...

NaviveUI框架的使用 ——安装与引入(图标安装与引入)

文章目录 概述安装直接引入引入图标样式库 概述 &#x1f349;Naive UI 是一个轻量、现代化且易于使用的 Vue 3 UI 组件库&#xff0c;它提供了一组简洁、易用且功能强大的组件&#xff0c;旨在为开发者提供更高效的开发体验&#xff0c;特别是对于构建现代化的 web 应用程序。…...