【计算机网络】HTTP协议详解实战抓包分析教程

文章目录

  • 1.HTTP简介
  • 2.HTTP报文的结构
  • 3.HTTP协议中空行的作用
  • 4.uri和url的区别
  • 5.HTTP请求
    • 5.1 HTTP请求方法
    • 5.2 HTTP请求报头
  • 6.HTTP响应
    • 6.1 状态码
  • 7.HTTP位于应用层(基于TCP)
  • 8.非持久和持久连接
    • 8.1 非持久连接
    • 8.2 持久连接

1.HTTP简介

HTTP(Hypertext Transfer Protocol)即超文本传输协议,是互联网上应用最为广泛的一种网络协议,主要用于从WWW服务器传输超文本到本地浏览器的传输协议。它是基于客户端-服务器模型的,目的是允许浏览器(或其他HTTP客户端)从Web服务器请求资源,并且服务器能够将这些资源传回给客户端。

主要特性:

  • 无状态:HTTP协议是无状态的,这意味着每个请求都是独立的,服务器不保留关于客户的任何信息(如 cookies 可以用来维护会话状态)。
  • 媒体独立:可以传输任意类型的数据对象,不限于文本,图像、视频等多媒体文件同样可以传输。
  • 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。常用的方法有GET、POST等。
  • 灵活:HTTP允许传输数据的内容类型多样,通过Content-Type加以标记。
  • 无连接:限制每次连接只处理一个请求,之后连接就会关闭,但实际应用中常通过Keep-Alive机制保持连接打开,以便多个请求复用。

2.HTTP报文的结构

大家应该都听说过HTTP请求和HTTP响应.因此HTTP报文也分为请求报文和响应报文,但是请求报文和响应报文的结构是一样的.
如图:
image-20240509233021387
请求报文和响应报文虽然结构是一样的,但是报文首部是不同的

在请求报文中,HTTP报文首部是由方法,URI,HTTP版本和HTTP首部字段构成

image-20240509234659100

在响应报文中,HTTP报文首部是由HTTP版本,状态码和HTTP首部字段构成

image-20240509234458286

3.HTTP协议中空行的作用

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者

是 “报头和正文之间的分隔符”.

HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.

4.uri和url的区别

URI(Uniform Resource Identifier,统一资源标识符)和URL(Uniform Resource Locator,统一资源定位符)都是用于标识网络资源的字符串,但它们在概念和用途上有所区别:

  1. URI 是一个更广泛的概念,它是用于标识互联网上或计算机系统中任何资源的字符串。URI 包括了定位资源的地址(即URL),也包括仅用于命名或识别资源但不提供直接访问方式的标识符(例如URN,Uniform Resource Name)。URI 的目的是确保每一个资源都有一个唯一的标识,无论这个资源是可以获取的还是仅仅被命名的。
  2. URL 是 URI 的一个子集,它是一种特定类型的 URI,不仅标识了资源,还提供了定位和访问该资源的方法。URL 包含了访问资源所需的全部信息,比如协议类型(http、https)、主机名、路径(/path/to/resource)以及可能的查询字符串(?key=value)等。简而言之,当你能通过某个地址在互联网上找到一个资源时,那个地址就是一个以及可能的查询字符串(?key=value)等。简而言之,当你能通过某个地址在互联网上找到一个资源时,那个地址就是一个) URL。

总结来说,所有 URL 都是 URI,因为它们都能标识资源,但不是所有的 URI 都是 URL,有的 URI 只是用来命名资源而不提供定位信息(例如URN)。在实际应用中,我们通常所说的网址就是 URL,它是 URI 实际应用中最常见的一种形式。

5.HTTP请求

5.1 HTTP请求方法

HTTP协议定义了一系列请求方法,用于指示客户端希望服务器对资源执行的操作。以下是HTTP/1.1中定义的8种主要请求方法,每种方法都有其特定的用途和特点:

  1. GET:用于请求指定的资源。请求的数据会附加在URL(query string)之后,以查询字符串的形式传递。GET请求是最常见的,用于获取资源,应是安全和幂等的。
  2. POST:用于向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据包含在请求正文(body)中,POST请求不是幂等的,多次请求可能会产生不同结果。
  3. PUT:用于替换指定资源的全部内容。客户端提供更新后的资源,要求服务器存储。此方法是幂等的,多次执行具有相同效果。
  4. DELETE:请求服务器删除指定的资源。此方法也是幂等的,多次请求删除同一资源的结果是一致的。
  5. HEAD:类似于GET方法,但服务器只返回响应头,不返回响应主体,用于检查资源的存在性、类型、大小等元数据,而不需要传输整个内容。
  6. OPTIONS:用于获取服务器支持的HTTP请求方法和其他通信选项,可用于检测服务器功能或测试权限。
  7. TRACE:客户端发送一个请求,服务器会将收到的请求原样返回,主要用于诊断和测试目的,查看请求在到达服务器前经过的路径上的改动。
  8. CONNECT:用于建立一个到由目标资源标识的服务器的TCP连接通道,通常用于代理服务器中,实现对HTTPS等需要通过隧道协议进行安全传输的请求。

关于Query String和Param(Parameters)

  • 查询字符串(Query String)是指URL中跟在问号(?)后面的部分,用于携带额外的信息,特别是作为HTTP GET请求的一部分传递参数给服务器。它由一系列键值对组成,键值对之间用等号(=)连接,不同的键值对之间用和号(&)分隔。例如,在URL https://example.com/search?q=query+term&sort=date 中,q=query+termsort=date 就是查询字符串中的两个参数。

  • 参数(Params)是查询字符串中具体键值对的统称。在上述例子中,qsort 是参数名,query+termdate 是对应的参数值。这些参数让服务器知道客户端请求的具体细节,比如搜索关键词、排序方式等。

5.2 HTTP请求报头

HTTP请求报头(Request Headers)是一系列键值对,位于请求行之后,请求主体之前,每一行代表一个报头字段。

以下是我用Fiddler抓的一个包

image-20240510142355886

具体内容如下:

GET https://www.baidu.com/ HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
sec-ch-ua: "Chromium";v="124", "Microsoft Edge";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cookie: BIDUPSID=DD7326D9CB3E780AE232E272F9988EF1; PSTM=1700320963; BAIDUID=CB65E88DF6D23B274067D86F39E33F91:FG=1; H_WISE_SIDS=40171_40369_40376_40398_40416_40305_40458_39662_40511_40512_60044_60026_60035_60048_60058; H_WISE_SIDS_BFESS=40171_40369_40376_40398_40416_40305_40458_39662_40511_40512_60044_60026_60035_60048_60058; BAIDUID_BFESS=CB65E88DF6D23B274067D86F39E33F91:FG=1; COOKIE_SESSION=130_0_8_3_5_14_1_1_8_6_1_3_56_0_0_0_1713166585_0_1713181572%7C9%23580281_10_1665372810%7C4; BAIDU_WISE_UID=wapp_1713714319309_20; H_PS_PSSID=40305_40080_60138_60186; BDUSS=2R5UzNPZzZ3ai1kNVlXcEZjVWc4ZnctT3ZVRmdGQllvOXpCb0JZNGljanFmMWxtRVFBQUFBJCQAAAAAAAAAAAEAAAA1MYH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOryMWbq8jFmc; BDUSS_BFESS=2R5UzNPZzZ3ai1kNVlXcEZjVWc4ZnctT3ZVRmdGQllvOXpCb0JZNGljanFmMWxtRVFBQUFBJCQAAAAAAAAAAAEAAAA1MYH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOryMWbq8jFmc; ZFY=DAt6xuFJrVO9Vof3C8Wq3xMauOxCp4CYAj4HYxdRdyg:C

第一行GET https://www.baidu.com/ HTTP/1.1是方法,URI,HTTP版本.就不多说了

  • Host: www.baidu.com:请求的服务器的域名和(可选的)端口号,用于虚拟主机的识别。没写端口就是默认值
    • HTTP默认端口是80
    • HTTPS默认端口是443

Content-Length和Content-Type在请求中不一定存在(请求没有body(GET请求)情况下就不存在),像上面我抓的这个包就是GET请求,里面就没有这两个字段.它们俩是成对出现的,只要有其中一个,另一个必定存在.

  1. Content-Length: 当请求包含实体内容时,表示实体内容的字节大小,有助于服务器正确处理请求体。
  2. Content-Type: 描述请求主体的MIME类型,如 application/x-www-form-urlencoded 表示表单数据,multipart/form-data 用于文件上传。application/json 表示数据为 json 格式
  • User-Agent: 客户端的用户代理信息,包括浏览器类型、版本、操作系统等,帮助服务器提供定制化的响应或统计分析。
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0

分析图:

image-20240510144930879

  • Referer: 发起请求的页面地址,用于追踪用户是从哪个页面链接过来的。这个在HTTP请求头中可有可没有

  • Cookie: 发送给服务器的Cookie信息,用于维持用户会话状态或个性化设置,是浏览器本地数据存储的一种机制。

Cookie: BIDUPSID=DD7326D9CB3E780AE232E272F9988EF1; PSTM=1700320963; BAIDUID=CB65E88DF6D23B274067D86F39E33F91:FG=1; H_WISE_SIDS=40171_40369_40376_40398_40416_40305_40458_39662_40511_40512_60044_60026_60035_60048_60058; H_WISE_SIDS_BFESS=40171_40369_40376_40398_40416_40305_40458_39662_40511_40512_60044_60026_60035_60048_60058; BAIDUID_BFESS=CB65E88DF6D23B274067D86F39E33F91:FG=1; COOKIE_SESSION=130_0_8_3_5_14_1_1_8_6_1_3_56_0_0_0_1713166585_0_1713181572%7C9%23580281_10_1665372810%7C4; BAIDU_WISE_UID=wapp_1713714319309_20; H_PS_PSSID=40305_40080_60138_60186; BDUSS=2R5UzNPZzZ3ai1kNVlXcEZjVWc4ZnctT3ZVRmdGQllvOXpCb0JZNGljanFmMWxtRVFBQUFBJCQAAAAAAAAAAAEAAAA1MYH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOryMWbq8jFmc; BDUSS_BFESS=2R5UzNPZzZ3ai1kNVlXcEZjVWc4ZnctT3ZVRmdGQllvOXpCb0JZNGljanFmMWxtRVFBQUFBJCQAAAAAAAAAAAEAAAA1MYH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOryMWbq8jFmc; ZFY=DAt6xuFJrVO9Vof3C8Wq3xMauOxCp4CYAj4HYxdRdyg:C

我们也可以在浏览器中看到有哪些cookie数据

image-20240510145718964

请求报头有很多,还有其它的一些如下所示:

  1. Accept: 指定客户端能够接收的内容类型(MIME类型),例如 text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,表示优先接收HTML,然后是XML,最后是任何类型。
  2. Accept-Encoding: 客户端支持的内容编码方式,如gzip、deflate等,用于请求压缩内容以减少传输量。
  3. Accept-Language: 客户端期望接收的内容语言,如 en-US,en;q=0.5 表示首选英语(美国),其他英语也接受,但优先级较低。
  4. Authorization: 用于HTTP身份验证,包含用户的认证信息,如 Basic YWxhZGRpbjpvcGVuc2VzYW1lBearer your_token_here
  5. Cache-Control: 控制请求和响应的缓存机制,如 no-cache 表示不要使用缓存副本,必须从服务器重新获取。
  6. Connection: 指示对于当前事务完成后,是否关闭网络连接还是继续保持打开状态,如 keep-alive 表示持久连接。
  7. If-Modified-Since: 客户端缓存的资源最后修改时间,询问服务器资源是否有更新,用于条件请求。

6.HTTP响应

下图是刚才HTTP请求的响应报文

image-20240510151452242

内容如下:

HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;
Content-Type: text/html; charset=utf-8
Date: Fri, 10 May 2024 07:14:05 GMT
Isprivate: 1
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=40305_40080_60138_60237_60270_60275; path=/; expires=Sat, 10-May-25 07:14:05 GMT; domain=.baidu.com
Traceid: 1715325245044552423416257137435173222985
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Transfer-Encoding: chunked

HTTP/1.1 200 OK:表示HTTP版本,状态码.

6.1 状态码

HTTP状态码是由三位数字组成的代码,服务器通过这些代码来告知客户端关于HTTP请求的状态。

  • 1xx (Informational - 信息性状态码): 这些状态码表示接收的请求正在处理,通常客户端不需要对它们做出进一步的动作。例如,100 Continue 表示客户端应继续其请求。
  • 2xx (Successful - 成功状态码): 表示请求已成功被服务器接收、理解,并接受了。最常见的状态码是 200 OK,表示请求已成功处理。
  • 3xx (Redirection - 重定向状态码): 表示需要客户端采取进一步的操作才能完成请求。例如,301 Moved Permanently 表示请求的资源已被永久移动到了新的URL。
  • 4xx (Client Error - 客户端错误状态码): 这类状态码指出客户端的请求有误,服务器无法处理。最熟知的例子是 404 Not Found,意味着请求的资源未找到。
  • 5xx (Server Error - 服务器错误状态码): 表示服务器在处理请求时发生错误。例如,500 Internal Server Error 指服务器遇到了未知错误,无法完成请求。

状态码有很多,熟悉常见的即可:

状态码含义
200 (OK)成功
301 永久重定向请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。
302 临时重定向与301类似。但资源只是临时被移动。客户端应继续使用原有URI
403 阻止访问客户端已知但没有访问权限
404 Not Found未找到请求的资源
405 方法不被允许不支持使用的请求方法,例如,表单需要使用 POST 但使用 GET 代替。
500 内部服务器错误服务器遇到某种问题、并且没有更好或更具体的错误代码
504 网关超时服务器处于请求中间状态。但是没有收到来自它路由到的服务器的及时响应

7.HTTP位于应用层(基于TCP)

HTTP(超文本传输协议)位于TCP/IP模型的应用层。这意味着它是建立在传输层协议之上,特别是基于TCP(传输控制协议)来实现数据的传输。TCP是一种面向连接的、可靠的传输协议,它保证了数据包的顺序传输和错误校验,确保数据的完整性。HTTP利用TCP提供的这些特性来确保从Web服务器到客户端(如浏览器)的请求和响应能够准确无误地传达。

当一个HTTP请求从客户端发出时,首先会通过TCP建立一个从客户端到服务器的连接(这通常涉及到TCP的三次握手过程)。接着,HTTP请求消息通过这个TCP连接发送到服务器,服务器处理请求后,再通过同一个TCP连接将HTTP响应消息返回给客户端。一旦数据交换完成,TCP连接可以被断开.

8.非持久和持久连接

HTTP协议中的非持久连接(Nonpersistent Connections)和持久连接(Persistent Connections)主要区别在于它们管理TCP连接的方式以及如何处理连续的请求和响应。

8.1 非持久连接

在HTTP的早期版本中,如HTTP/1.0,默认使用非持久连接。在这种模式下:

  • 每个HTTP请求/响应事务都使用一个新的TCP连接。
  • 服务器发送完响应后立即关闭TCP连接,不保留任何状态。
  • 如果客户端需要请求多个资源(如图片、CSS文件等),每一个都需要独立建立和关闭TCP连接,这导致了较高的延迟,因为每次连接都需要进行TCP的三次握手和四次挥手过程。
  • 这种方式增加了网络负担,因为每个连接都需要分配系统资源,且每次请求都包含了TCP连接的建立和拆除开销。

8.2 持久连接

随着HTTP协议的发展,特别是在HTTP/1.1中,持久连接成为了默认行为,显著提高了效率:

  • 一个TCP连接可以用于发送多个HTTP请求和接收多个响应,而不是每个请求都新建连接。
  • 服务器在发送完一个响应后,保持TCP连接的开启状态,允许同一个客户端发送额外的请求。
  • 这种模式减少了建立和关闭连接的开销,提高了整体性能,降低了延迟,特别是在请求多个资源的场景下更为明显。
  • 持久连接有两种形式:
    • 无流水线(Non-pipelined)持久连接:客户端需等待前一个请求的响应到达后,才能发送下一个请求。每个对象传输大约需要1个RTT(往返时间)。
    • 流水线(Pipelining)持久连接:理论上允许客户端在收到前一个响应之前发送多个请求,这样可以进一步减少延迟,但在实践中由于存在一些问题(如头部阻塞)并未广泛使用。

HTTP协议版本:

  • HTTP/1.0:较早的版本,每次请求响应都会建立新的TCP连接。
  • HTTP/1.1:引入了持久连接(Keep-Alive),提高了效率,支持管道化处理请求。
  • HTTP/2:进一步优化性能,支持多路复用、二进制分帧、头部压缩等特性。
  • HTTP/3:基于QUIC传输协议,改善了延迟和安全性,特别是在高延迟或不可靠的网络环境中。

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

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

相关文章

pandas style添加表格边框,或是只添加下边框等自定义边框样式设置

添加表格边框 可以使用如下程序添加表格: import dataframe_image as dfi import pandas as pd import numpy as npdf pd.DataFrame(np.random.random(size(10, 5))) df_style df.style.set_properties(**{text-align: center,border-color: black,border-width…

cubemx配置stm32f407VET6实现USB虚拟串口

背景: 最近做项目需要使用USB,一根数据线连接“mcu的板子”和“电脑”; 电脑上的串口助手通过USB线和mcu的USB通信; 原理图: 1)外围电路2)mcu引脚 软件实现: 1.cubemx配置USB_devic…

流程图用什么软件做?选择这4款,让工作事半功倍

流程图用什么软件做?流程图是一种直观、清晰的图形表示法,它通过节点、箭头和符号等元素,精确地展示出一系列步骤、决策点以及操作过程。这种图形化的呈现方式不仅简化了复杂信息的处理,还使得读者能够迅速把握整体流程&#xff0…

构建第一个ArkTS应用之@LazyForEach:数据懒加载

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。 接口…

上海交大携手阿里巴巴成立人工智能与系统联合实验室

5 月 8 日,上海交通大学电子信息与电气工程学院(简称电院)与阿里巴巴集团宣布共同成立人工智能与系统联合实验室(后称“联合实验室”),并在上海交大闵行校区举行了揭牌仪式。 上海交大电院副院长王贺升教授…

python实现图片模式转换成素描模式

欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.代码 三.使用 四.分析 一.前言 素描,是一种用线条来描绘物体、场景或人物的绘画方式,它可以是简单的线条勾勒,也可以是复杂的光影渲染。这种艺术形式主要依赖线条和明暗关系来表现形态、空

PyTorch进行CIFAR-10图像分类

本节将通过一个实战案例来详细介绍如何使用PyTorch进行深度学习模型的开发。我们将使用CIFAR-10图像数据集来训练一个卷积神经网络。 神经网络训练的一般步骤如图5-3所示。 (1)加载数据集,并做预处理。 (2)预处理后的…

sin^2(x) 的图像

[TOC](sin^2(x) 的图像) 正文 这里记录一下 s i n 2 x sin^2{x} sin2x 的图像。 函数值以正弦的形式在 [0, 1] 区间内波动。 如果大家觉得有用,就点个赞让更多的人看到吧~

嵌入式文件系统

嵌入式文件系统 文件系统简介 在计算机系统中, 需要用到大量的程序和数据, 它们大部分以文件的形式存放在外部存储当中, 根据需要可随时调入内存使用 如果用户直接管理外存文件所面临的问题: 必须熟悉外存的物理特性了解各种存…

英语新概念2-回译法-lesson14

第一次回译 I had a amusing experience. I kept driving to the next town when I left a small village in the south of Franch.A teenager waved to me in the path.I stopped my car, he asked me to give him a lift.As soon as he get my car,I say good morning in Fr…

【Kubernetes】污点、容忍度、亲和性、调度和重启策略

标签、污点、容忍度、亲和性 一、标签1、定义2、给资源打标签【1】给Pod打标签【2】给Service打标签【3】给Node打标签 3、查看资源标签 二、节点选择器1、nodeName2、nodeSelector 三、污点、容忍度、亲和性1、node节点亲和性【1】硬亲和性【2】软亲和性 2、pod节点亲和性【1】…

安泰电子电压放大器应用及示例是什么样的

电压放大器是电子电路中常用的一种器件,用于将输入信号的电压放大至所需的输出电压。它在许多领域中有着重要的应用,包括通信、音频放大、仪器测量等。以下是电压放大器的一些应用及示例: 信号处理:在许多电子系统中,需…

Kasawaki川崎机器人故障维修

在当今的自动化工业领域,川崎工业机器人以其卓越的性能和可靠的工作效率赢得了广泛的赞誉。作为机器人的核心组成部分,伺服电机的作用至关重要。然而,就像所有机械设备一样,也可能会遭遇电机磨损或故障,需要适时的川崎…

vue自定义权限指令

定义v-hasPermi指令 /*** v-hasPermi 操作权限处理*/import useUserStore from /store/modules/userexport default {mounted(el, binding, vnode) {const { value } bindingconst all_permission "*:*:*";const permissions useUserStore().permissions&#xff…

linux - 搭建部署ftp服务器

ftp 服务: 实现ftp功能的一个服务,安装vsftpd软件搭建一台ftp服务器 ftp协议: 文件传输协议 (file transfer protocol),在不同的机器之间实现文件传输功能, 例如 视频文件下载,源代码文件下载 公司内部:弄一个专门的文件服务器,将公司里的文档资料和视频都存放…

基于死区补偿的永磁同步电动机矢量控制系统simulink仿真模型

整理了基于死区补偿的永磁同步电动机矢量控制系统simulink仿真,该模型使用线性死区补偿的PMSM矢量控制算法进行仿真,使用Foc电流双闭环 。 1.模块划分清晰,补偿前后仿真有对比,易于学习; 2.死区补偿算法的线性区区域可调; 3.自…

5.13网络编程

只要在一个电脑中的两个进程之间可以通过网络进行通信那么拥有公网ip的两个计算机的通信是一样的。但是一个局域网中的两台电脑上的虚拟机是不能进行通信的,因为这两个虚拟机在电脑中又有各自的局域网所以通信很难实现。 socket套接字是一种用于网络间进行通信的方…

Python接口自动化测试之动态数据处理

在前面的知识基础上介绍了在接口自动化测试中,如何把数据分离出来,并且找到它的共同点,然后依据这个共同点来找到解决复杂问题的思想。我一直认为,程序是人设计的,它得符合人性,那么自动化测试的&#xff0…

自由职业是种怎样的体验?普通人如何成为一名自由职业者?

自由职业在哪都能办公自由职业在哪都要办公。 放弃幻想,没有不辛苦的工作,5年经验后端开发程序员,已经从事自由职业1年半,今天就来客观分享一下自由职业的利与弊。 时间自由,减少中间商赚差价 自由职业最让人羡慕的就…

React Native 开发心得分享

有一段时间没更新了,花了点时间研究了下 React Native(后续用 RN 简称),同时也用该技术作为我的毕设项目(一个校园社交应用,仿小红书),经过了这段时间的疯狂折腾,对 RN 生态有了一定的了解&…