【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
本文专栏:Linux网络编程
目录
一,状态码
重定向状态码
1,永久重定向(301 Moved Permanently)
2,临时重定向(302 Found)
二,常见请求方法
1,HTTP常见Header
2,GET方法
3,POST方法
4,总结
3,session
4,总结
源码
一,状态码
HTTP状态码:是服务器响应客户端请求时返回的三位数字代码,用于表示请求的处理结果。
以下列举几种常见状态码的表格:
状态码 | 含义 | 应用样例 |
100 | Continue | 表示请求已接受,需要继续处理。例如,上传大文件时,服务器告诉客户端可以继续上传。 |
200 | OK | 表示请求已被成功处理 |
201 | Create | 资源创建成功。例如,发布新文章,服务器返回文章创建成功的信息 |
204 | Not Content | 删除文章后,服务器返回“无内容”表示操作成功 |
301 | Moved Permanently | 网站更换域名后,自动跳转到新的域名。搜索引擎更换网站链接时使用 |
302 | Found或 See Other | 用户登录成功后,自动跳转到用户首页 |
304 | Not Midified | 浏览器缓存机制 |
400 | Bad Request | 填写表单时,格式不正确导致的错误 |
401 | Unauthorized | 访问需要登陆的页面时,未登录或者认证失败 |
404 | Not Found | 访问的链接不存在 |
500 | Internal Server Error | 服务器崩溃或数据库错误导致页面无法加载 |
502 | Bad Gateway | 使用代理服务器时,收到无效响应 |
503 | Service Unavaliable | 服务不可用(维护中或过载) |
重定向状态码
- 关于重定向相关的状态码,可以大概分为两类,永久重定向和临时重定向。
- 在本文中以301永久重定向和302临时重定向为例,进行讨论。
- 简单的理解重定向,就是当我们想访问一个网址时,会跳转到其他的网址。
具体看下图:
当使用浏览器访问s1时,接收到s1发送的应答报文,发现它的状态码是30x(301或者302),就知道是需要重定向到新的网址,新的网址是报文中Location后面的内容。提取到到新的网址后,浏览器会发送二次请求访问新的网址。这就是重定向的大致过程。
1,永久重定向(301 Moved Permanently)
- 所谓永久重定向,就是我们想访问的资源的域名发生更改,当我们使用原网址进行访问的时候,会直接跳转到新的网址下。并且浏览器会更改内部的数据,用新的网址覆盖掉原来的网址,下次访问的时候就直接使用新的网址了。
- 永久重定向(301)的价值是用来给搜索引擎更新网站链接的。
- 在我们使用搜索引擎访问资源的时候,其实就是获取到目标资源的域名。但是如果有些域名发生改变,就可能会导致访问失败。
- 所以,对于搜索引擎,会不定时的向目标资源发送请求,当收到目标的应答时,如果发现报文中状态码是301,并且报文中包含Location: XXX选项。搜索引擎就会将自己内部保保存原来的域名用新的XXX域名替换掉,所以下次访问的时候,直接使用新的域名。
2,临时重定向(302 Found)
有了对永久重定向的理解,临时重定向就很简单。当我们访问一个网址时,会跳转到新的网址,最常见的就是我们用户的登录操作,当我们登录完成后,就会跳转到用户首页。而下次访问时,还是需要先访问登录页面。
二,常见请求方法
最常见的两种方法:GET和POST
- POST:上传资源,比如登录操作,需要上传我们的用户名和密码。
- GET:获取资源,获取网页,图片,视频等等各种资源。同时也可以上传资源。
1,HTTP常见Header
Content-Type:数据类型,就是正文部分的内容是什么类型的,html,css或者是纯文本等等类型
Content-Length:正文部分的长度
Host:客户端告诉服务器,所请求的资源在哪个主机的哪个端口上。
User-Agent:声明用户的操作系统的浏览器版本信息
refer:当前页面是从哪个页面跳转过来的
Location:在上面状态码部分提到过。告诉客户端接下来要去哪里访问。
Cookie:这个 内容在本文下面讲解。
其中需要注意的是Content-Type数据类型,当服务器端给客户端返回数据时,需要带上这个属性,告诉浏览器该怎么解释(其实也可以不用带了,因为现在的浏览器已经很强大了,可以解析出来)。关于Content-Type,有一张对照表:
链接:HTTP Content-type 对照表 | content type
比如如果正问部分为html格式,那么报头中应该包含 Content-Type:text/html
2,GET方法
- 方法部分需要配合代码才好理解。这里我写了一个简单的http服务器(源码在文章末尾),以该http服务器为例子来理解GET方法。
- 在服务器中设置了4个html网页:首页,登录页面,注册页面,404页面。
- 其中首页可以跳转到登录页面和注册页面。
当我们想要进入登录页面,进行登陆时会出现如下问题:
此时的uri内容是:
同时登录页面的html内容是:
可以得出结论:uri中?之前的部分表示http提供的服务,?之后的内容表示用户输入的参数。只不过现在我们的http服务器还没有实现这个服务,所以最后会进入404页面。
- 之前我们访问网页都是在访问呢静态资源,图片视频什么的。而现在需要实现login服务,也就是让我们的服务器实现动他交互的功能。
- 实现方法:在对浏览器发送过来的uri进行解析时,判断是否带有问号,如果带有问号,表示需要进行动态交互,然后提取服务名(也就是问号之前的参数),再提取用户上传的参数(?之后的内容)
当我们实现好后,添加一个登录的操作,这里只是简单的将用户输入的数据以纯文本的形式发送回去,将来我们继续登陆后,不会访问404页面,而是收到同样的数据,以文本的形式展示出来。
//实现login一个服务
void Login(HttpRequest& req,HttpResponse& resp)
{//构建resp的内容//这里直接将req的内容以纯文本的形式发送回去std::string text="hello :"+req.Args();resp.setCode(200);resp.setHeader("Content-Type","text/plain");resp.setHeader("Content-Length",std::to_string(text.size()));resp.setText(text);
}
在http协议基础之上,我们新增了一个Login服务,我们将来就可以使用域名+服务名来访问对应的服务,这就相当于http给我们提供了一种微服务的接口。这种风格的网络接口称为RESTful风格的网络接口。所以未来我们还可以新增各种服务接口。比如注册接口,统计在线人数接口等等。
最后,其实我们早就知道了,GET方法的提参是通过uri提交的。
3,POST方法
POST方法,我们看一段正文就可以知道了。
上面的报文是通过POST方法进行登录,可以发现再提交参数的时候,是将参数增加到正文部分的
4,总结
GET方法:
- 获取静态资源或者网页
- 提交参数,以uri形式提交
- GET提交参数一般不建议太长,因为uri长度是有限的
- GET传参,参数是会显示出来的。
POST方法:
- 提交参数,以正文部分参数
- 参数不会回显,相对私密
不管是GET还是POST,都是明文传送,可以抓取,是不安全的。
要做到真正的安全,必须要把报文进行加密,就要用到https协议。
三,cookie-session
1,cookie
HTTP协议是无连接,无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。
- HTTP底层是基于tcp的,所谓无连接,是指HTTP不管通信部分,只负责接受请求和发送应答的事情,连接是底层tcp管理的。所以说HTTP是无连接的。
- 无状态,是指当我们访问服务器时,服务器不会记录我们状态的信息。比如我们访问某个网页一次,就给我返回该网页一次。所以说是无状态的。(但实际上,为了提高效率,当我们访问一次后,浏览器会记录数据,下次访问时直接找浏览器拿即可)
有了上面的理解,看下面的一个例子:
如下图所示,当我们项访问某个网站资源时,需要登录认证 。
- 第一次登录认证成功后,会给我们返回网站首页。
- 拿到网站首页后,当我们想要访问某个资源时,就需要再次进行登录认证,因为HTTP是无状态的,他不会记录当前你这个用户是否登录过,所以需要再次登录认证。
- 那么从今往后,你每访问一个资源,就需要登录认证一次,这对用户的肯定不友好。
所以,为了解决上述问题,就引入了cookie功能。
在进行完一次认证操作后,服务器返回应答,应答报文中会包含Set-Cookie属性,记录用户输入的内容。浏览器检测到Set-Cookie属性,会将该部分内容保存下来,形成一个cookie文件,下次访问的时候直接携带该cookie文件,不需要再次认证了。
验证cookie的存在,以登录bilibili为例:
2,cookie问题
如果我们的电脑被植入了木马程序,那么黑客就可以获取到我们浏览器内的cookie文件。此时在他自己的电脑上访问同样的网站,使用我们的cookie,那么黑客就可以以我们的身份登录,访问服务器了。这样我们的账号就会被盗取,同时cookie中记录的私密数据(用户名,用户密码等等)也会泄漏。所以说,单纯使用cookie是不安全的。
总结一下,会存在两个问题:用户的账号丢失,用户的私密信息泄漏。
为了一定程度的解决该问题,就引入了session。
3,session
为了一定程度的解决上述问题,就引入了session
- 当我们登录认证成功后,我们输入的数据(用户名+密码),服务器端会生成一个session对象,来保存我们的密码和数据。然后给浏览器端返回一个session_id。下次访问时,直接携带cookie,cookie中保存了session_id,服务器端检查session_id是否存在即可。这样将用户的信息保存在服务器端,不保存在客户端,就解决了用户私密信息泄漏的问题。
- 而对于账号丢失的问题,不能完全解决,只能采取一定的辅助方案,比如溯源ip,地址的变更等等。比如,上次登录是在北京,5秒后再次登录,ip变为云南了,此时服务器就会检测到异常,将保存的session对象释放掉,要求用户重新登录,重新输入用户名和密码。就在一定程度上解决了这些问题。
4,总结
cookie和session:是用来负责会话管理与会话保持的。是HTTP的附加功能,不严格属于HTTP。
源码
myhttp2 · 小鬼/linux学习 - 码云 - 开源中国https://gitee.com/wang-junyanxx/linux-learning/tree/master/myhttp2
相关文章:
【Linux网络编程】http协议的状态码,常见请求方法以及cookie-session
本文专栏:Linux网络编程 目录 一,状态码 重定向状态码 1,永久重定向(301 Moved Permanently) 2,临时重定向(302 Found) 二,常见请求方法 1,HTTP常见Hea…...
ARM 指令集(ubuntu环境学习)第六章:ARM 编程技巧与优化策略
在本章中,我们将介绍一些在 ARM 架构上编写高效代码的技巧和常见优化策略,帮助您在嵌入式系统中获得更低延迟、更高吞吐和更低功耗。 6.1 寄存器利用与最小化内存访问 多用寄存器 ARM 通用寄存器(r0–r12)数量充足,尽量将临时变量保留在寄存器中,减少对内存的读写。 避免…...
柔性超声耦合剂的选择与设计-可穿戴式柔性超声耦合剂面临的难题
柔性PZT压电薄膜:破解可穿戴式超声耦合剂难题的关键材料! 随着可穿戴技术的快速发展,超声设备正朝着轻量化、柔性化和高集成度方向演进。在医学诊断、健康监测和智能穿戴领域,可穿戴式超声设备因其无创、实时、动态成像等优势受到…...
XCTF-pwn(二)
guess_num 看一下文件信息 利用gets函数将seed[0]给覆盖掉 距离0x20 我们需要输入十次随机数产生的值 写一个c程序先预判当seed是a的时候产生的随机数分别是多少 payload from pwn import* from ctypes import* context.log_leveldebugrremote("61.147.171.105", 6…...
AI外挂RAG:大模型时代的检索增强生成技术
目录 引言 一、RAG是什么? 二、RAG为什么会出现? 三、RAG的工作原理 四、RAG的技术优势 五、RAG的应用场景 六、RAG对AI行业的影响 七、RAG面临的挑战 引言 在人工智能领域,大型语言模型(LLM)如ChatGPT、DeepSe…...
SpringTask
Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 应用场景:信用卡每月还款提醒、火车票售票系统处理未支付订单 fixedDelay:上一次任务执行完成后多长时间(ms)执行下一次任务 fixe…...
Sphinx 文档图片点击放大
文章目录 问题描述解决方案步骤 1:创建 JavaScript 文件步骤 2:编写 JavaScript 代码步骤 3:更新 Sphinx 配置 高级定制为所有图片添加点击功能添加缩放控制 总结 在使用 Sphinx 生成技术文档时,我们经常需要在文档中嵌入截图和示…...
菜鸟之路Day29一一MySQL之DDL
菜鸟之路Day29一一MySQL之DDL 作者:blue 时间:2025.5.2 文章目录 菜鸟之路Day29一一MySQL之DDL0.概述1.DDL之数据库操作1.1查询1.2创建1.3使用1.4删除 2.DDL之表操作2.1创建表2.2数据类型2.3查询表2.4修改表结构2.5删除表 0.概述 文章内容学习自黑马程…...
架构师面试(三十七):监控系统架构模式
题目 监控是在产品生命周期的运维环节,能对产品的关键指标数据进行【实时跟踪】并对异常数据进行【实时报警】。 一句话描述,监控系统可以帮我们【主动预防和发现】业务系统中的问题。 我们常说,监控系统是 “粮草”,业务系统是…...
【Redis】Hash哈希
文章目录 注意个问题hset命令(核心)hget命令(核心)hexists命令hdel命令hkeys和hvals命令hgetall和hmget命令hlen命令hsetnx命令hincrby命令哈希命令小结哈希编码方式使用场景1.关系型数据表保存用户的信息Redis三种缓存方式对比1.…...
【SpringBoot】Spring中事务的实现:声明式事务@Transactional、编程式事务
1. 准备工作 1.1 在MySQL数据库中创建相应的表 用户注册的例子进行演示事务操作,索引需要一个用户信息表 (1)创建数据库 -- 创建数据库 DROP DATABASE IF EXISTS trans_test; CREATE DATABASE trans_test DEFAULT CHARACTER SET utf8mb4;…...
从零开始讲DDR(9)——AXI 接口MIG 使用(2)
一、前言 在之前的文章中,我们介绍了官方DDR MIG AXI接口的例程的整体框架,在本文中,我们将着重介绍例程中关于数据产生,及驱动到AXI接口的相关逻辑实现。 二、data_gen 在例程中,有ddr4_v2_2_8_data_gen这样一个文件…...
组件通信-props
props 是使用频率最高的一种通信方式,父>子 子>父 父传子:属性值 是非函数子传父:属性值 是函数 父组件 <script setup lang"ts"> import { ref } from vue import Child from ./Child.vue const car ref(奥迪) c…...
纯原生Java实现:获取整个项目中指定接口所有的实现类
不使用第三方,不使用属性文件,不指定包名,获取整个系统中某一个接口所有的实现类,纯Java实现 /*** 类查找器,用于扫描类路径中的所有类,并找出指定类的实现类。* 该类通过递归扫描类路径下的所有 .class 文件…...
反射机制补充
不同对象实例的地址不同 在 Java 里,每当使用 new 关键字创建一个对象时,JVM 会在堆内存中为该对象分配一块新的内存空间,每个对象实例都有自己独立的内存地址。所以不同的对象实例,其内存地址是不同的。 以下是一个简单示例&am…...
计算机视觉的未来发展趋势
计算机视觉的未来发展趋势主要集中在以下几个方面: 1. 自监督学习与少样本学习 自监督学习:通过从无标签的数据中提取有用特征,克服对大量标注数据的依赖。2025年,基于大规模图像数据的自监督预训练模型将更加成熟,能…...
轻量级网页版视频播放器
用deepseek开发的轻量级,网页版视频播放器 可以选择本地文件 可以播放、暂停、全屏、有进度条和时间进度 代码如下: 新建.txt文本文档,把代码复制粘贴进去,把.txt文档后缀名改为.html,用浏览器打开即可使用 <!DO…...
18. LangChain分布式任务调度:大规模应用的性能优化
引言:从单机到万级并发的进化 2025年某全球客服系统通过LangChain分布式改造,成功应对黑五期间每秒12,000次的咨询请求。本文将基于LangChain的分布式架构,详解如何实现AI任务的自动扩缩容与智能调度。 一、分布式系统核心指标 1.1 性能基准…...
C/C++工程师使用 DeepSeek
一、使用 DeepSeek 生成 C/C 代码 在 C/C 开发中,很多时候需要编写一些常见功能的代码,如排序算法、文件读写操作、数据结构的实现等。借助 DeepSeek,工程师只需用自然语言清晰描述需求,它就能依据大量的代码数据和深度学习算法&a…...
数据结构-线性结构(链表、栈、队列)实现
公共头文件common.h #define TRUE 1 #define FALSE 0// 定义节点数据类型 #define DATA_TYPE int单链表C语言实现 SingleList.h #pragma once#include "common.h"typedef struct Node {DATA_TYPE data;struct Node *next; } Node;Node *initList();void headInser…...
第 7 篇:跳表 (Skip List):简单务实的概率性选手
前面几篇我们都在探讨各种基于“树”结构的有序表实现,它们通过精巧的平衡策略(高度、颜色、大小)和核心的“旋转”操作来保证 O(log N) 的性能。今天,我们要介绍一位画风完全不同的选手——跳表 (Skip List)。它不依赖树形结构&a…...
sys目录介绍
文章目录 1. 前言2. 目录层次3. 目录介绍3.1 devices 目录3.2 block 目录3.3 bus 目录3.4 class 目录3.5 dev 目录3.6 firmware目录3.7 fs 目录3.8 kernel目录3.9 module 目录3.10 power 目录 sys目录介绍 1. 前言 linux 下一切皆文件,文件的类型也很多,…...
基于DQN的自动驾驶小车绕圈任务
1.任务介绍 任务来源: DQN: Deep Q Learning |自动驾驶入门(?) |算法与实现 任务原始代码: self-driving car 最终效果: 以下所有内容,都是对上面DQN代码的改进&#…...
源码安装SRS4
Ubuntu20安装好SRS后,(源码安装) 注意:在trunk目录SRS ./objs/srs -c conf/srs.conf 以上为启动srs命令,-c 为指定配置文件, 查看SRS进程 ps aux | grep srs 查看端口: netstat -ano | gre…...
OrbitControls
OrbitControls 3D虚拟工厂在线体验 描述 Orbit controls(轨道控制器)可以使得相机围绕目标进行轨道运动。 Constructor OrbitControls( object : Camera, domElement : HTMLDOMElement ) 参数类型描述objectCamera(必须)将要…...
【数据库】四种连表查询:内连接,外连接,左连接,右连接
在数据库操作中,连表查询是处理多表关联的核心技术。以下是四种主要连接方式的详细介绍、快速掌握方法及实际应用指南: 目录 **一、四种连表查询详解****1. 内连接(INNER JOIN)****2. 左连接(LEFT JOIN / LEFT OUTER J…...
Redis怎么避免热点数据问题
使用 RedisTemplate 避免热点数据问题的解决方案、场景及示例: 1. 数据分片(Sharding) 场景:高频读写的计数器(如文章阅读量统计) 原理:将数据分散到多个子键,降低单个 Key 的压…...
完整的 VS Code + CMake + Qt + GCC 项目构建方案:EXE 程序与多个 DLL 库
完整的 VS Code CMake Qt GCC 项目构建方案:EXE 程序与多个 DLL 库 在本文中,我们将介绍如何构建一个包含 EXE 程序和多个 DLL 库的项目,适用于 VS Code CMake Qt GCC 开发环境。这个方案为一个模块化的项目结构,使得代码清…...
Python 数据智能实战 (7):智能流失预警 - 融合文本反馈
写在前面 —— 不再错过关键预警!结合用户行为与 LLM 文本洞察,构建更精准的流失预测模型 在之前的探索中,我们学习了如何利用大语言模型 (LLM) 对用户评论进行深度挖掘,提取情感、发现主题,并将非结构化的文本信息转化为有价值的特征 (如 Embeddings)。 现在,我们要将…...
Flutter - 概览
Hello world ⌘ shift p 选择 Empty Application 模板 // 导入Material风格的组件包 // 位置在flutter安装目录/packages/flutter/lib/material.dart import package:flutter/material.dart;void main() {// runApp函数接收MainApp组件并将这个Widget作为根节点runApp(cons…...
Python-pandas-操作Excel文件(读取数据/写入数据)及Excel表格列名操作详细分享
Python-pandas-操作Excel文件(读取数据/写入数据) 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是pandas的使用语法。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】:每…...
手写 Vue 源码 === Vue3 设计思想
1.声明式框架 Vue3 是声明式的框架,用起来简单。 命令式和声明式区别 早在 JQ 的时代编写的代码都是命令式的,命令式框架重要特点就是关注过程声明式框架更加关注结果。命令式的代码封装到了 Vuejs 中,过程靠 vuejs 来实现声明式代码更加简单,不需要关注实现,按照要求填代…...
Android WebView加载h5打开麦克风与摄像头的权限问题
目录 快速处理 app向系统申请录音与相机权限h5向app申请录音和相机权限 详细解答 app权限与h5权限录音与麦克风默许的风险最佳实践 Android webview h5 麦克风权限,摄像头(相机)权限实现与填坑。 快速处理 app向系统申请录音与相机权限 …...
三种计算最小公倍数的方法分析
三种计算最小公倍数的方法分析与比较 一.引言 最小公倍数(Least Common Multiple, LCM)是数学中的一个基本概念,指能够被两个或多个整数整除的最小的正整数。在编程中,我们有多种方法可以计算两个数的最小公倍数。本文将分析三种…...
PDF转换工具xpdf-tools-4.05
XPDF是一个开源的PDF查看、提取和转换工具套件,使用C编写,支持多种操作系统,包括Linux、Unix、OS/2、Windows和Mac OS X1。XPDF不仅是一个PDF查看器,还包含多个实用工具,如文本提取器、图像转换器和HTML转换器等&a…...
aws(学习笔记第四十课) image-content-search
aws(学习笔记第四十课) image-content-search 使用SQS Lambda集成 数据库(Aurora Serverless) Cognito(用户管理) rekognition(图像解析) 学习内容: 使用SQS Lambda Aurora Serverless Cog…...
GPT-4o 图像生成与八个示例指南
什么是GPT-4o图像生成? 简单来说,GPT-4o图像生成是集成在ChatGPT内部的一项功能。用户可以直接在对话中,通过文本描述(Prompt)来创建、编辑和调整图像。这与之前的图像生成工具相比,体验更流畅、交互性更强…...
PostgreSQL 查看表膨胀情况的方法
PostgreSQL 查看表膨胀情况的方法 表膨胀(Table Bloat)是PostgreSQL中由于MVCC机制导致的一种常见现象,当大量数据被更新或删除后,表中会积累"死元组"(dead tuples),这些死元组占据空间但不可见,导致表实际占用的磁盘空…...
从 0 到 1!深度剖析项目实施流程,开启项目管理新视野
一、项目准备 / 前期准备 (一)跟销售进行项目交接 对接人:销售人员交接会议内容: 了解项目背景、客户基本信息、项目版本、具备二次开发功能、接口、了解合同信息等。明确项目情况、客户基本情况、使用软件(版本&…...
书生实战营之沐曦专场
一:实验环境进入和启动实验容器(D.run平台) 1.1首先进入平台进行注册 D.run平台https://console.d.run/ 注册和登录环节就跳过了。 1.2 启动实验容器--详细步骤如下 1.2.1选择容器的名称、区域、镜像(注意镜像必须选择Dlinfer) 1.2.2可以选…...
在运行 Hadoop 作业时,遇到“No such file or directory”,如何在windows里打包在虚拟机里运行
最近在学习Hadoop集群map reduce分布运算过程中,经多方面排查可能是电脑本身配置的原因导致每次运行都会报“No such file or directory”的错误,最后我是通过打包文件到虚拟机里运行得到结果,具体步骤如下: 前提是要保证maven已经…...
基于YOLOV5的目标检测识别
基于YOLOV5的目标检测识别 舰船目标检测口罩目标检测飞机目标检测 舰船目标检测 口罩目标检测 飞机目标检测...
第4篇:服务层抽象与复用逻辑
在业务系统复杂度指数级增长的今天,服务层(Service Layer)的合理设计直接影响着系统的可维护性和扩展性。本文将深入剖析 Egg.js 框架中的服务层架构设计,从基础实现到高级封装,全方位讲解企业级应用的开发实践。 一、…...
多模态大语言模型arxiv论文略读(五十四)
RoboMP 2 ^2 2: A Robotic Multimodal Perception-Planning Framework with Multimodal Large Language Models ➡️ 论文标题:RoboMP 2 ^2 2: A Robotic Multimodal Perception-Planning Framework with Multimodal Large Language Models ➡️ 论文作者ÿ…...
中小企业MES系统详细设计
版本:V1.1 日期:2025年5月2日 一、设备协议兼容性设计 1.1 设备接入框架 #mermaid-svg-PkwqEMRIIlIBPP58 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PkwqEMRIIlIBPP58 .error-icon{fill…...
第二十周:项目开发中遇到的相关问题(一)
自十九周开始,我们便开始着手写项目(关于新闻资讯类的Web项目),当然,在这之中我们也学到了很多高效且有用的好技术,在接下来的内容中将去具体的描述这些好技术,介绍它们的具体用法和应用场景。本…...
WebRtc10: 端对端1v1传输基本流程
媒体能力协商过程 RTCPeerConnection(核心类) 基本格式 pc new RTCPeerConnection([configiration]); RTCPeerConnection方法分类 媒体协商Stream/Track传输相关方法统计相关方法 媒体协商过程 协商状态变化 媒体协商方法 createOffercreateAnswe…...
【云备份】配置文件加载模块
目录 一.为什么要配置文件 二.配置文件的实现 三.单例文件配置类设计 四.源码 一.为什么要配置文件 我们将服务端程序运行中用到的一些关键信息保存到配置文件中,这样可以使程序的运行更加灵活。 这样做的好处是,未来如果我们想要修改一些关键信息&…...
重构之道:识别并替换不合适使用的箭头函数
1、引言 JavaScript 自 ES6 引入了箭头函数(Arrow Function)后,因其简洁的语法和对 this 的词法绑定机制,迅速成为开发者喜爱的写法之一。然而,并不是所有场景都适合使用箭头函数。 在实际开发中,我们常常会因为追求代码简洁而忽视其潜在问题,例如: this 指向错误不适…...
git问题记录-如何切换历史提交分支,且保留本地修改
问题记录 我在本地编写了代码,突然想查看之前提交的代码,并且想保留当前所在分支所做的修改 通过git stash对本地的代码进行暂存 使用git checkout <commit-hash>切换到之前的提交记录。 查看完之后我想切换回来,恢复暂存的本地代码…...