服务流程设计和服务或端口重定向及其websocket等应用示例
服务流程设计和服务或端口重定向及其websocket等应用示例
目录
服务或端口重定向的服务设计和websocket等应用示例
一、通用请求控制流程
1.1、入口
1.2、所有GET请求首先预检控制单元
1.3、http请求会分别自动307重定向
1.4、所有请求首先执行跨源控制单元
1.5、然后执行三方平台access_token令牌控制
1.6、请求启动器链依赖控制
1.7、重新修正函数GetClientData以统一控制GET请求的UrlSearchParams
1.8、关闭所有POST请求内容的sort排序
1.9、Url.Decode解码所有请求路径
1.10、各类不安全请求的403拦截器
1.11、以上均含文件过滤控制
1.12、以上均含文件缓存控制
1.13、以上均含跨源请求白名单
1.14、执行文件Location请求控制器
1.14.1、执行文件下载控制器
1.14.2、执行html静态文件请求控制器
二、官网html请求
2.1、入口
2.2、其中包含文件过滤控制
三、非官网html请求
3.1、千万需要列入到文件过滤控制
3.2、千万不要列入到文件缓存控制
四、服务端口重定向
4.1、有时需要将不同服务程序进行隔离
4.2、代理端口重定向
4.3、所有代理重定向均应设计为API而非明文html
五、关于websocket
5.1、【微信小程序】WebSocket
5.2、【H5】WebSocket
喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:
一、通用请求控制流程
注意控制顺序:
1.1、入口
http://www.cpuofbs.com/请求路径 或 https://www.cpuofbs.com/请求路径
1.2、所有GET请求首先预检控制单元
通用请求函数 doOptions2Self
1.3、http请求会分别自动307重定向
307到 https://www.cpuofbs.com/index.html 和 https://www.cpuofbs.com 或 https://cpuofbs.com
ExecuteRequest服务控制器执行方法do307Redirect 。
1.4、所有请求首先执行跨源控制单元
通用请求函数 DoCheckCorsOrigin
1.5、然后执行三方平台access_token令牌控制
通用请求函数 doApp_API_access_token
1.6、请求启动器链依赖控制
通用请求函数 doInitiator
1.7、重新修正函数GetClientData以统一控制GET请求的UrlSearchParams
1.8、关闭所有POST请求内容的sort排序
TStringList( Request.ContentFields ).Sorted:=false;
默认的Sorted可能会对xml或json封装的数据产生顺序混乱————报文请求者原有的顺序———— Request.Params内部依赖Request.ContentFields————自己根据实际需要来解析。
1.9、Url.Decode解码所有请求路径
1.10、各类不安全请求的403拦截器
通用请求函数 do403Intercept
1.11、以上均含文件过滤控制
通用过滤请求列表 StaticH5FileList
通用过滤请求函数 isFilteredStaticH5File
1.12、以上均含文件缓存控制
通用缓存请求列表 needCacheFiles
1.13、以上均含跨源请求白名单
通用跨源请求白名单列表 WhiteListHost
通用跨源请求白名单判断函数 isWhiteListHost
通用跨源白名单请求内容安全策略函数 getWhiteListHost4CSP_Requesting
1.14、执行文件Location请求控制器
1.14.1、执行文件下载控制器
通用请求函数 DownloadaFileWithoutSession_BugFeel
1.14.2、执行html静态文件请求控制器
通用请求函数 DoNosessionRootHtmls
二、官网html请求
2.1、入口
http://www.cpuofbs.com/index.html 或 http://www.cpuofbs.com
2.2、其中包含文件过滤控制
通用过滤请求列表 StaticH5FileList
通用过滤请求函数 isFilteredStaticH5File
三、非官网html请求
3.1、千万需要列入到文件过滤控制
需要列入到通用过滤请求列表 StaticH5FileList .根据实际需求客制化:
跨源控制DoCheckCorsOrigin函数会使用该过滤策略。
若该html请求未跨源,可以不列入 StaticH5FileList 。特别注意:跨源websoket(比如端口8080提供的服务)嵌入到该未跨源html请求(比如端口80或443)中时。示例:
if ((window.location.href.toLowerCase() === 'http://192.168.3.242/mywss.html') )
{aURL = 'ws://192.168.3.242:8080/myWSS'
};
if ((window.location.href.toLowerCase() === 'http://127.0.0.1/mywss.html') )
{aURL = 'ws://127.0.0.1:8080/myWSS'
};
if ((window.location.href.toLowerCase() === 'https://www.cpuofbs.com/mywss.html') )
{aURL = 'wss://www.cpuofbs.com:8080/myWSS'
};
const socket = new WebSocket(aURL);
若该html请求跨源,必须列入 StaticH5FileList :此时该源若不在isWhiteListHost函数白名单列表内,只能被默认源default-src访问且内容源和脚本源必须是https才可访问,否则404;该源若在isWhiteListHost函数白名单列表内,则接受设定的CSP策略,才可以被客户端访问,否则404。
3.2、千万不要列入到文件缓存控制
不要列入到通用缓存请求列表 needCacheFiles 根据实际需求客制化
因为缓存有过期时效性,一些服务类的html请求,会涉及到跨源控制DoCheckCorsOrigin且在其中控制设定的CSP内容安全策略,CSP可能会有改动。
CSP(Content-Security-Policy内容安全策略),在函数DoCheckCorsOrigin中设定。
四、服务端口重定向
4.1、有时需要将不同服务程序进行隔离
比如,websocket服务器、tcp-socket服务器、专用的上传服务器、专用的下载服务器、专用的邮件服务器等等;又比如专用平台的服务器,诸如“微信小程序服务器”、“ERP、CRM、SCM”等业务服务器。
因为这些服务具有过很多特性,将它们与官网混合在一起,会相互影响访问的性能。
此时可以运用“端口重定向技术”。
4.2、代理端口重定向
比如websocket的服务程序:
http://192.168.3.242/myWSS.html ===> ws://192.168.3.242:8080/myWSS
https://www.cpuofbs.com/myWSS.html ===> wss://www.cpuofbs.com:8080/myWSS
//代理端口重定向__比如websocket的服务程序: //注意不要_涉及SSL证书过期时的验证if LowerCase(RequestPathInfo).Contains('tls')and (Request.ServerPort=8080) thenbeginif _IsHTTPS_ then gSCProxyPortInit(true,443,8080,host_domain,'/')else gSCProxyPortInit(false,443,8080,Request.host,'/');Handled:=true; Result:=1;exit;//:◆◆将请求分发给__◆监听8080端口的【服务】//_比如◆◆websocket◆◆end else;
4.3、所有代理重定向均应设计为API而非明文html
防止恶意程序利用搜索引擎Robots协议扫描html文件。所有API均应执行登录验证流程。
五、关于websocket
5.1、【微信小程序】WebSocket
◆◆◆◆注意事项:
◆若【微信小程序】WebSocket 并发数 1.7.0 及以上版本,最多可以同时存在 5 个 WebSocket 连接。
1.7.0 以下版本,1对1:一个小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接 https://developers.weixin.qq.com/miniprogram/dev/api/network/websocket/wx.connectSocket.html#并发数
◆若【微信小程序】TCP Socket实例
●禁止与以下端口号连接:1024 以下
●禁止与以下端口号连接:1099 1433 1521 1719 1720 1723 2049 2375 3128 3306 3389 3659 4045 5060 5061 5432 5984 6379 6000 6566 7001 7002
8000-8100 8443 8888 9200 9300
10051 10080 11211 27017 27018 27019
●每 5 分钟内最多创建 20 个 TCPSocket

5.2、【H5】WebSocket
◆同一个浏览器,允许不同的【标签页】连接同一个WebSocket URL。
服务器会视为不同的客户端连接句柄,客户端连接的FSocket不同,UID_MASK掩码亦会不同。
◆同一台设备不同浏览器,同一个WebSocket URL。
服务器均会视为不同的客户端连接。
喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:
本博客相关文章:
《CPU或GPU的cache与芯片纳米级别和APP或服务性能之间的关系》
相关文章:
服务流程设计和服务或端口重定向及其websocket等应用示例
服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…...
【数据库】关系代数
关系代数 一、关系代数的概念二、关系代数的运算2.1 并、差、交2.2 投影、选择2.3 笛卡尔积2.4 连接2.5 重命名2.6 优先级 一、关系代数的概念 关系代数是一种抽象的数据查询语言用对关系的运算来表达查询 运算对象:关系运算符:4类运算结果:…...
ubuntu20 安装python2
1. 确保启用了 Universe 仓库 在某些情况下,python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表: bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装: bash复制…...
MySQL无法连接到本地localhost的解决办法2024.11.8
问题描述:我的MySQL可以远程连接服务器,但无法连接自己的localhost。 错误提示: 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因: 1. 检查环境变量是否正确:发现没…...
【Leetcode 每日一题】1328. 破坏回文串
问题背景 给你一个由小写英文字母组成的回文字符串 p a l i n d r o m e palindrome palindrome,请你将其中 一个 字符用任意小写英文字母替换,使得结果字符串的 字典序最小 ,且 不是 回文串。 请你返回结果字符串。如果无法做到࿰…...
最新Spring Security实战教程(一)初识Spring Security安全框架
🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…...
Docker的常用镜像
Docker的常用镜像命令主要包括镜像的查看、搜索、拉取、删除、构建等操作,以下是综合多个来源的总结: 一、基础镜像操作 查看本地镜像 docker images• 显示所有本地镜像,包含仓库名(REPOSITORY)、标签(TAG…...
告别GitHub连不上!一分钟快速访问方案
一、当GitHub抽风时,你是否也这样崩溃过? 😡 npm install卡在node-sass半小时不动😭 git clone到90%突然fatal: early EOF🤬 改了半天hosts文件,第二天又失效了... 根本原因:传统代理需要复杂…...
MapReduce 深度解析:原理与案例实战
在大数据时代,数据量的爆炸性增长对数据处理提出了前所未有的挑战。MapReduce 作为一种编程模型和并行处理框架,能够让我们在分布式环境下高效处理海量数据。本文将详细讲解 MapReduce 的基本原理、工作流程,并通过一个案例来展示如何应用这种…...
Android中的Fragment是什么以及它有哪些生命周期方法
Android中的Fragment介绍 Fragment,直译为“碎片”或“片段”,是Android中的一种组件,可以看作是Activity的模块化部分。它可以在一个Activity中承载一部分用户界面和逻辑,并能被多个Activity复用。通过Fragment,开发…...
Leetcode 1477. 找两个和为目标值且不重叠的子数组 前缀和+DP
原题链接: Leetcode 1477. 找两个和为目标值且不重叠的子数组 class Solution { public:int minSumOfLengths(vector<int>& arr, int target) {int narr.size();int sum0;int maxnINT_MAX;vector<int> dp(n,maxn);//dp[i]表示以索引i之前的满足要求…...
Ubuntu 22.04安装NVIDIA A30显卡驱动
一、安装前准备 1.禁用Nouveau驱动 Ubuntu默认使用开源Nouveau驱动,需要手动禁用: vim /etc/modprobe.d/blacklist-nouveau.conf # 添加以下内容: blacklist nouveau options nouveau modeset0 # 更新内核并重启: update-initr…...
R语言绘图:韦恩图
韦恩分析 韦恩分析(Venn Analysis)常用于可视化不同数据集之间的交集和并集。维恩图(Venn diagram),也叫文氏图、温氏图、韦恩图、范氏图,用于显示元素集合重叠区域的关系型图表,通过图形与图形…...
Stable Diffusion Prompt编写规范详解
Stable Diffusion Prompt编写规范详解 一、语法结构规范 (一)基础模板框架 [质量强化] [主体特征] [环境氛围] [风格控制] [镜头参数]质量强化:best quality, ultra detailed, 8k resolution主体特征:(1girl:1.3), long …...
大模型推理框架Triton使用教程:从青铜到王者的修炼
1 相关预备知识 模型:包含了大量参数的一个网络(参数结构),体积10MB-10GB不等模型格式:相同的模型可以有不同的存储格式(可类比音视频文件),目前主流有torch、tf、onnx和trt&#x…...
C#+Halcon 检测稳定性提升的方式
前言 众所周知,C#是一个带垃圾回收机制的语言,开发过程中不需要考虑垃圾回收,你就可劲造吧。但我们在设计图像处理软件时,应时刻对图像等大内存资源进行管控,做到自行管控,及时释放,不应将其交…...
智谱AI-FunctionCall
智谱AI-FunctionCall 编写FuncationCall大模型的函数调用,先直观的感受一下的感受下FunctionCall的魅力 文章目录 智谱AI-FunctionCall[toc]1-参考网址2-思路整理3-代码拆件1-[非核心]两个业务函数2-[非核心]业务函数的JsonSchema定义3-[核心]FunctionCall的调用1-打…...
android亮灭屏流程分析
前言 亮灭涉及的东西非常多,因此单独写一个文档,进行详细说明,亮灭屏包括的东西不只是亮灭屏,还包括亮度调节、屏幕状态变化等东西。本文仅作学习使用,不涉及商业,侵权请联系删除。 framework层的学习链接…...
Docker Desktop常见问题记录
1.docker pull报错,无法连接https://registry-1.docker.io/v2/ 报错信息如下: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection(Client.Timeout exceeded …...
vscode+vue前端开发环境配置
目录 一、安装Vue二、使用vue新建项目 一、安装Vue 在node.js安装好之后, npm config set registry https://registry.npmmirror.com# 安装vue相关工具,webpack用来项目构建、打包、资源整合等。 npm install webpack -g# 安装vue-cli脚手架 npm insta…...
Qt5 C++ QMap使用总结
文章目录 功能解释代码使用案例代码解释注意事项代码例子参考 功能解释 QList<T> QMap::values() const Returns a list containing all the values in the map, in ascending order of their keys. If a key is associated with multiple values, all of its values wi…...
《解锁HarmonyOS NEXT高阶玩法:艺术图像识别功能开发全攻略》
在当今数字化时代,AI技术不断拓展其应用边界,为各行业带来前所未有的变革。在艺术领域,AI图像识别技术能够帮助艺术从业者、爱好者快速识别艺术品风格、作者,甚至挖掘艺术品背后的历史文化信息。本文将结合HarmonyOS NEXT API 12及…...
post get 给后端传参数
post 方式一 : data: params 作为请求体(Request Body)传递: 你已经展示了这种方式,通过data字段直接传递一个对象或数组。这种方式通常用于传递复杂的数据结构。dowmfrom: function (params) { return request({ u…...
Masscan下载Linux安装
masscan 是一款高速的端口扫描工具,能够在极短的时间内扫描大量IP地址和端口。以下是关于如何在Linux系统上下载并安装 masscan 的详细步骤。 ### 通过包管理器安装 对于一些Linux发行版,你可以直接使用系统的包管理器来安装 masscan。例如,…...
Hive-08之数据仓库之建模、分析
一、目标 掌握数据仓库基本概念熟悉数据仓库的模型建立 二、知识要点 1. 数据仓库基本介绍 英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)…...
仿12306项目(4)
基本预定车票功能的开发 对于乘客购票来说,需要有每一个车次的余票信息,展示给乘客,供乘客选择,因此首个功能是余票的初始化,之后是余票查询,这两个都是控台端。对于会员端的购票,需要有余票查询…...
MySQL零基础教程16—表连接进阶
复习表别名 之前已经学习过,查询的时候可以使用as来对检索的列进行重命名,这样可以让sql更加简介,增强易读性(as可以省略) 此外,使用表别名还可以支持在一条select语句中,一个表是被多次使用 …...
【JavaSE-3】运算符
1、什么是运算符 就是对常量或者变量进行操作的符号,如:,-,*,/ 表达式: 用运算符把常量或者变量连接起来的,符合java语法的式子就是表达式。 2、 算术运算符 2.1、基本四则运算符 - * / % 都…...
直接法估计相机位姿
引入 在前面的文章:运动跟踪——Lucas-Kanade光流中,我们了解到特征点法存在一些缺陷,并且用光流法追踪像素点的运动来替代特征点法进行特征点匹配的过程来解决这些缺陷。而这篇文章要介绍的直接法则是通过计算特征点在下一时刻图像中的位置…...
VS2022C#windows窗体应用程序调用DeepSeek API
目录 一、创建DeepSeek API Key 二、创建窗体应用程序 三、设计窗体 1、控件拖放布局 2、主窗体【Form1】设计 3、多行文本框【tbContent】 4、提交按钮【btnSubmit】 5、单行文字框 四、撰写程序 五、完整代码 六、运行效果 七、其它 一、创建DeepSeek API Ke…...
