【编码】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

相关文章

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

VSCode中C/C++编码乱码问题的两种解决方法

《VSCode中C/C++编码乱码问题的两种解决方法》在中国地区,Windows系统中的cmd和PowerShell默认编码是GBK,但VSCode默认使用UTF-8编码,这种编码不一致会导致在VSC... 目录问题方法一:通过 Code Runner 插件调整编码配置步骤方法二:在 PowerShell

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Python如何实现读取csv文件时忽略文件的编码格式

《Python如何实现读取csv文件时忽略文件的编码格式》我们再日常读取csv文件的时候经常会发现csv文件的格式有多种,所以这篇文章为大家介绍了Python如何实现读取csv文件时忽略文件的编码格式... 目录1、背景介绍2、库的安装3、核心代码4、完整代码1、背景介绍我们再日常读取csv文件的时候经常