首页 > 其他分享 >ajax 请求后台连接中断

ajax 请求后台连接中断

时间:2023-09-13 19:11:17浏览次数:43  
标签:编码 中断 22% url ajax 提交 后台 2C% linkUrl

 

         日常开发中,当表单中的参数有url 类的跳转链接时,即使有部分特殊字符,一般也不会有问题,但总会有例外,导致提交表单的时候,ajax 会中断,

         机制大佬A: URL中包含双引号,编码后提交到后端,后端在解码后不会对字符串中的双引号加反斜杠进行转义,导致JSON反序列化异常。解决方案是在提交数据到后端前通过decodeURIComponent(url)进行解码后再提交。

         反驳: 有些url 链接本身无编码,类似 https://www.cnblogs.com/Sientuo/p/6245826.html , 有些url  本身可能经过多层转发,编码过n次,单纯的直接解码是不能满足需求的,类似:[https://xxxxx.baidu.com/?param=%7B%22title%22%3A%22%E3%80%90%E6%B5%8B%E8%AF%95%E3%80%9121Q3%E9%9B%B6%E5%94%AE%E5%90%AF%E5%8A%A8%E4%BC%9A%22%2C%22classesId%22%3A%22606%22%2C%22paperId%22%3Anull%2C%22qdStart%22%3A%222021-05-10%2014%3A00%22%2C%22qdEnd%22%3A%222021-05-10%2024%3A00%22%7D

         机制大佬A: 有时间在处理.., 然后一直到架构离职后还挂着...

         仔细想来,该问题也不算复杂,也有切入点, 问题的源头其实在于 ajax 表单提交时,解析字符串因为有特殊字符被中断,那只要保证提交时没有特殊字符不被中断即可,这样一来,想法就更多了,

         方案A:  通过des 加解密,前端加密,后端解密

         方案B:通过base64转字符串,前端转,后端还原

          有了想法,自然是付诸于实际行动中,加解密自不必说,统一维护一套秘钥即可, 这里记录一下base64转码, 坑还是挺多的, 其一: js 自带的有  window.btoa 编码64, 但是不支持中文,如果url 随意输入一个中文,提交仍然过不了,会报开小差, 所以要考虑的地方有,中文,特殊字符,编码格式,首先编码字母有 ASCII 和非 ASCII 字符之分,做好兼容性也有必要,一般情况下 escape() 在处理部分字符时存在一些问题,并不是最佳的编码方式。 encodeURIComponent稍微靠谱一些

    function SetLinkCodeValue(resultData) {
        var routeId = libUIUtils.getUIObj("@appId").getValue();
        var linkUrl = libUIUtils.getUIObj("@linkUrl").getValue();
        if (encodeURIComponent(linkUrl).indexOf("%u") < 0) {
            //加密字符
            //编码无效 resultData.route_link_url = window.btoa(linkUrl);
            //编码无效 resultData.route_link_url = $.base64.encode(linkUrl);
            resultData.route_link_url = btoa(encodeURIComponent(linkUrl).replace(/%([0-9A-F]{2})/g,
                function toSolidBytes(match, p1) {
                    return String.fromCharCode('0x' + p1);
                }));
        }
    }
            //控制器处理
if (linkUrl != string.Empty && Regex.IsMatch(linkUrl, @"^[a-zA-Z0-9+/]*={0,3}$", RegexOptions.None)) { dataObj.route_link_url = Encoding.UTF8.GetString(Convert.FromBase64String(linkUrl)); }

 这两种组合,效果还不错,输入了大量的转码好多次的脚本,都正常

标签:编码,中断,22%,url,ajax,提交,后台,2C%,linkUrl
From: https://www.cnblogs.com/Sientuo/p/17700474.html

相关文章

  • 群晖(Synology)NAS 后台安装 Docker 后配置 Activemq Artemis
    因最近需要在本地调试消息策略。如果搞个服务器装就太辛苦了,所以就想到了NAS,我们的NAS上已经装了Docker,我们直接运行一个ActivemqArtemis的镜像不就好了。下载镜像在进入NAS的容器管理后,访问Registry。然后输入activeMq进行查找。  选择已经找到的镜像,然后......
  • Android后台模拟点击探索(附源码)攻略
    ​本攻略将详细介绍如何在Android应用中使用后台模拟点击的技术。通过模拟点击,我们可以在后台执行一些用户交互操作,例如点击按钮、输入文本等。这对于自动化测试、批量操作等场景非常有用。步骤一:添加权限首先,在AndroidManifest.xml文件中添加以下权限:<uses-permissionandro......
  • 从零开始使用vue2+element搭建后台管理系统(实现导出excel表格的功能)
    首先参阅了以下文档:https://panjiachen.gitee.io/vue-element-admin-site/zh/feature/component/excel.html#excel-%E5%AF%BC%E5%87%BAhttps://blog.csdn.net/weixin_42028153/article/details/124804841核心思想:抄一下vue-element-admin这个很棒的开源集成后台管理系统中所提......
  • RTSP/Onvif视频服务器EasyNVR视频监控管理平台HLS流播放中断的原因及其解决办法
    EasyNVR是TSINGSEE青犀视频基于RTSP/Onvif协议推出的视频能力平台,既有硬件设备,又有软件平台,是比较灵活的一项流媒体产品。它可实现设备接入、实时直播、录像、检索与回放、存储、视频分发等视频能力服务,可覆盖全终端平台(pc、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧......
  • Fetch和ajax之间的区别
    Fetch和ajax之间的区别fetchFetchAPI是基于Promise设计的Fetch内置了对JSON数据的解析支持,我们只需要调用response.json()方法,可以直接获得返回的JSON数据。语法简洁,更加语义化原生支持率不高,可以用polyfill兼容IE8+浏览器ajax是理用XMLHttpRequest对象来请求数据的,而fetc......
  • Ajax 和 axios 调用接口的使用
     一、前提了解:服务器:负责存放和对外提供资源的电脑‘请求-处理-响应’客户端:在上网过程中,负责获取和消费资源的电脑URL:统一资源定位符,协议域名端口号资源的请求方式: 1.get:获取服务器资源 2.post:向服务器提交数据 3.其他:put修改、delete删除、fetch批量二、Ajax的......
  • 如何保持 SSH 会话不中断?
    哈喽大家好,我是咸鱼不知道小伙伴们有没有遇到过下面的情况:使用终端(XShell、secureCRT或MobaXterm等)登录Linux服务器之后如果有一段时间没有进行交互,SSH会话就会断开如果正在执行一些非后台命令,SSH会话断开就可能会使得这些命令可能会被中断,导致任务无法完成那如何保持......
  • 详解Java多线程编程中线程的启动、中断或终止操作
    ​在Java中start和tun方法可用被用来启动线程,而用interrupt方法来中断或终止线程,以下我们就来详解Java多线程编程中线程的启动、中断或终止操作 线程启动: 1.start()和run()的区别说明start():它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被......
  • 基于webman的CMS,企业官网通用PHP后台管理系统
    2023年9月11日10:47:00仓库地址:https://gitee.com/open-php/zx-webman-website还有laravel+scui的版本目前还未开源,电商laravel版本差不多,后续在移植webman算是比较标准的php+vue的项目CMS,企业官网通用PHP后台管理系统Englishdoc框架介绍WebmanSCUI后端开发组件php8.......
  • Django管理后台访问和登录页面访问数据不一致的问题
    Django管理后台访问和登录页面访问数据不一致的问题问题现象我再创建商品购物车功能后,发现这个功能页面需要放在管理后台。在测试功能时是直接配置路由访问http://localhost:8088/view_cart/是可以正常加载购物车的相关功能的,然后将购物车功能加到管理后台,添加之后发现没有查到......