服务流程设计和服务或端口重定向及其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或服务性能之间的关系》

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

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

相关文章

PHP面试题--后端部分

本文章持续更新内容 之前没来得及整理时间问题导致每次都得找和重新背 这次整理下也方便各位小伙伴一起更轻松的一起踏入编程之路 欢迎各位关注博主不定期更新各种高质量内容适合小白及其初级水平同学一起学习 一起成为大佬 数组函数有那些 ps:本题挑难的背因为…

深入了解 MySQL 中的 JSON_CONTAINS

深入了解 MySQL 中的 JSON_CONTAINS MySQL 5.7 及更高版本引入了对 JSON 数据类型的支持,使得在数据库中存储和查询 JSON 数据成为可能。在这些新功能中,JSON_CONTAINS 函数是一个非常有用的工具,允许我们检查一个 JSON 文档是否包含特定的值…

git命令学习记录

1. git reset 参数说明 git reset 是用来回退版本的,它可以添加三个参数,常用的使用格式是这样的:git reset [--hard | --soft | --mixed] 版本号 一般使用git修改文件并提交需要三步,第一步在文本编辑器中编辑文件,也…

使用DeepSeek+KIMI生成高质量PPT

一、使用DeepSeek DeepSeek官网:DeepSeek 点击“开始对话”,进入交互页面。 在上图中,输入问题,即可获取AI生成的结果。 基础模型(V3):通用模型(2024.12),高…

深度学习工程师的技术图谱和学习路径

在构建一个深度学习工程师的技术图谱时,按照“技能树与能力模型”的结构可以帮助清晰地展示出技术体系的层次化关系,帮助学习者更好地理解每个技术点的依赖与顺序。 深度学习工程师的技术图谱和学习路径 以下是深度学习工程师的技能树,包括从基础到进阶的学习路径,以及对…

RabbitMQ系列(五)基本概念之Queue

在 RabbitMQ 中,Queue(队列) 是存储消息的容器,也是消息传递的核心载体。以下是其核心特性与作用的全方位解析: 一、Queue 的定义与核心作用 消息存储容器 Queue 是 RabbitMQ 中实际存储消息的实体,生产者…

MySQL—使用binlog日志恢复数据

一、binlog日志恢复数据简介 在 MySQL 中,使用二进制日志(binlog)恢复数据是一种常见的用于故障恢复或数据找回的方法。以下是详细的使用步骤: 确认 binlog 已启用:首先需要确认 MySQL 服务器已经启用了二进制日志功…

VADv2: 基于矢量表征和概率规划的E2E架构

1. 写在前面 今天分享一篇自动驾驶领域的论文VADv2(End-to-End Vectorized Autonomous Driving via Probabilistic Planning), 基于矢量表征和概率规划的E2E架构,2024年2月份华中科技大和地平线合作的一篇文章, 在经典的端到端模型架构上作出了基于概率规划去输出规划轨迹的…

NLP11-命名实体识别(NER)概述

目录 一、序列标注任务 常见子任务 二、 命名实体识别(NER) (一)简介 (二)目标 (三)应用场景 (四)基本方法 (五)工具与资源 一…

虚拟仿真无线路由器5G和2.4G发射信号辐射对比(虚拟仿真得出最小安全距离,与国际标准要求一致)

1、前言 有人说,只要有电磁波的地方就有辐射。5G和2.4G信号辐射强度是多少?是否会对人体构成危害?无线路由器的2.4GHz频段,频率范围:2.4 GHz 至 2.4835 GHz,信道宽度:通常为20 MHz,…

深入剖析 OpenCV:全面掌握基础操作、图像处理算法与特征匹配

深入剖析 OpenCV:全面掌握基础操作、图像处理算法与特征匹配 一、引言二、OpenCV 的安装(一)使用 pip 安装(二)使用 Anaconda 安装 三、OpenCV 基础操作(一)图像的读取、显示与保存(…

DOM HTML:深入理解与高效运用

DOM HTML:深入理解与高效运用 引言 随着互联网的飞速发展,前端技术逐渐成为软件开发中的关键部分。DOM(文档对象模型)和HTML(超文本标记语言)是前端开发中的基石。本文将深入探讨DOM和HTML的概念、特性以及在实际开发中的应用,帮助读者更好地理解和使用这两项技术。 …

【数据挖掘】Matplotlib

Matplotlib 是 Python 最常用的 数据可视化 库之一,在数据挖掘过程中,主要用于 数据探索 (EDA)、趋势分析、模式识别 和 结果展示。 📌 1. Matplotlib 基础 1.1 安装 & 导入 # 如果未安装 Matplotlib,请先安装 # pip instal…

DHCP配置实验

实验拓扑图 首先配置server的IP地址和网关 接下来配置R1 undo info-center enable dhcp enable //开启DHCP服务 ip pool dhcp-pool1 //开始配置dhcp地址池 gateway-list 192.168.1.254 //配置网关 network 192.168.1.0 mask 255.255.255.0 //配置网段和子网掩码 dns-list …

Linux:ELF文件-静动态库原理

✨✨所属专栏:Linux✨✨ ✨✨作者主页:嶔某✨✨ ELF文件 什么是编译?编译就是将程序源代码编译成能让CPU直接执行的机器代码 如果我们要编译一个 .c文件,使用gcc -c将.c文件编译为二进制文件.o ,如果一个项目有多个.…

C++性能优化常用技巧

一. 选择合适的数据结构 1.1 map与unordered_map的选择 如果仅仅只需要使用到快速查找的特性,那么unordered_map更加合适,他的复杂度是O(1)。如果还需要排序以及范围查找的能力,那么就选择map。 1.2 vector与list的选择 通常情况下&#…

Towards Graph Foundation Models: A Survey and Beyond

Towards Graph Foundation Models: A Survey and Beyond WWW24 ​#paper/⭐⭐⭐#​ #paper/💡#​ 背景和动机 背景与意义 随着基础模型(如大语言模型)在NLP等领域的突破,图机器学习正经历从浅层方法向深度学习的范式转变。GFM…

基于 Python 深度学习的电影评论情感分析可视化系统(2.0 全新升级)

基于 Python 深度学习的电影评论情感分析可视化系统,基于 Flask 深度学习,构建了一个 影评情感分析系统,能够 自动分析影评、计算情感趋势 并 可视化展示,对于电影行业具有重要参考价值! 基于 Python 深度学习的电影评…

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错,Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网:https://rustup.rs/# 下载:https://win.rustup.rs/x86_64 安装完成之后&#xff0c…

CSS—text文本、font字体、列表list、表格table、表单input、下拉菜单select

目录 1.文本 2.字体 3.列表list a.无序列表 b.有序列表 c.定义列表 4.表格table a.内容 b.合并单元格 3.表单input a.input标签 b.单选框 c.上传文件 4.下拉菜单 1.文本 属性描述color设置文本颜色。direction指定文本的方向 / 书写方向。letter-spacing设置字符…