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

相关文章

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python实现中文大写金额转阿拉伯数字

《Python实现中文大写金额转阿拉伯数字》在财务票据中,中文大写金额被广泛使用以防止篡改,但在数据处理时,我们需要将其转换为阿拉伯数字形式,下面我们就来看看如何使用Python实现这一转换吧... 目录一、核心思路拆解二、中文数字解析实现三、大单位分割策略四、元角分综合处理五、测试验证六、全部代码在财务票

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

解决Failed to get nested archive for entry BOOT-INF/lib/xxx.jar问题

《解决FailedtogetnestedarchiveforentryBOOT-INF/lib/xxx.jar问题》解决BOOT-INF/lib/xxx.jar替换异常需确保路径正确:解... 目录Failed to get nested archive for entry BOOT-INF/lib/xxx