【编码】tomcat8的get请求包含未编码的中文会报400

2023-12-26 17:28

本文主要是介绍【编码】tomcat8的get请求包含未编码的中文会报400,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 背景

世纪初的老项目,使用jsp-servlet,jdk5,部署在tomcat5上。

其中有用到js模态弹窗,window.showModelessDialog(url,window,style)

其中url带有中文提示语,未进行编码处理

现迁移到jdk8,tomcat8.5.96环境

其它还好,但这个弹框内容为400,包含不符合规范的字符

二 原因(推测)

搜到tomcat高版本(7之后)增加了get请求的字符规范校验,包括括号等特殊字符,源码还能看到一堆检查。而且不止那些博客文档提到的{}|等符号,中文乱码、中文符号也会被阻断。没找到屏蔽这些校验的方式

三 尝试过的方案

1 其它文档博客提到的

tomcat/conf/server.xml   connect标签增加 URLEncoding="utf-8"  useBodyEncodingForURI="true" relaxedQueryChars="{}|" relaxedPathChars="{}|" 等等,分别表示请求按此编码、启用uri编码、忽略特殊字符。但实际并没效果,不知道是没包含中文乱码字符还是这配置就没用

2 tomcat/conf/catalina.propertis  放开allow,但试着也没卵用

官方文档:Apache Tomcat 8 Configuration Reference (8.5.97) - System Properties

3 conf/web.xml 或者项目的 webapps/xxx/WEB-INF/web.xml  里面的编码过滤器,改为utf-8

4 jsp顶头有 <%@page contentType="text/html;charset=GBK" %> ,不过好像不影响?这影像是jsp展示在浏览器时指定浏览器的编码

====================================

其中123都是为了让tomcat对请求进行一次编码,不过试下来没效果

以上怎么改都没什么用,但为gbk时全400,改成utf8好歹出现过乱码展示而不是400

======================================

四 最后解决

按三中123改完,4无所谓

然后在js jsp里找到调模态的地方,给url加上 encodeURI(url) 进行编码,接受的jsp不用改了

如果接受还是乱码,就给接受方加个解码

对于老项目改动很大,不过现在的容器这么设计了,不想改代码就改tomcat源码罢

还有这篇挺好的 页面跳转之转发和重定向+Servlet中文乱码问题_java 重定向后中文乱码-CSDN博客

这篇关于【编码】tomcat8的get请求包含未编码的中文会报400的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540246

相关文章

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Python get()函数用法案例详解

《Pythonget()函数用法案例详解》在Python中,get()是字典(dict)类型的内置方法,用于安全地获取字典中指定键对应的值,它的核心作用是避免因访问不存在的键而引发KeyError错... 目录简介基本语法一、用法二、案例:安全访问未知键三、案例:配置参数默认值简介python是一种高级编

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

解决IDEA报错:编码GBK的不可映射字符问题

《解决IDEA报错:编码GBK的不可映射字符问题》:本文主要介绍解决IDEA报错:编码GBK的不可映射字符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录IDEA报错:编码GBK的不可映射字符终端软件问题描述原因分析解决方案方法1:将命令改为方法2:右下jav

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置